YOLOv5 从配置到部署

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

一. 简介

  • You only look once!
  • 单阶段目标检测(Faster RCNN 双阶段)
  • 快速
  • 精度较高
  • 使用方便
  • https://github.com/ultralytics/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

  • 参考博客:

    https://blog.csdn.net/weixin_45294823/article/details/104119863?spm=1001.2014.3001.5501

三.测试

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

四.数据集

1.准备

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

2.标注:

  • labelImg(img的i大写,其他小写)

    1. 安装

      pip install labelImg
      
    2. 打开

      labelImg 
      
    3. 设置

      1. 点击“改变存放目录”,选择yolov5/dataset/labels/train
      2. 点击“打开目录",选择yolov5/dataset/images/train
      3. 设置标注格式为yolo
      4. view中勾选自动保存模式和显示类别
    4. 标注

      • w 创建区块,框选标注的物体,输入标签名称
      • a/d 切换上一张/下一张
      • 选中标签,可拖动或修改大小,右侧“编辑标签”可改变标签名称
      • ctrl + d 复制当前标签
      • ↑↓←→键 微调标签位置
      • ctrl + v 复制上一张图片的标签 (在连续标注相同类别标签时很有用)
    5. 注意

      • 标注后会生成classes.txt文件,里面的顺序应和标注文件内的物体一一对应
      • 第一次出现的物体要注意名称不要打错
      • 多人合作标注一定要保证classes.txt内的顺序一致
      • 标注框应紧贴被标注的物体,不要留有缝隙
      • 注意不要漏标
  • Roboflow (官方推荐的在线标注网站)

    1. 网址:https://roboflow.com

    2. 创建project (命名随意)
      YOLOv5 从配置到部署_第2张图片

    3. 上传图片(可不分train和val把所有图片都放入)

    4. 标注

      • d 拖拽
      • c 画框
      • ←/→ 切换上一张/下一张
      • 其余操作点击图标
    5. 分配train/val/test (训练集,验证集,测试集)
      YOLOv5 从配置到部署_第3张图片

    6. 选择图片预处理
      YOLOv5 从配置到部署_第4张图片

    7. 选择数据增强
      YOLOv5 从配置到部署_第5张图片

    8. 导出数据集(选择YOLOv5格式)
      YOLOv5 从配置到部署_第6张图片

    9. 下载数据集

      • 自动导出的目录结构与上面我们自己建的不同,两种结构都可以

      • 新建dataset文件夹,将下载的train和val文件夹放入即可

      • 将data.yaml放入data文件夹

      • 下载的文件内容:
        YOLOv5 从配置到部署_第7张图片

3.官方建议

YOLOv5 从配置到部署_第8张图片

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

五.训练

1.准备

  1. 在data文件夹内修改或创建data.yaml (文件名可自定义)

    • train和val 指定训练集和测试集的图片所在文件夹路径
    • nc 为训练的classes数量
    • names 为标签名,需要和classes.txt顺序一一对应
    • YOLOv5 从配置到部署_第9张图片
  2. 修改models文件夹中对应预训练模型的yaml文件

    • 只需修改nc为你训练的classes数量
    • YOLOv5 从配置到部署_第10张图片

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则可以继续上次中断的训练
  • 训练效果
    YOLOv5 从配置到部署_第11张图片

  • 随着训练进度,[email protected]将从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
    
  8. 连接到Google Drive

    import os
    from google.colab import drive
    drive.mount('/content/drive')  #输出Mounted at /content/drive
    
  9. cd到yolo目录

    %ls
    %cd /content/drive/MyDrive/colab/yolov5  #路径可能不同,注意要加%,一边cd一遍ls到yolo目录
    
  10. 安装依赖

    !pip install -qr requirements.txt
    !pip install -U pyyaml
    
  11. 开始训练

    !python train.py --img 640 --batch 16 --epochs 300 --data data/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt   #注意前面加'!'
    
  12. 注意

    • 需要科学上网

    • 用手机也可以训练

    • 网络需要稳定

    • 需要时不时检查,防止掉线

    • 若中途停止训练可以加上–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文件夹

  2. 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'
    
  3. 修改最下方device为camera,mode=’realtime’

    name = yolo.detect(device='camera', mode='realtime', attributes=None, depth=False, rotate=False)
    
  4. 运行即可

你可能感兴趣的:(计算机视觉,目标检测)