yolov5s学习记录
YOLOv5s训练学习记录:
训练、获取模型
下载yolov5
数据集准备与文件夹结构
这里我使用的是之前提供的装甲板数据集’RM_train_data’
这个和原本提供的’RM_train_data’不太一样,需要改成下边的样子
1 | ├─images |
新建数据路径yaml配置文件
比如我在./data下新建了一个RM.yaml(应该很容易看懂)
1 | # YOLOv5 🚀 by Ultralytics, AGPL-3.0 license |
新建yaml配置文件
比如我在./models下新建了个yolov5s_RM.yaml(从yolov5s.yaml改来的,只要改一下nc的值(也就是’number of classes’的值)就好了)
训练
用下边的命令开始训练
1 | python train.py --data RM.yaml --cfg yolov5s_RM.yaml --weights yolov5s.pt --epoch 120 --batch-size 16 --device 0 |
训练结束后会在./runs中生成/train/expX文件夹,最后训练出的模型为/expX/weights/best.pt,加载这个模型即可进行目标检测
例如:
1 | python3 detect.py --weights ./runs/train/exp2/weights/best.pt --source 0 --device 0 |
一些参数 YOLOv5训练与测试参数介绍
--weigths
: 指的是训练好的网络模型,用来初始化网络权重
--cfg
:为configuration的缩写,指的是网络结构,一般对应models文件夹下的xxx.yaml文件
--data
:训练数据路径,一般为data文件夹下的xxx.yaml文件
--epochs
:设置训练的轮数
--batch-size
:每次输出给神经网络的图片数
--rect
: 是否采用矩形训练
--resume
: 指定之前训练的网络模型,并继续训练这个模型
--cache-images
:是否对图片进行缓存,可以加快训练
--device
:训练网络的设备cpu还是gpu
--sync-bn
:生效后进行多 GPU 进行分布式训练
--workers
: 多线程训练
--name
: 训练结果保存文件名
--multi-scale
:训练过程中对图片进行尺度变换
--weights
:训练的权重
--source
:测试数据,可以是图片/视频路径,也可以是’0’(电脑自带摄像头),也可以是rtsp等视频流
--output
:网络预测之后的图片/视频的保存路径
--img-size
:网络输入图片大小
--conf-thres
:置信度阈值(检测精度,作者是设置的0.25)
--iou-thres
:做nms的iou阈值()
--device
:设置设备
--save-txt
:是否将预测的框坐标以txt文件形式保存,默认False
--classes
:设置只保留某一部分类别,形如0或者0 2 3
--agnostic-nms
:进行nms是否也去除不同类别之间的框,默认False
--augment
:推理的时候进行多尺度,翻转等操作(TTA)推理
--update
:如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
C++下使用opencv部署yolov5模型
我感觉这个不太好搞,当然,也可能是我的搜索方式不太对
【opencv c++】实现yolov5部署onnx模型完成目标检测 - iuk11 - 博客园
基于OpenCV和ROS的Yolov5模型推理部署 - 掘金
有个人写了好多相关内容:
2021.04.15更新 c++下使用opencv部署yolov5模型 (二)_opencv调用yolov5模型_爱晚乏客游的博客-CSDN博客
2021.09.02更新说明 c++下使用opencv部署yolov5模型 (三)_opencv yolov5_爱晚乏客游的博客-CSDN博客
2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)_如何查看yolov5版本_爱晚乏客游的博客-CSDN博客
2022.07.25 C++下使用opencv部署yolov7模型(五)_opencv yolov7_爱晚乏客游的博客-CSDN博客
2022.09.29更新 c++下面部署yolov5实例分割模型(六)_c++ yolov5_爱晚乏客游的博客-CSDN博客
- [x] 下次打开这个记得看(一)里边的修改common.py
关于C++下使用opencv部署yolov5模型的记录:
参考了的帖子:
Linux下C++中OpenCV无法读取视频文件的解决方法(opencv isopened) – 抖店铺 (doudianpu.com)
linux下opencv with ffmpeg安装-CSDN博客
Yolov5 + Opencv DNN + C++部署-腾讯云开发者社区-腾讯云 (tencent.com)
在使用上边这个文章的代码进行测试的时候,我发现在cv::VideoCapture capture("VIDEO.mp4")
这里直接写视频文件名(此时视频存在项目根目录下,这个写法相当于是相对路径)会出现capture.isOpened()
返回值是 false 的错误,必须改成绝对路径才不会报错,得写成cv::VideoCapture capture("/home/rimrose/CLionProjects/ForTest001/VIDEO.mp4")
用到的测试视频:
测试视频—YOLOV5+Deep Sort_哔哩哔哩_bilibili
上边所说的路径问题解决之后遇到了新问题,报错如下:
1 | [ERROR:0@0.110] global onnx_importer.cpp:1031 handleNode DNN/ONNX: ERROR during processing node with 1 inputs and 1 outputs: [Floor]:(onnx_node!/model.11/Floor) from domain='ai.onnx' |
暂时不知道如何解决,不过看报错应该主要问题是src.size == dst.size && src.type() == dst.type() && src.isContinuous() && dst.isContinuous() && src.type() == CV_32F
,可能是输入输出尺寸的问题;但是这又是官方给的代码,模型也是官方的模型,按理说不应该有问题的吧()