
yolov8实现数竹签模型,实现自动数竹签(超详细)
yolov8训练数竹签模型
随着计算机视觉技术的发展,YOLO(You Only Look Once)系列算法因其高效的实时检测能力而广泛应用。YOLOv8作为最新版本,通过优化策略实现了更高效的目标检测性能。本研究基于YOLOv8,利用PyCharm训练了一个用于竹签计数的模型。该模型旨在提高计数的准确性和效率,克服传统人工计数的不足。
与传统人工计数的区别:
1、提高了生产效率和工作速度,节约了时间和成本
2、模型可以持续运行,不会因为疲劳或其他因素影响计数结果的一致性
3、避免了人工计数中可能出现的误差和漏计的问题
详细过程:
1、在github下载yolov8模型并解压后使用pycharm打开
2、下载权重文件pt后放入该项目(也是在github官网下载,往下拉找到“Models"并点击"YOLOv8n"进行下载,也可根据自己需要下载别的Model)
3、将自己相应的数据集放入项目(数据集格式有严格要求,不清楚的自行百度,我的数据集会放在文末)
如图,我的数据集为dataset,里面包括images和相应的labels(已经分为训练集和验证集)
4,修改两个yaml文件
(1)第一个时coco.yaml文件,一般位于cfg\datasets下,这里需要将数据集的路径修改为为自己的(为了不影响原来的,我这里是将该文件复制粘贴后再修改)
如下图就是修改后的yaml文件,首先path要修改为自己上一步放进来的数据集dataset的路径,train 和val 也是dataset下的,然后"names"这里表示的是类别,从0开始,我这里只是统计竹签的数目,所以只有一个类别
(2)第二个yaml文件,是yolov8.yaml,我同样是复制粘贴了一份叫"myyolov8.yaml”然后这里仅需要把“nc", 也就是类别数改为1就好,其余保持不变
5、开始训练自己的模型
当以上步骤都完成时,就可以开始训练自己的模型了。
先在项目里创建一个py文件,然后把下面代码放进去(注意要修改三个路径,一个是第二步下载 的pt文件,另外两个是上一步修改 的yaml文件,
from ultralytics import YOLO
# Create a new YOLO model from scratch
model = YOLO(r"D:\Downloads\ultralytics-main (1)\ultralytics-main\ultralytics\cfg\models\v8\myyolov8.yaml")
# Load a pretrained YOLO model (recommended for training)
model = YOLO(r"D:\Downloads\ultralytics-main (1)\ultralytics-main\yolov8n.pt")
# Train the model using the 'coco8.yaml' dataset for 3 epochs
results = model.train(data=r"D:\Downloads\ultralytics-main (1)\ultralytics-main\ultralytics\cfg\datasets\mycoco128.yaml", epochs=30)
# Evaluate the model's performance on the validation set
results = model.val()
标红的三个路径需要替换为自己的,我这里epochs设置的是30.当以上都完成后,就可以开始模型的训练了。
6、运行时会提示结果保存的位置,到时候在这里便可以查看训练结果,比如f1,recall,pre等等
如下图所示,其中weights下还有一个best.pt文件,这就是我们模型在此训练集训练出来的最好权重模型,待会我们需要用这个模型来进行竹签检测
7、用训练好的模型进行预测,新建py文件,把代码放进去,这里同样需要修改三个路径
import os
import glob
from ultralytics import YOLO
# 加载模型
model = YOLO(r"D:\Downloads\ultralytics-main (1)\ultralytics-main\runs\detect\train\weights\best.pt")
# 设置预测参数
image_path = r"C:\Users\Desktop\mytest1.png"
image_name = os.path.splitext(os.path.basename(image_path))[0] # 获取不带扩展名的文件名
# 执行预测
results = model.predict(
source=image_path,
show=True, # 显示预测结果
save=True, # 保存预测结果
save_txt=True, # 保存预测结果为TXT文件
project=r"D:\Downloads\ultralytics-main (1)\ultralytics-main\results", # 指定保存结果的根目录
name="predictions" # 指定保存结果的子目录名称
)
# 查找最新生成的目录
results_dir = r"D:\Downloads\ultralytics-main (1)\ultralytics-main\results"
subdirs = [d for d in glob.glob(os.path.join(results_dir, '*')) if os.path.isdir(d)]
latest_subdir = max(subdirs, key=os.path.getmtime) # 根据修改时间获取最新的目录
# 定义标注文件路径
txt_file_path = os.path.join(latest_subdir, "labels", f"{image_name}.txt")
# 统计TXT文件中的行数
bamboo_count = 0
if os.path.exists(txt_file_path):
with open(txt_file_path, 'r') as file:
bamboo_count = len(file.readlines())
print(f'竹签的数目: {bamboo_count}')
首先是"model"这里的路径时上一步训练出来的”best.pt"
然后时image_path,这里修改为自己需要预测图片的路径
最后时project,这里放的是自己放结果的文件夹路径,我这里是新建了一个result目录用于放结果(下面"results_dir"的路径需要和此处一致)
设置好后便可运行测试了
8、结果如图,会显示保存的路径以及竹签的数目
数据集链接:https://pan.baidu.com/s/14FPmqM-pPLRdJcfWrDoVhQ
提取码:7856
更多推荐
所有评论(0)