用YOLOv5来识别图片与视频中超可爱的逢坂大河吧!(完整步骤)

基于NAIE平台的YOLOv5识别超超超可爱的逢坂大河

注:下篇使用了更多元化的数据集,有更高的精确度。

步骤简述

  • 安装YOLOv5。
  • 使用labelImg对图片加入标签,并保存为YOLO格式。
  • 对数据集整理,创建yaml文件。
  • 使用YOLOv5训练数据集。
  • 使用YOLOv5预测数据集。

YOLOv5安装

labelImg安装

  • 官方安装教程:https://github.com/tzutalin/labelImg#windows
  • 步骤:
    • 下载labelImg
    • anaconda安装及启动指令:
      • conda install pyqt=5
        • 安装pyqt5
      • conda install -c anaconda lxml
        • 安装lxml
      • pyrcc5 -o libs/resources.py resources.qrc
        • 在labelImg源码目录下使用pyqt5
      • python labelImg.py
        • 启动

数据集需求

  • 官方推荐数据集需求
    • 每类图片数量:每类大于1500张图片
    • 每个类的实例:每类实例(标签)大于一万份。
    • 图像多样性:确保图片来自不同环境。对于现实世界物体的识别,推荐使用来自不同时间、不同季节、不同天气、不同光照度、不同角度、不同来源的图片。
    • 标签一致性:所有类中所有实例必须都被标签标记,不要遗漏。
    • 标签准确性:标签能准确标记对象,不要在对象与标记框之间留下缝隙。没有对象可以不用标记(背景图片)。
    • 背景图片:背景图片是指没有对象的图片,用来减少误报。YOLO推荐0~10%的背景图片来减少误报(COCO数据集包含1000张背景图片,占据总数1%)。
  • 但不是一定需要,顶多准确性差了点,我的图片52张,标签不到70个,识别成功率还是挺高的。
    • 但误报也不少的。

标签标定

  • 官方提供的YOLO帮助:https://github.com/tzutalin/labelImg#steps-yolo
  • cmd打开labelImg目录,使用python labelImg.py打开。
  • 步骤:
    • 打开labelImg/data文件夹,删除predefined_classes.txt文件
    • 在工具栏上的FILE选项中,按下PascalVOC按钮,切换成YOLO输出格式。
    • 使用Open Dir选择图片目录。
    • 使用Change Save Dir选择标签保存目录。
  • 快捷键:
    • 按w启动标签标定。
    • 按a/d左右切换图片。
    • 按ctrl s保存标定的标签。
  • 官方文档提示:
    • difficult选项在YOLO类型中没用。
    • use default label选项没用。
  • 注:
    • 保存的标签只会按名称保存,与图片的格式无关。
    • 即,如果有两张图片”picture.jpg”与”picture.png”,它们的标签文件都保存成picture.txt。
    • 所以如果重名,会覆盖。
  • 正确标签内容示例:
    • 文件名:filename.txt
    • 文件内容:0 0.209635 0.330417 0.173437 0.274167

数据集与yaml准备

  • yaml文件位置随意,只有训练命令中作为参数时有用,不一定要与数据集放一起。
  • 数据集文件夹放在yolov5的父目录中。
    • 即:
    • 父目录
      • dataset
      • yolov5-master
    • 根据yaml中写的路径而定
  • 数据集文件夹内容:
    • images:图片文件夹,与yaml中路径一致。
    • labels::标签文件夹,yolov5会自动匹配。
  • images文件夹内容:
    • 图片。
  • labels文件夹内容:
    • 图片对应的YOLO格式的txt标签。
  • yaml文件内容:
    • 下载路径(可选):
      • download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip
    • 训练与验证数据路径:
      • train: ../coco128/images/train2017/ # 128 images
      • val: ../coco128/images/train2017/ # 128 images
      • 路径格式:1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/
    • 标签类数:
      • nc: 80 # 80 labels
    • 标签名:
      • names: [‘label1’, ‘label2’] # 按标签时的顺序,类似列表格式。
    • 例:
      • train: ../Taiga/images
      • val: ../Taiga/images
      • nc: 1
      • names: [‘cute’]

YOLOv5参数

  • 在训练命令中加,或者在train.py/test.py/detect.py的最下方修改。
  • –epochs 100
    • 训练次数,次数越多效果越好,但训练到后期变化很小,因此不应太高也不应太低。
  • –batch-size 4
    • 根据本机性能来设定,如果本机性能跟不上它会提示you tried to allocate 4915200 bytes. Buy new RAM!
    • 最佳的解决办法自然是按它说的一样买内存。
    • 但还是把这个值设定小点更省钱。

YOLOv5训练

  • 本次训练路径:
    • yolov5
      • Taiga
        • images
        • labels
        • Taiga.yaml
      • yolov5-master
        • train.py
        • yolov5s.pt
  • 训练:
    • cmd工作目录切换至yolov5-master
    • python train.py --data ../Taiga/Taiga.yaml --cfg ./models/yolov5s.yaml --epochs 200 --batch-size 4
    • 注:我的batch-size直接在train.py里改了,所以实际上我并没有输入--batch-size 4
  • 本次训练结果保存至yolov5-master\runs\train\exp24中,结束时保存位置会提示。

YOLOv5图像/视频预测

  • 本次预测路径:
    • yolov5
      • Toradora
        • toradora-op1.mp4
      • AisakaTaiga-full
        • AisakaTaiga (1).jpeg
        • AisakaTaiga (1).jpg
        • AisakaTaiga (1).png
        • AisakaTaiga (2).jpg
      • yolov5-master
        • detect.py
        • runs
          • train
            • exp24
              • test_batch0_labels.jpg
              • test_batch0_pred.jpg
              • weights
                • best.pt
  • AisakaTaiga-full图片集预测:
    • 工作目录:yolov5-master
    • python detect.py –weight .\runs\train\exp24\best.pt –source ..\AisakaTaiga-full
    • 预测结果:yolov5-master\runs\detect\exp7
  • toradora-op1.mp4视频预测:
    • 工作目录:yolov5-master
    • python detect.py –weight .\runs\train\exp24\weights\best.pt –source ..\Toradora\toradora-op1.mp4
    • 预测结果:yolov5-master\runs\detect\exp10
    • 注:中断预测也能出结果,它预测到哪里视频就在哪里停止,视频格式不会有问题。

训练结果

  • 对52张图片中67个特征进行训练(好像是67个)。
    • 非默认参数:--epochs 200 --batch-size 4
    • 注:根据其训练日志来看,训练六十次就差不多了,到一百一十次的时候就几乎没有变动了。
  • 图1与图2为训练结果,其中,图1为实际标签,图2为预测结果。
图1:test_batch0_labels.jpg
图2:test_batch0_pred.jpg

图片预测结果

  • 预测结果见图3、图4。
    • 因为训练集里面大多是正脸,并且每个还是多个画师的作品(单风格符合原作),
    • 因此识别结果对正脸识别正确率较高,但也偶有正确的侧脸图片。
    • 像图3就非常棒,至于图4,是我的问题,我没多找几幅图,也没多弄几个标签。
图3:“妙啊!”的图片
图4:“可恶!”的图片

视频预测结果

图5:视频预测结果

参考文献

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注