用YOLOv5来识别图片与视频中超可爱的逢坂大河吧!(完整步骤)
基于NAIE平台的YOLOv5识别超超超可爱的逢坂大河注:下篇使用了更多元化的数据集,有更高的精确度。
步骤简述
- 安装YOLOv5。
- 使用labelImg对图片加入标签,并保存为YOLO格式。
- 对数据集整理,创建yaml文件。
- 使用YOLOv5训练数据集。
- 使用YOLOv5预测数据集。
YOLOv5安装
- 见:Yolov5安装教程 -MWHLS' blog
- 有安装问题欢迎在帖子下提出,或CSDN的帖子下评论。
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个,识别成功率还是挺高的。
- 但误报也不少的。
标签标定
- 本文使用的龙与虎图片数据集下载(附yaml文件):
- 官方提供的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
- ...
- Taiga
- yolov5
- 训练:
- 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
- exp24
- train
- Toradora
- yolov5
- 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为预测结果。
图片预测结果
- 预测结果下载:
- 预测结果见图3、图4。
- 因为训练集里面大多是正脸,并且每个还是多个画师的作品(单风格符合原作),
- 因此识别结果对正脸识别正确率较高,但也偶有正确的侧脸图片。
- 像图3就非常棒,至于图4,是我的问题,我没多找几幅图,也没多弄几个标签。
视频预测结果
- 视频见:
- 没声音,要声音应该需要自己合成,没找到这选项。
- 预测效果和图片差不多。
共有 0 条评论