YOLOv5s训练学习记录

armorFinder_ROS2

YOLOv5s训练学习记录:

训练、获取模型

YOLOv5初级使用教程

下载yolov5

git上下载Yolov5并调通测试代码

数据集准备与文件夹结构

这里我使用的是之前提供的装甲板数据集’RM_train_data’
这个和原本提供的’RM_train_data’不太一样,需要改成下边的样子

├─images  
│  ├─test  
│  ├─train  
│  └─val  
└─labels  
     ├─test  
     ├─train  
     └─val  
新建数据路径yaml配置文件

比如我在./data下新建了一个RM.yaml(应该很容易看懂)

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license
# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC by University of Oxford
# Example usage: python train.py --data VOC.yaml
# parent
# ├── yolov5
# └── datasets
#     └── VOC  ← downloads here (2.8 GB)


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
# path: ../datasets/VOC
train: /home/danielvon/MyCodes/RM_train_data/images/train # 3555 images
val: /home/danielvon/MyCodes/RM_train_data/images/val # 360 images
test: /home/danielvon/MyCodes/RM_train_data/images/test


# Classes
nc: 12 # number of classes
names: ['r1', 'r2', 'r3', 'r4', 'b1', 'b2', 'b3', 'b4', 'rs', 'rj', 'bs', 'bj'] # class names
新建yaml配置文件

比如我在./models下新建了个yolov5s_RM.yaml(从yolov5s.yaml改来的,只要改一下nc的值(也就是’number of classes’的值)就好了)

训练

用下边的命令开始训练

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,加载这个模型即可进行目标检测
例如:

python3 detect.py --weights ./runs/train/exp2/weights/best.pt --source 0 --device 0

一些参数 YOLOv5训练与测试参数介绍

train.py

--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:训练过程中对图片进行尺度变换

detect.py

--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.03.11更新 c++下使用opencv部署yolov5模型(一)_[error:0] global c:\build\master_winpack-build-win_爱晚乏客游的博客-CSDN博客

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博客

  • 下次打开这个记得看(一)里边的修改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

上边所说的路径问题解决之后遇到了新问题,报错如下:

[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'
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.9.0) /home/rimrose/opencv-4.9.0/modules/dnn/src/onnx/onnx_importer.cpp:1053: error: (-2:Unspecified error) in function 'handleNode'
> Node [Floor@ai.onnx]:(onnx_node!/model.11/Floor) parse error: OpenCV(4.9.0) /home/rimrose/opencv-4.9.0/modules/dnn/src/layers/elementwise_layers.cpp:260: error: (-215:Assertion failed) src.size == dst.size && src.type() == dst.type() && src.isContinuous() && dst.isContinuous() && src.type() == CV_32F in function 'forward'

暂时不知道如何解决,不过看报错应该主要问题是src.size == dst.size && src.type() == dst.type() && src.isContinuous() && dst.isContinuous() && src.type() == CV_32F,可能是输入输出尺寸的问题;但是这又是官方给的代码,模型也是官方的模型,按理说不应该有问题的吧()

← to be continued
  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要计算使用 YOLOv5s 模型的 FPS(每秒处理帧数),您需要使用以下步骤: 1. 使用 OpenCV 读取视频或摄像头帧。 2. 将每帧输入 YOLOv5s 模型中进行目标检测。 3. 在绘制检测框和标签之前,使用时间戳记录检测开始的时间。 4. 在完成绘制后,使用时间戳记录检测结束的时间。 5. 计算每秒处理帧数(FPS):FPS = 1 / (检测结束时间 - 检测开始时间)。 以下是一个示例代码,可以帮助您计算 FPS: ``` import time import cv2 import torch from models.experimental import attempt_load from utils.general import non_max_suppression # Load YOLOv5s model model = attempt_load('models/yolov5s.pt', map_location=torch.device('cpu')) # Initialize video capture cap = cv2.VideoCapture(0) while True: # Read frame from video ret, frame = cap.read() # Perform object detection using YOLOv5s start_time = time.time() detections = model(frame) detections = non_max_suppression(detections, conf_thres=0.5, iou_thres=0.5) end_time = time.time() # Draw detection boxes and labels for det in detections[0]: x1, y1, x2, y2, conf, cls = det cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) cv2.putText(frame, f'{cls}: {conf:.2f}', (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # Calculate FPS fps = 1 / (end_time - start_time) cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # Show frame cv2.imshow('YOLOv5s', frame) # Exit on 'q' key if cv2.waitKey(1) == ord('q'): break # Release video capture and close all windows cap.release() cv2.destroyAllWindows() ``` 上述代码中,我们首先加载了 YOLOv5s 模型,然后使用 `cv2.VideoCapture()` 函数初始化了视频捕获对象。在每个循环迭代中,我们从视频中读取帧并将其输入模型中进行目标检测。检测完成后,我们计算了每秒处理帧数(FPS),并在每个帧上绘制了检测框和标签以及 FPS 值。按下 'q' 键可以退出程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值