一、安装
1.源码下载
git clone git://github.com/ultralytics/yolov5.git
cd yolov5
2.环境配置
conda create -n yolov5 python=3.8
conda activate yolov5
nvcc -V查看cuda版本
pytorch官网下载对应版本,例如当cuda版本为11.6
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
3.权重下载
-
https://github.com/ultralytics/yolov5
-
点击右侧Releases
-
最下方Assets中点击下载相应模型(yolov5s.pt)
4.测试
python3 detect.py --source data/image --weights yolov5s.pt
二、数据集
1.数据集准备
新建dataset文件夹 (名字可自定义)
新建images和labels文件夹 (名字不能错)
images和labels内分别新建train和val文件夹 (名字不能错)
将准备的图像按大致8 : 2随机分配,放入images的train和val文件夹内,作为训练集和验证集
labels文件夹将存放之后生成的txt格式标签
如图:
2.数据标注
推荐使用Roboflow
每类图片数量大于1500张 (不同场景上下浮动)
每类图片的实例(标注的数量)大于10000 (同上)
图片多样性: 不同光照,不同角度最重要
标签一致性: 不能有漏标的待检测物体
标签准确性: 标签需紧贴被标物体,不留空隙,不能漏标
背景图: 在训练集中加入0~10%的背景图(没有任何标注),以减少假阳性/过拟合 (防止将背景的特征误认为是物体的特征)
三、训练
1.准备
1.在data文件夹内修改或创建data.yaml (文件名可自定义)
-
train和val 指定训练集和测试集的图片所在文件夹路径
-
nc 为训练的classes数量
-
names 为标签名,需要和classes.txt顺序一一对应
2.修改models文件夹中对应预训练模型的yaml文件
-
只需修改nc为你训练的classes数量
2.本地训练
cd yolov5 python train.py --img 640 --batch 16 --epochs 300 --data data/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --device 0
参数说明
img 图片大小
device 使用cpu或者gpu
batch batch-size 和显卡性能有关,在能设的范围内越大越好,最好为2的倍数(玄学)
epochs 训练迭代次数
data 指定之前修改的data/data.yaml
cfg 模型结构配置文件
weights 允许练模型权重
resume 如果指定–resume则可以继续上次中断的训练
workers 多线程
训练效果
-
随着训练进度,mAP@.5将从0趋近1
-
观察多少epochs之后mAP开始趋近1,则模型收敛
-
训练过程中best和last模型会实时保存到runs/train/expn/weights中
3.官方建议
训练小模型或中模型建议使用预训练模型
训练大模型建议不用预训练模型,从头开始训练
使用P6模型作为预训练模型可以提高精度,但是会减慢速度,P6模型image size为1280
初始epochs设为300,如果过拟合减少epochs,欠拟合则增加epochs
默认image size 640,如果训练小物体检测可将image size设为1280
训练,测试和部署的image size应一致
使用硬件所允许最大的batch size
四、detect
python detect.py --source data/image --weights runs/train/weights/best.pt --device cpu
五、export
python export.py --data data/myjob.yaml --weights runs/train/weights/best.pt --device cpu --include onnx --opset 12
python detect.py --source data/image --weights runs/train/weights/best.onnx --device cpu
netron可视化onnx
一般使用int8量化
六、c++推理加速
git clone https://github.com/Hexmagic/ONNX-yolov5
mkdir build&&cd build
cmake ..
make -j4
cd ..
./build/main yolov5s.onnx data/images/zidane.jpg
七、打标工具
https://roboflow.com/