基于yolov5建立自己的数据集识别流程及可能遇到的问题

一、源码的下载与模型部署

yolov5 模型 github仓库:ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

csdn教程链接:【大作业-05】手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程_搭建yolo目标检测的环境. 使用yolo-air模块来做实验-优快云博客

建议下载源码,但是想着找一个教程先实现,所以下载了csdn上的一些源码,对比后发现和github仓库中的requirements.txt版本要求是不太一样的。

所以以下模型部署和可能遇到的问题基于csdn连接中下载的代码。

建议python版本3.10及以下,因为可能与requirements.txt中的一些包冲突,例如requirements.txt中要求pillow>=10.3.0,直接pip install的话,会与pillow==8.4.0的版本冲突:

并且后续如果需要自己label数据集的话,需要pip install labelimg,labelimg在高版本的python运行不稳定会闪退。

具体的环境创建(包学包会):机器学习入门篇之环境的搭建_机器学习不搭虚拟环境如何搭真实环境-优快云博客

虽然说可以在终端用命令train或者detect,但是在pycharm中具体的修改某些路径、创建文件感觉比较方便(适合我这种小白),代码中需要了解的部分(后续涉及到修改的,同时防止代码拿到手不了解的时候乱修改):

代码文件夹认知,重要的文件夹是data、models、runs、dataset(自己的数据集):

  1. data文件夹中存放后续自己数据集的dataset.yaml(包括训练集、验证集地址和类别、类别数量信息);
  2. models文件夹中存放后续自己数据集的dataset_yolov5s.yaml(只需要修改第四行的number of classes);
  3. runs存放train.py、detect.py每次运行的结果。
  4. dataset中按照下面的格式放置:
    dataset
    └─ score
           ├─ images
           │    ├─ test # 下面放测试集图片
           │    ├─ train # 下面放训练集图片
           │    └─ val # 下面放验证集图片
           └─ labels
                  ├─ test # 下面放测试集标签
                  ├─ train # 下面放训练集标签
                  ├─ val # 下面放验证集标签
    

文件认知:train.py训练文件,修改443-445行路径、447行训练epoch数,后续会生成best.pt文件供detect;detect.py后续修改其中206、207行路径检测识别。 

二、数据标注

数据标注这里使用的软件是labelimg(也有博客使用labelme),通过pip指令即可安装:

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

如果前面环境下的python版本比较高,这里打开进行数据标注会闪退,此时不用担心,不用回退环境python版本,解决方法为新创建一个python版本为3.8的虚拟环境,在虚拟环境中安装打开labelimg,之后可以正常使用。

把标注的格式切换为yolo之后再进行数据标注!

但是,如果标注的图片过多,一次标注不完,如果没有predefined_labels.txt,下次再打开时label就会全部变乱!(吃过苦的人都懂!)解决方法是在dataset(自己数据集的文件夹下)和labelimg路径下创建一个predefined_labels.txt(将要标注的标签类别),然后在文件夹中cmd打开终端,激活环境,输入:

labelimg ./data predefined_classes.txt

这里参考了:labelImg的使用——导入已有标签,避免重复打标签_labelimg导入已有标签-优快云博客

(30 封私信) 使用labelimg标注图片再次打开图片与标注序号不对应怎么办? - 知乎

dataset(自己数据集的文件夹下)效果如下:

labelimg文件夹中效果如下:

运行labelimg后就会出现predefined_labels.txt中的label,然后可以在标注的时候自己选择。

三、代码运行报错debug

在代码运行前需要准备的dataset.yaml、dataset_yolov5s.yaml按最前面的csdn教程做就可以。

在运行train.py的时候遇到几个报错:

1、报错:AttributeError: module ‘numpy‘ has no attribute ‘int‘.

原因:numpy版本的问题(np.int在1.20.0版本后不再适用)

如果选择回退numpy版本,又会有其他包版本冲突。解决方法:找到报错的位置,然后把np.int修改成int,改到不报这个错为止(没几个地方)。

2、报错:result type Float can‘t be cast to the desired output type __int64

原因:在更新后的torch版本中,代码`gain=torch.ones(7,device=targets.device)`需要显式转换为`gain=torch.ones(7,device=targets.device).long()`,因为新版本不自动执行这种类型转换,而旧版则可以。

解决方法:找到loss.py,将其中的:

gain = torch.ones(7, device=targets.device)

替换为:

 gain = torch.ones(7, device=targets.device).long()

 3、可以正常运行,但是报错:FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated.

原因:torch从2.4及以后便不再支持torch.cuda.amp.autocast(args...),因此需要对该函数进行替换

将报错位置的:

with amp.autocast(autocast):

替换为:

with torch.amp.autocast("cuda"):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值