一、环境准备二、yolov5代码简单介绍
1、yolov5代码中train.py2、yolov5代码中detect.py3、yolov5代码待准备的数据集文件格式 三、一个极小的测试识别案例四、公开的数据集【口罩】训练并识别案例五、自己标注数据集【点选】训练并识别案例
1、利用labelimg标注数据集生成yolo格式2、数据集格式标准化3、训练与测试识别
一、环境准备
yolov5是主要的作用:给定一个已经标好的数据集》跑yolov5代码得到一个目标检测模型》选择一个图片或者视频等再给yolov5代码,yolov5代码就能自动识别区分出目标体
推荐该博主的视频脚本手把手装环境到训练识别,或者直接看该博主的博客有教程
本机配置: Win11,Anaconda(python3.7),GTX3050,cuda11.1,pytorch1.8, yolov5,建议先查自己电脑上cuda版本信息:打开cmd窗口输入nvidia-smi查看,或者通过NVIDIA控制面板查看
pytorch环境准备:首先电脑上已有anconda,然后打开cmd执行命令如下(与我上面的配置对应的),比如搜索# CUDA 11.1打开cuda 各个版本对应安装命令搜索,如果遇到问题可以看这篇文章有稍详细的安装步骤
conda create --p=D:ProgrammerCaptcha_env python=3.7 activate D:ProgrammerCaptcha_env conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
下载yolov5,下载压缩包地址 ,然后解压即可
yolov5相关python依赖包安装:在yolov5-master当前目录下打开cmd窗口,然后进入之前建的虚拟环境如activate D:ProgrammerCaptcha_env,然后安装依赖pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
activate D:ProgrammerCaptcha_env pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn二、yolov5代码简单介绍
更详细的整个介绍看这里 ,或者这篇文章推荐看2个半小时视频保姆介绍代码参数含义 1、yolov5代码中train.py
在yolov5代码中,我们训练主要运行train.py文件,测试主要运行detect.py文件;所以其实只要准备个数据集,再改改这两个文件的如图的主配置比如改要训练或者测试的是哪个数据集路径,图片大小等,然后就走完流程了。
yolov5代码train.py的重要参数介绍:
train.py的参数weights简单介绍:指定权重模型,如:yolov5s.pt / yolov5m / yolov5l/ yolov5x(可以理解为s小码,m中码,l大码,xl大大码,对应的检测速度分别都是从快到慢,但是精确度分别是从低到高)
2、yolov5代码中detect.py
yolov5代码detect.py的重要参数介绍:
3、yolov5代码待准备的数据集文件格式
yolov5待训练的数据集自定义准备格式一般如下:分三部分训练集+验证集+.yaml配置 ,其中images文件夹下都是已标记的图片,labels都是yolo格式的.txt文件,images与labels里是一一对应的,只是后缀名不一样
yolo格式的标签为txt格式的文件:文件名跟对应的图片名一样,除了后缀改为了.txt
每个目标一行,整个图片没有目标的话不需要有txt文件,或者空文件
`每行的格式为5个参数:class_num(分类索引,比如0代表戴口罩,1代表没带口罩),后4列是x_center/image_width、y_center/image_height、width/image_width、height/image_height,取值范围是0 ~ 1
其中class_num取值为0至total_class - 1,如下图四个值x_center相对于图片坐标轴是0.48,y_center相对于图片坐标轴是0.63,width图片的宽度是0.69, height图片的高度是0.71;之所以图片数值进行归一化,是因为训练的图片尺寸有很多种,这样通过归一化就可以统一了
三、一个极小的测试识别案例
用官网已有的模型测试yolov5是否正常运行:打开pychram直接运行detect.py文件(detect.py文件:用已经预训练过的模型进行预测识别测试,如yolov5s.pt模型)运行过程中它会自动下载一个yolov5s.pt模型,如果下载不下来,可以直接到这个连接进行权重模型下载,和train.py在同一个目录下;然后自动识别data/images目录下的两张图片,然后会自动生成一个新的文件夹runs>detect>exp用来存识别出的结果。
如下在runs>detect>exp文件夹下识别结果,已经自动识别出了目标是bus还是person,并进行了标注
四、公开的数据集【口罩】训练并识别案例
公开的数据集roboflow网,这里面有很多数据集,我这里下载了口罩的数据集,图片大概149张;其他公开数据集DataCastle网,极市网,其他等
首先我们下载口罩数据集一个已标注好的数据集解压后存放到我新建的一个文件夹下MaskWearing,该文件夹的目录
MaskWearing数据集介绍:主要有3个:训练图片的数据集,验证图片的数据集,以及data.yaml配置。其中images文件夹就是放图片的,labels文件夹下放的是yolo格式的.txt标签文件,images文件夹与labels文件夹的内容是一一对应的,文件名都是一样的,后缀不一样。data.yaml则是配置文件下面详细介绍
更改yaml文件配置:如图data.yaml修正数据集存放路径,其中train指的是待训练的图片文件路径,而val指的是待验证的图片路径,而nc代表2个分类,names代表对应两个分类的名称;基于yolov5s.pt训练的就修改yolov5s.yaml里的nc分类,根据data.yaml的nc分类数量进行修改
修改train.py参数然后开始训练:训主要修改以下几个参数,运行练完会自动生成runs>train>exp>weights文件夹,其中文件夹下会生成一个best.pt权重模型
weights:选择模型权重,如:yolov5s.pt / yolov5m / yolov5l(可以理解为s小码,m中码,l大码,对应的检测速度分别都是从快到慢,但是精确度分别是从低到高)cfg:指定模型配置文件位置如models/yolov5s.yamldata:指定自己的数据集配置文件位置如./MaskWearing/data.yamlepochs: 指定训练轮数,默认初始设置为300,如本次口罩的数据集149张图片,我开始设置的3训练出来的模型效果不好,测试并没有正确框出口罩,设置成10后就正常识别目标了,所以根据实际情况进行调整batchsize: 根据GPU的显存大小进行设置,一般为2的倍数,我这里设置4img-size:图片分辨率缩小或者放大的尺寸,默认640,根据世界调整
如果报错OSError: [WinError 1455] 页面文件太小,无法完成操作。,则看这篇文章解决 ,直接搜索查看高级系统设置,然后按图片中处理,保存后重启电脑就正常了;如果这个设置了还是报错以及没有解决问题的话,先把它恢复成之前自动管理所有驱动器的默认状态,保存应用后,再次重新打开再按图片操作一次。
修改detect.py参数然后开始测试识别,训练完后会自动生成runs>detect>exp文件夹,该文件夹下有识别的结果,至此训练到测试识别的小demo已完成
weight:指定前面训练好的权重模型文件位置source:指定检测识别的单个图片,或者图片文件夹路径,或者视频路径,或者摄像头
labelimg是一款数据标注工具,可以标注如下三种格式:① VOC标签格式,保存为xml文件,② yolo标签格式,保存为txt文件,③ createML标签格式,保存为json格式;本次标注选择yolob标签格式labelimg的安装:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
activate D:ProgrammerCaptcha_env pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple新建2个文件夹:一个是存放图片的images,一个是存放标签的labels,cmd继续输入labelimg即可进入标注首页
activate D:ProgrammerCaptcha_env labelimg按如下图片进行设置,记得一定要先选择yolo格式,然后再开始标注
注意点:无论是代标注的图片,还是路径,还是标签名称,尽量都不要写中文,否则会有意想不到的错误,比如可能一直运行不起来并报错OSError: [WinError 1455] 页面文件太小,甚至pycharm闪退等如图将准备的图片进行标注,按w键就可以开始标注,然后自定义标签分类,也可以设置在右侧设置默认分类,保存好后在你保存标签的文件夹会自动生成yolo格式的.txt文件 ,其中有个总的classes.txt这个会按标注出现的顺序统计你所有的类别名称;然后就标注完成
2、数据集格式标准化
首先新建一个空的文件夹,里面新建make_file.py如下,运行后会自动生成一些必要的文件夹路径如images,labels, .yaml;然后把已标注好的图片和标签分别复制放到相应的文件夹就行;.yaml文件配置根据你的具体情况设置
import os
def make_data_dir_yaml(yaml_name, data_dir_name, nums, class_names):
# 生成数据集必要图片和标签文件夹
for dirs in ['train/images', 'train/labels', 'valid/images', 'valid/labels']:
try:
os.makedirs(dirs)
except FileExistsError:
print(f'{dirs} 目录已存在')
# 生成数据集配置.yaml
with open(yaml_name, "w", encoding='utf-8') as f:
f.write(f"train: ./{data_dir_name}/train/imagesn")
f.write(f"val: ./{data_dir_name}/valid/imagesn")
f.write("n")
f.write(f"nc: {nums}n")
f.write(f"names: {class_names}n")
make_data_dir_yaml('test.yaml', 'ClickData', 3, ['dog', 'cat', 'pig'])
3、训练与测试识别
train.py训练改如下几个地方,着重看下--data,路径就是改成你自己数据集的.yaml文件,其他几个配置看实际情况调整,具体参数含义介绍看前面目录二有;然后运行train.py就开始训练了
训练完后结果会自动生成到runs/train/exp文件夹下,视频的7分钟~10分钟处会介绍训练结果生成的文件夹下runs/train/exp各个文件的含义
detect.py识别待测试的图片,如下改几个配置,着重看下--weights 和--source这两个配置,一个选择训练好的权重模型,一个选择待测试的图片,然后运行,最终会在yolov5-master/runs/detect/exp路径下会自动生成测试结果
val.py:单独对权重文件进行验证,显示图片耗时以及识别的精度这里0.187比较低
至此整个流程差不多就结束了,还可以继续优化比如识别结果输出坐标等



