1、制作合适的数据集
1.1 mask文件和yolov5放在同一个文件夹下
1.2 mask文件夹下包含两个文件(train和valid)和一个data.yaml
train:训练集,包含用于训练的图片和图片的位置信息(txt格式)
valid:验证集,包含用于验证的图片和图片的位置信息(txt格式)
data.yaml:用于存放train和valid的绝对地址以及类别总数(nc)、类别名称
1.3 train文件夹下包括两个文件夹,images用来存放图片,labels存放图片信息(txt格式包括类被和位置信息)。(train文件夹主要用来训练)
1.4 vaild文件夹下存放格式与train相同
1.5 data.yaml文件如下,train and val后面接地址,nc表示类别的总数,name后面是类别名称。
需要注意的是,txt文件中第一个是表示的某一类别,3是指在names数组中第4个类别
数据集到这就可以开始训练了
2、用自己的数据集进行训练
在pycharm下打开yolov5对应的文件夹,激活环境
conda activate yolov5
接着修改yolov5/models/yolov5s.yaml,将nc = 80修改为nc = 4.
把数据集准备好,并且修改好yolov5s.yaml里的参数,接下来就可以执行训练命令,生成一个针对你自己准备的数据集的
python train.py --img 640 --batch 16 --epoch 300 --data C:~\V1\mask\data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt
data后面接的是上文1.5中data.yaml文件的完整路径
epoch是指训练完整个数据集的次数,可以自己指定
batch是指单次训练的图片数量,和显卡相关,如果报错就调小
经过漫长的等待,训练完成
生成的best.pt就是所得到的权重
3、测试生成的权重
python detect.py --weight runs\exp21\weights\best.pt --source C:\Users\Lenovo\Desktop\IMG_4390.JPG
detect.py:用于检测的程序
weight:选择刚训练好的权重路径
source:选择一张测试图片(没有用过的)的路径
打开得到图片
在这里说一下碰到的问题和我所用的解决的办法
一开始batch size的大小写的16,但是一直不运行也不报错,于是就开始减小,减小为8时,报错
RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
You can try to repro this exception using the following code snippet. If that doesn't trigger the error, please include your original repro script when reporting this issue.
于是减小到1,然后开始运行了。