【YOLOv5】初体验

【YOLOv5】初体验

1、 Yolov5简介

Yolov5官方代码中,给出的目标检测网络中一共有4个版本,分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。

Yolov5的结构和Yolov4很相似,但也有一些不同。

上图即Yolov5的网络结构图,可以看出,还是分为输入端、Backbone、Neck、Prediction四个部分。

大家可能对Yolov3比较熟悉,因此大白列举它和Yolov3的一些主要的不同点,并和Yolov4进行比较。

​ **(1)输入端:**Mosaic数据增强、自适应锚框计算、自适应图片缩放
​ **(2)Backbone:**Focus结构,CSP结构
​ **(3)Neck:**FPN+PAN结构
​ **(4)Prediction:**GIOU_Loss

Yolov5作者也是在COCO数据集上进行的测试,COCO数据集的小目标占比,因此最终的四种网络结构,性能上来说各有千秋。Yolov5s网络最小,速度最少,AP精度也最低。但如果检测的以大目标为主,追求速度,倒也是个不错的选择。其他的三种网络,在此基础上,不断加深加宽网络,AP精度也不断提升,但速度的消耗也在不断增加。

总结:在目标检测领域,速度比YOLO快的,精度基本没有YOLO高。精度比YOLO高的,速度基本没有YOLO快。

2、环境依赖

本人环境声明:

主机:极链AI云GPU服务器,GPU为TITAN Xp 24。配置如下。

系统:ubuntu 18.04

开发工具:vscode+ssh

step1、克隆项目

YOLOv5源码托管在github上:

git clone https://github.com/ultralytics/yolov5.git

step2、安装必要的环境

  1. 下载[Anaconda],执行安装指令:
bash /your_dir/Anaconda3-2021.05-Linux-x86_64.sh

如若不更改安装路径,一直回车或者输入yes即可完成安装

接下来创建YOLOv5的虚拟环境,以便于隔离不同Python版本之间的影响:

conda create --name YOLOv5 python=3.8#创建虚拟环境
conda activate YOLOv5#激活虚拟环境

  1. 安装Pytorch,在官网可以找到安装指令,选择Stable(1.9.0)版本,Linux操作系统,Conda开发环境,Python开发语言,CUDA 11.1。便能得到安装指令:

conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c nvidia
  1. 安装其他必备环境,YOLOv5其他必备环境都写在代码包里面,有个requirements.txt文件,其中包括了一些基本的必备环境。只需执行如下指令即可安装。
pip install -U -r requirements.txt

3 、设置样本数据和标签

此次样本数据来自某电厂的仪器仪表数据,主要是识别照片中的仪器仪表位置。

首先,通过一个简单的脚本rename.py为这些照片进行重命名:

#rename.py
#coding:UTF-8
import os
folder_path = "/样本数据的路径/"
file_list = os.listdir(folder_path)
os.chdir(folder_path)   
n=0
for old_name in file_list:
    new_name = "image" + str(n) +".JPG"
    os.rename(old_name, new_name)
    n=n+1

可以得到如下结果:

接下来,为样本数据设置标签(labels)。这里使用的labelImg工具。可以直接使pip安装

pip isntall labelImg#安装labelImg

labelImg是一款是用于制作数据集时,对数据集进行标注的工具,labelImg是深度学习最常用的标注工具之一。

注意:labels文件夹应和images文件在同一路径下。且labels文件夹下应有一个名为classes.txt文件,里面写着分类类别。

运行方法为在命令行工具(Windows下可以是CMD 、Powershell等),指定image路径和分类标签路径。

label /image路径/   /label标签保存路径/classs.txt

之后会弹出labelImg的UI页面:将数据格式设置为YOLO才能生成txt格式的标签,按W快速选择目标区域,按A/D为上一张/下一张。

标记完所有图片后会得到如图所示的文件结构:

至此,样本数据就准备完毕。

4、正式训练模型

在YOLOv5项目的./models文件夹下选择一个需要训练的模型,这里我们选择yolov5s.yaml,最小的一个模型进行训练,参考官方README中的table,了解不同模型的大小和推断速度。如果你选定了一个模型,那么需要修改模型对应的yaml文件

# parameters
nc: 3  # number of classes     <------------> 设置为自己数据集的类别个数
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

参考官方的数据集格式,需要通过一个yaml文件指定数据集的来源。故而新建一个data.yaml文件放在data文件下,容如下:

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: /root/yolov51/mydata/images/  # 训练数据集
val: /root/yolov51/mydata/images/  # 测试数据集
# number of classes
nc: 3
# class names
names: [ 'Pointer-instrument','Digital-display-instrument','Indicator-light' ]

做好以上准备工作后,就可以开始训练,YOLOv5的训练文件为:train.py。在阅读源码后,发现至少需要指定如下参数才能正常训练:

# Train yolov5x on score for 300 epochs
python train.py --img-size 640  --epochs 300 --data ./data/mydata.yaml --cfg ./models/yolov5s.yaml --weights ./yolov5s.pt
  • --img-size:输入图片的大小
  • --epochs:训练步长
  • --data:数据集配置文件
  • --cfg:模型配置文件
  • --weights:权重配置文件

开始训练后会出现如下结果,则表示训练正常:

训练之后生成的结果会通过tensorboard在浏览器中打开,权重文件会保存在./runs/train/expN/weights/中,里面会有best.pt和last.pt两个文件。

可以看到随训练生成的分析统计:

比如,三类仪表的个数和在图片中的位置统计如下:

最后:对于验证数据集测试效果如下:

5、检测仪表位置

YOLOv5中提供了detect.py脚本,可以检测单张图片,多张图片,以及视频。

单张图片测试命令:

python detect.py --source inference/image0.jpg --weights ./runs/train/expN/weights/best.pt 

预测结构会保存在./runs/detect/中

这里以一段视频为例:

python detect.py --source /YourMP4dir/test.mp4 --weights ./runs/train/expN/weights/best.pt 

结果如下:
#或者:<video width:60% height:auto controls>

#或者:<video width:60% height:auto controls>

YOLOv8是一种目标检测算法,而COCO是一个常用的目标检测数据集。YOLOv8预训练权重文件集合包括YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l和YOLOv8x。这些预训练权重是在COCO数据集上训练得到的,用于检测、分割和姿态估计任务。所以,yolov8 coco指的是使用COCO数据集进行训练的YOLOv8模型。由于YOLOv8仅支持YOLO格式的标签,而COCO的默认标签为JSON格式,所以在使用YOLOv8模型进行目标检测时,需要先将COCO格式的标签转换为YOLO格式的标签。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【v8初体验】利用yolov8训练COCO数据集或自定义数据集](https://blog.csdn.net/qq_44992785/article/details/129724862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [YOLOv8预训练权重文件集合(YOLOv8n,YOLOv8s,YOLOv8m,YOLOv8l,YOLOv8x)](https://download.csdn.net/download/crasher123/87941630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值