YOLOv5 从配置到部署

  • YOLOv5
  • 一. 简介
  • 二. 安装 (Ubuntu)
  • 1. 下载源码
  • 2. 配置环境
  • 3. 下载权重
  • 4. 使用GPU(英伟达显卡)
  • 三.测试
  • 四.数据集
  • 1.准备
  • 2.标注:
  • 3.官方建议
  • 五.训练
  • 1.准备
  • 2.本地训练
  • 3.使用Google Colab云训练
  • 4.官方建议
  • 六.部署
  • 1.使用官方detect.py
  • 2.使用Cmoon中的Detector.py


YOLOv5

一. 简介

二. 安装 (Ubuntu)

1. 下载源码

git clone git://github.com/ultralytics/yolov5.git
cd yolov5

2. 配置环境

  • 有conda环境(推荐)
conda create -n py38 python=3.8
conda activate py38
pip install -r requirements.txt
  • 无conda环境(需要Python3.8或3.6)
pip3 install -U -r requirements.txt

3. 下载权重

  • 官网下载(能上Github)
  1. https://github.com/ultralytics/yolov5
  2. 点击右侧Releases
  3. 最下方Assets中点击下载相应模型
  • Cmoon复制
git clone git://github.com/Cmoon-cyl/ros-module.git

将ros-module/cmoon/src 中的weights文件夹复制到yolov5文件夹

4. 使用GPU(英伟达显卡)

  • 安装显卡驱动
  • 安装CUDA以及CUDNN


三.测试

python3 detect.py --source 0 --weights weights/yolov5s.pt

四.数据集

1.准备

  • 新建dataset文件夹 (名字可自定义)
  • 新建images和labels文件夹 (名字不能错)
  • images和labels内分别新建train和val文件夹 (名字不能错)
  • 将准备的图像按大致8 : 2随机分配,放入images的train和val文件夹内,作为训练集和验证集
  • labels文件夹将存放之后生成的txt格式标签
  • 如图:

2.标注:

  • labelImg(img的i大写,其他小写)
  1. 安装
pip install labelImg
  1. 打开
labelImg
  1. 设置
  1. 点击“改变存放目录”,选择yolov5/dataset/labels/train
  2. 点击“打开目录",选择yolov5/dataset/images/train
  3. 设置标注格式为yolo
  4. view中勾选自动保存模式和显示类别
  1. 标注
  • w 创建区块,框选标注的物体,输入标签名称
  • a/d 切换上一张/下一张
  • 选中标签,可拖动或修改大小,右侧“编辑标签”可改变标签名称
  • ctrl + d 复制当前标签
  • ↑↓←→键 微调标签位置
  • ctrl + v 复制上一张图片的标签 (在连续标注相同类别标签时很有用)
  1. 注意
  • 标注后会生成classes.txt文件,里面的顺序应和标注文件内的物体一一对应
  • 第一次出现的物体要注意名称不要打错
  • 多人合作标注一定要保证classes.txt内的顺序一致
  • 标注框应紧贴被标注的物体,不要留有缝隙
  • 注意不要漏标
  • Roboflow (官方推荐的在线标注网站)
  1. 网址:https://roboflow.com
  2. 创建project (命名随意)
  3. 上传图片(可不分train和val把所有图片都放入)
  4. 标注
  • d 拖拽
  • c 画框
  • ←/→ 切换上一张/下一张
  • 其余操作点击图标
  1. 分配train/val/test (训练集,验证集,测试集)
  2. 选择图片预处理
  3. 选择数据增强
  4. 导出数据集(选择YOLOv5格式)
  5. 下载数据集
  • 自动导出的目录结构与上面我们自己建的不同,两种结构都可以
  • 新建dataset文件夹,将下载的train和val文件夹放入即可
  • 将data.yaml放入data文件夹
  • 下载的文件内容:

3.官方建议

yolov5安装pytorch yolov5安装部署_计算机视觉

  1. 每类图片数量大于1500张 (没那么夸张)
  2. 每类图片的实例(标注的数量)大于10000 (同上)
  3. 图片多样性: 不同光照,不同角度最重要
  4. 标签一致性: 不能有漏标的待检测物体
  5. 标签准确性: 标签需紧贴被标物体,不留空隙,不能漏标
  6. 背景图: 在训练集中加入0~10%的背景图(没有任何标注),以减少假阳性/过拟合 (防止将背景的特征误认为是物体的特征)

五.训练

1.准备

  1. 在data文件夹内修改或创建data.yaml (文件名可自定义)
  • train和val 指定训练集和测试集的图片所在文件夹路径
  • nc 为训练的classes数量
  • names 为标签名,需要和classes.txt顺序一一对应
  1. 修改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
  • 参数说明:
  • img 图片大小
  • batch batch-size 和显卡性能有关,在能设的范围内越大越好,最好为2的倍数(玄学)
  • epochs 训练迭代次数
  • data 指定之前修改的data/data.yaml
  • cfg 模型结构配置文件
  • weights 允许练模型权重
  • resume 如果指定–resume则可以继续上次中断的训练
  • 训练效果
  • 随着训练进度,mAP@.5将从0趋近1
  • 观察多少epochs之后mAP开始趋近1,以在下次训练时修改epochs数
  • 训练过程中best和last模型会实时保存到runs/train/expn/weights中

3.使用Google Colab云训练

  1. 创建谷歌账号
  2. 登录Google Drive
  3. 上传数据集和yolo源码 (点击“新建”,”上传文件夹”)
  4. 新建一个.ipynb文件 (点击“新建“,”更多”,”Google Colaboratory”)
  5. 点击“修改”,”笔记本设置”,”硬件加速器”,”GPU”
  6. 点击右侧“连接”
  7. 查看分配到的GPU
!nvidia-smi
  1. 连接到Google Drive
import os
from google.colab import drive
drive.mount('/content/drive')  #输出Mounted at /content/drive
  1. cd到yolo目录
%ls
%cd /content/drive/MyDrive/colab/yolov5  #路径可能不同,注意要加%,一边cd一遍ls到yolo目录
  1. 安装依赖
!pip install -qr requirements.txt
!pip install -U pyyaml
  1. 开始训练
!python train.py --img 640 --batch 16 --epochs 300 --data data/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt   #注意前面加'!'
  1. 注意
  • 需要科学上网
  • 用手机也可以训练
  • 网络需要稳定
  • 需要时不时检查,防止掉线
  • 若中途停止训练可以加上–resume从中断处继续训练
  • 训练过程中best和last模型会自动保存在云盘yolo目录的runs/train/expn/weights中

4.官方建议

  1. 训练小模型或中模型建议使用预训练模型
  2. 训练大模型建议不用预训练模型,从头开始训练
  3. 使用P6模型作为预训练模型可以提高精度,但是会减慢速度,P6模型image size为1280
  4. 初始epochs设为300,如果过拟合减少epochs,欠拟合则增加epochs
  5. 默认image size 640,如果训练小物体检测可将image size设为1280
  6. 训练,测试和部署的image size应一致
  7. 使用硬件所允许最大的batch size

六.部署

1.使用官方detect.py

  1. 将yolov5/runs/train/expn/weights中的best.pt复制到yolov5/weights文件夹
python detect.py --source 0 --weights weights/best.py

2.使用Cmoon中的Detector.py

  1. 将yolov5/runs/train/expn/weights中的best.pt复制到cmoon/src/weights文件夹
  2. 修改Detector类中的模型名称
self.weights = os.path.dirname(__file__) + '/weights/' + 'best.pt'
  1. 修改最下方device为camera,mode=’realtime’
name = yolo.detect(device='camera', mode='realtime', attributes=None, depth=False, rotate=False)
  1. 运行即可