目录
1.安装CUDA和pytorch(网上教程很多此处不再赘述,注意pytorch不要安装成CPU版本的)
2.在终端里cd 到 yolov5-v5.0目录下 安装requirements.txt文件里的包
1.AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘XXX‘问题
2.RuntimeError: result type Float can‘t be cast to the desired output type __int64
1.YOLO5-v5.0下载
YOLO预训练模型下载
(我这里选择yolo5s.pt轻量级的,文件一般越大精度越高但所需的时间,要求的配置也相应增加)
官方地址:(点击直接访问,不用github加速,打开后划到页面最下面即可)
这里下载速度可能会很慢给大家推荐给好用的软件 motrix
复制下载链接到软件上提交即可
2. 数据集的准备
可以参考大佬文章:目标检测---数据集格式转化及训练集和验证集划分_训练集和验证集的划分代码-CSDN博客
使用labelimg工具对数据集打标签
注意:yolo5使用的是txt文件格式(xml和txt文件可以互转)
voc标签格式,保存为xml文件。
yolo标签格式,保存为txt文件。
将下载的图片和打的标签分别保存在不同的文件夹
数据集划分为训练集和测试集
按照这种格式划分数据集(images里放图片,labels里放标签),(train里放训练集,val里放测试集)
3.搭配YOLO5环境
1.安装CUDA和pytorch(网上教程很多此处不再赘述,注意pytorch不要安装成CPU版本的)
安装完成后可以用以下代码测试
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available()) #输出为True,则安装无误
结果:
这里cu121代表安装的是GPU版本
2.在终端里cd 到 yolov5-v5.0目录下 安装requirements.txt文件里的包
cd yolov5-v5.0
pip install -r requirements.txt
4.配置YOLO5代码
1.找到data文件下的voc.py文件复制粘贴
修改其中的文件
这里的 nc 是标签类别的个数
2.找到models文件下的yolov5s.yaml文件复制粘贴(这里根据自己下载的预训练模型来、,我下载的是yolo5s.pt 所以选择yolov5s.yaml)
修改其中的nc=2
3.修改主目录下的train.py文件
将weights , cfg,data 里的help 改为对应的路径 (这里我将下载好的yolov5s.pt放在了weights 文件夹下)(Windows电脑所有路径都应gaiw)
epochs :200 :训练的轮数
batch-size:12 : 根据自己的电脑配置来出现GPU不足就调低
img-size :640,640 :图片的分辨率也是根据自己的电脑配置
完成上述操作之后就可以运行了
运行开始时会在你的数据集文件夹下下载 两个文件
训练结束后可以在runs文件夹下的train文件里的exp 查看训练结果
这里的weights文件夹下存放着如下两个(训练结果)文件(待会用到)
4.找到主目录下的detect.py文件(我们用它来测试训练结果)
weights 修改其中的路径为刚刚训练出来的best.pt文件路径
source 放置想要测试的图片路径(视频路径和图片一样,如果想打开摄像头设置为0即可)
运行结果可在runs文件夹下的detect里的exp下查看
5.找到主目录下的text.py文件 测试训练的模型的精度
修改其中的weights和data (方法同上)并在runs文件下会生成text.py文件
5.结果展示
6.遇到的问题
1.AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘XXX‘问题
解决:这里是YOLO5的common.py文件缺少了SPPF类在官网找到YOLO的common.py里的SPPF类复制粘贴到本地文件即可
在model文件下找到common.py文件
2.RuntimeError: result type Float can‘t be cast to the desired output type __int64
解决方法:找到utils文件夹下的loss.py文件,搜索 gain = torch.ones(7, device=targets.device) 将其修改为gain = torch.ones(7, device=targets.device).long()
3.数据集定义了两个猫狗两个类别,但是训练结果只有一个
查看runs文件下的exp文件里的图片发现dog没有
这是正常的
原因:猫狗数据集的标签TXT里只定义了一种类别'0'
解决办法:将猫狗分别定义为0,1
大佬文章
dd目标检测---教你利用yolov5训练自己的目标检测模型_目标检测 教你利用-CSDN博客