之前训练自己模型的时候使用的是博主 bubbling的1.0分支的代码,博主的 博客比较详细,使用的是VOC2007数据集,可以快速上手根具需要训练自己的模型。不过最近需要将yolov5的模型部署到旭日X3派的开发板上,参考教程和社区帖子一阵折腾,成功转换模型并运行了,就是检测的结果很不理想(后续补坑,看看么个事儿)。猜想可能是版本问题,模型后处理过程不同导致,决定按教程里面,使用 官方2.0分支训练部署模型试试。
准备代码、权重、数据集
在准备放置yolov5工程的文件目录打开终端,使用命令:
git clone https://github.com/ultralytics/yolov5 # clone repo
cd yolov5
git reset --hard 5e970d4 # last commit before v2.0
或者直接在官方2.0分支页面Assets下点击下载Sources code(zip)并解压。接着下载yolov5l/m/s/x.pt这些预训练权重文件(分别对应大/中/小/较大),建议先使用yolov5s.pt试试,下载后放在解压后的yolov5-2.0文件夹下的weights文件夹下。
配置环境
conda create -n yolo python=3.8.10
在yolov5工程文件夹中右键打开终端,使用创建的yolo环境
conda activate yolo
安装依赖:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
然后运行一下命令,对/inference/images中的图片作一个检测:
python detect.py --weights weights/yolov5s.pt --img 416 --conf 0.4 --source inference/images/
可以看到/inference/output文件中已有结果。
准备数据
在yolov5-2.0/data文件夹下打开终端:
bash get_coco2017.sh
没有魔法大概率连接不了下载coco数据集的网站,可以使用百度网盘下载一个coco128数据集,可以看到coco128数据集中的图片文件的存放和/data/coco128.yaml中train:描述的路径一致,coco128中labels中存放为yolo格式的.txt标注文件,文件名称和images中的图片一一对应。
可以将自己的数据集图片存放在yolov5-2.0/data/coco128/images/train2017中。
修改/data/coco128.yaml中的train:和val:为./data/coco128/images/train2017/nc:为自己标注的类别数量,names:为标注时使用的标签名称。
标注数据
在yolo环境中使用清华源镜像安装标注工具labelImg
(yolo)xxx:~$ pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple
安装成功后,运行labelImg
(yolo)xxx:~$ labelImg
打开目录选择yolov5-2.0/data/coco128/images/train2017;改变存放目录选择yolov5-2.0/data/coco128/labels/train2017(标注产生的文件将保存在此位置);格式选择YOLO;点击创建区块,使用矩形框选要识别检测的物体并给定标签:xxx;点击查看,可勾选自动保存模式;滑动鼠标滚轮可对待标注图片进行放大缩小。
训练模型
数据准备好后,运行下列命令进行训练:
python train.py --img 640 --batch 16 --epochs 100 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights ./weights/yolov5s.pt
训练过程中可能出现如下错误:
1.