实战博客指引:

  1. 实战环境搭建
  2. 自定义数据集
  3. 模型训练
  4. 模型测试与评估
  5. YOLOv5整合PyQt5

项目源代码可联系博主获取。

一、数据准备

1.1 从官网下载YOLOv5

打开官网YOLOv5,使用git或者直接下载压缩包

  • git下载
git clone git@github.com:ultralytics/yolov5.git

or

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

  • 直接下载zip压缩包

二、自定义数据集

2.1 创建目录

在yolov5目录下创建文件夹VOCdata,创建图片路径以及标注路径,注意每个标注都对应一个图片名称,并区分训练集与验证集。目录如下:

VOCdata--images--train--val--labels--train--val

2.2 数据预览

下载数据集后,数据集格式如下:

一共有6列,简要解释一下每列的意义:

  • 第1列:图片名称以及图片格式
  • 第2-5列:图片标注的坐标,以像素为坐标,左上角为原点坐标。
  • 第6列:该标注的分类类别。

2.3 数据格式转换

2.3.1 图像格式转换

首先将ppm格式转换为jpg格式,在VOCdata/下目录下创建py文件ppm_to_jpg.py:

def ppm_to_jpg(img_out_path, ppm_path):ppm_list = os.listdir(ppm_path)for ppm in ppm_list:if ppm.endswith(".ppm"):path = ppm_path + ppmimg = Image.open(path)new_path = img_out_path + ppm.split(".ppm")[0] + ".jpg"img.save(new_path)print("transfer finish!")

首先指定ppm图片的输入路径以及输出路径,并创建文件夹,用于保存训练集和测试集。注意测试机保存在yolov5/data/images/test/目录下,用于后面进行数据集的测试。

2.3.2 标注格式转换

在YOLOv5中,标注坐标有要求格式,因此需要进行转换。官方的原文如下:

然后准备labels,将xml文件转换成yolo需要的txt格式。
After using a tool like CVAT, makesense.ai or Labelbox to label your images, export your labels to YOLO format, with one *.txt file per image (if no objects in image, no *.txt file is required). The *.txt file specifications are:- One row per object
- Each row is class x_center y_center width height format.
- Box coordinates must be in normalized xywh format (from 0 - 1). If your boxes are in pixels, divide x_center and width by image width, and y_center and height by image height.
- Class numbers are zero-indexed (start from 0).


The label file corresponding to the above image contains 2 persons (class 0) and a tie (class 27):

接下来进行标注转换。新建py文件split_labels.py,用于将标注文件进行格式转换并划分数据集。这里采用训练集:验证集=9:1,在后续中的图片划分中将按照该labels文件夹划分图像数据集。

def gt2yolo():i = 0file_name = ''for line in open(input_path, "r"):  # 设置文件对象words = line.split(';')img_name = words[0].split(".")[0]label = int(words[-1])x = float(words[1]) / orign_ww = float(words[3]) / orign_w - xy = float(words[2]) / orign_hh = float(words[4]) / orign_h - y# 保存路径。并设置是保存为训练集还是验证集if output_path + img_name + ".txt" != file_name:if i < int(nums * 0.9):file_name = output_path + 'train/' + img_name + ".txt"else:file_name = output_path + 'val/' + img_name + ".txt"fw = open(file_name, 'w')else:fw = open(file_name, 'a')# print(file_name)# 写入文件中fw.write(str(label) + " " + str(x) + " " + str(y) + " " + str(w) + " " + str(h) + "\n")fw.close()i += 1

再看一遍标注文件的格式:

因此基本思路为按照";"划分数据,并将中间四个像素坐标归一化到[0,1]区间上。详细过程在代码中写的很详细,注意要修改自己的输入输出路径以及图片的大小。
划分完成后,将得到如下的目录结构:

2.3.3 划分图片

划分好标注数据集后,将按照该数据集划分图像数据。基本思路为遍历训练集和验证集,获取对应标注的文件名称,然后找到相应的文件名称后将图片移动至对应的训练集或验证集中。详细注释见代码,注意修改路径。
创建split_train_val.py:

def train_val_img_list(img_labels, mode):# 获取标注路径下的图片名称img_list = os.listdir(os.path.join(img_labels, mode))# print(img_list)# 切片,只需要名称,不需要格式return [i[:-4] for i in img_list]def split_train_val():# 遍历训练集与验证集标注目录,获取图片名称for i in label_list:img_list = train_val_img_list(img_labels, i)# 指定输入位置与保存位置for img_name in img_list:# D:/download/Train_jpg/00000.jpgin_img_path = os.path.join(input_path, str(img_name)) + ".jpg"# D:/yolov5/VOCdata/images/train\00000.jpgout_img_path = os.path.join(out_path, i, str(img_name)) + '.jpg'shutil.copy(in_img_path, out_img_path)print("copy finish!!")

划分完成后,将得到如下目录结构:

浏览目录文件,确定训练集与验证集中的图片名称与标注目录中相对应:

2.4 创建配置文件

在yolov5的data目录下创建myvoc.yaml文件,用于指定训练集与验证集的路径。注意指定的训练集与验证集路径与前文保持一致。修改nc,及你需要分类的数量。在names里指定分类的名称。
其内容如下:

注意nc的值要和names的个数相同,yaml文件的冒号后面需要添加一个空格!!!train,val,nc,names的冒号后面都有一个空格,别忘了。

参考文章

  • 1.https://blog.csdn.net/qq_36756866/article/details/109111065
  • 2.https://blog.csdn.net/qq_45945548/article/details/121701492

【YOLOv5实战2】基于YOLOv5的交通标志识别系统-自定义数据集相关推荐

  1. 基于YOLOv5和Python开发的中国交通标志识别系统

    基于YOLOv5和Python开发的中国交通标志识别系统,可识别45种交通标志,识别率高 YID:95120644426759544cmfighting233

  2. 毕业设计-基于机器视觉的交通标志识别系统

    目录 前言 课题背景和意义 实现技术思路 一.交通标志识别系统 二.交通标志识别整体方案 三.实验分析 四.总结 实现效果图样例 最后 前言

  3. Python基于YOLOv5的交通标志识别系统[源码]

    1.图片演示: 2.视频演示: [项目分享]Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]_哔哩哔哩_bilibili 3.标注好的数据集: ...

  4. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  5. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  6. matlab 王家文,基于matlab的交通标志自动识别系统

    内容介绍 原文档由会员 猛龙 发布 基于matlab的交通标志自动识别系统 页数 57 字数 19979 摘要 机器视觉也称图像分析与理解.机器视觉的发展推动智能系统的发展,也拓宽计算机与各种智能机器 ...

  7. matlab交通标志神经网络识别,基于神经网络的交通标志识别方法

    Municipal & Traffic Construction SCIENCE & TECHNOLOGY FOR DEVELOPMENT 149 基于神经网络的交通标志识别方法 赵丹 ...

  8. 【交通标志识别】基于matlab GUI BP神经网络交通标志识别系统(含语音报警)【含Matlab源码 2240期】

    ⛄一.BP神经网络交通标志识别简介 道路交通标志用以禁止.警告.指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复 ...

  9. 交通标志识别系统-tensorflow项目

    介绍 交通标志识别系统,可作为计算机类专业毕设项目.机器学习,人工智能,深度学习,模式识别项目.基于tensorflow,采用 Inception-ResNet-v2模型实现对58个类别的接近6K张交 ...

最新文章

  1. D - Bear and Finding Criminals
  2. Django REST framework (DRF) 不能用property或method排序
  3. 在linux系统下使用C语言操作临时文件
  4. purge table table_name的一点测试!
  5. 【杭州(含嘉兴,绍兴,金华,湖州,义乌)】Uber优步司机奖励政策(2月1日~2月7日)...
  6. 【struts2】struts2拦截器
  7. 生产系统遇到的问题:producers blocked
  8. No Identifier specified for entity的解决办法
  9. linux 命令 kps,Linux顶级命令.内存使用情况
  10. 转:大规模网站架构技术原理透析
  11. mysql bin 分析_mysql bin log 分析
  12. FaceBook ATC 弱网测试工具环境搭建
  13. Java算法——地图单点坐标判断是否存在于某个区域
  14. java多线程并发测试工具_java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore
  15. [BIM]BIM中IFD介绍
  16. 教你2种常用的电商高并发处理解决方案
  17. Need assistance with accessing your developer account
  18. 华为鸿蒙官网商城,再见安卓!鸿蒙版京东App上架华为商城:正式版最快6月见...
  19. python进行 t 检验
  20. 发布一个久违的“泡泡堂”单机v2版

热门文章

  1. ZOJ1005 Jugs
  2. 单片机拟真电路图软件_单片机电流检测电路图大全(四款模拟电路设计原理图详解)...
  3. matlab多项式的求值,多项式求值的MATLAB实现
  4. 联客云虚拟工作手机(云手机)应用行业及场景
  5. 腾讯云服务器和阿里云服务器新客选谁
  6. 惊闻“漫游成本只有一分钱”
  7. QT C2220: 警告被视为错误 - 没有生成“object”文件
  8. 父爱,是一首深沉的诗。
  9. 前端使用vux中md5加密方法
  10. Web课程设计-仿当当网-增删改查-java+jsp+mysql-期末大作业