1.提取coco数据集的行人数据(单类)
(1) 下载数据集
可以在官网上下载
https://cocodataset.org/#download
可以直接下载(直接有txt格式的用于训练的labels)
https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip
具体数据集下载网址在data文件夹的.yaml文件里面有
(2)json文件转xml文件(json2xml.py)(从官网下载的数据集的标签是json格式的)
需要自己改的部分:savepath、img_dir、anno_dir、classes_names、dataDir
最终效果是分别提取数据集train和val里面包括人的图片存到新的train和val的文件夹里面
有个缺点是annotations没有分类存到分别对应的val和train文件夹里面,存到了同一个文件夹,所以还需要后面分开的操作
(3) xml文件转txt文件(xml2txt.py)
(4) 把txt文件分成两个文件夹(copy.py),对应train和val的图片名称
数据集和代码的文件夹要并列放在同一个目录下
2.改配置文件
(1)修改./data文件夹中的yaml文件(train.py中的data参数对应的文件)
新建一个yaml文件,这里命名为pedestrain.yaml,里面的内容为用于训练和测试的图片的路径、 nc值(有几类)、类别名
(2)修改./models文件夹中的yaml文件(train.py中的cfg参数对应的文件)
这里用到的是yolov5s,所以改yolov5s.yaml,只需要改nc参数即可(这里改为1)
3.训练
可以直接在train.py中修改参数,包括:
--weights 初始模型.pth(预训练模型)的位置,这里用的是yolov5s,官网获取
--cfg 修改后的yolov5s.yaml的位置 “./models/yolov5s.yaml”
--data 新建的pedestrain.yaml的位置 “./data/pedestrain.yaml”
--epochs 一般取50-200,过小欠拟合,过大过拟合
--batch-size 根据计算机的性能选择,memory不够就调小一点
然后开始训练:
python train.py
一些解释(摘抄自 https://www.it610.com/article/1283375016167096320.htm)
epochs:指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。
batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。
cfg:存储模型结构的配置文件
data:存储训练、测试数据的文件
img-size:输入图片宽高,显卡不行你就调小点。
rect:进行矩形训练
resume:恢复最近保存的模型开始训练
nosave:仅保存最终checkpoint
notest:仅测试最后的epoch
evolve:进化超参数
bucket:gsutil bucket
cache-images:缓存图像以加快训练速度
weights:权重文件路径
name: 重命名results.txt to results_name.txt
device:cuda device, i.e. 0 or 0,1,2,3 or cpu
adam:使用adam优化
multi-scale:多尺度训练,img-size +/- 50%
single-cls:单类别的训练集
训练得到的权重会保存在runs/train/exp/weights文件夹下,有last.pt和best.py,一般使用best.py。还包括了训练过程中的其他信息。
如果不想花时间训练,可以直接通过链接下载已经训练好的权重:
https://download.csdn.net/download/weixin_52415611/14925850
其中包括了epochs为25、35、50、100、200时的五个权重。
4.使用权重
只需要将所需要使用的权重放置在与detect.py的同一目录下,将权重的default改为需要使用的权重即可。