如何制作数据集并基于yolov5训练成模型并部署

简介: 这篇文章介绍了如何为YOLOv5制作数据集、训练模型、进行模型部署的整个流程,包括搜集和标注图片、创建数据集文件夹结构、编写配置文件、训练和评估模型,以及将训练好的模型部署到不同平台如ROS机器人、微信小程序和移动应用等。

如何制作数据集并基于yolov5训练成模型

一个正常的视觉AI开发步骤如下:收集和组织图像、标记您感兴趣的对象、训练模型、将其部署到云端/当做一个端口

文章目录

  • 如何制作数据集并基于yolov5训练成模型
    • 一、搜集图片
      • 1、下载已有的数据集
      • 2、使用自己拍摄的图片
      • 3、在网站上使用爬虫爬取图片
    • 二、标注图片
      • 1、在线标注网站MAKE SENSE的介绍
      • 2、创建标签
      • 3、使用MAKE SENSE网站标注并导出
    • 三、制作数据集
      • 1、创建mydata文件夹
      • 2、将之前的图片以及标注数据放入mydata文件夹
      • 3、新建一个mydata.yaml文件,
    • 四、基于数据集训练模型
      • 1、修改train.py中data参数
      • 2、开始根据制作好的数据集训练模型
      • 3、模型训练结束
    • 五、部署模型
      • 1、保存刚刚训练的模型的相对地址
      • 2、在detect.py中调用模型
      • 3、检测正常运行结果如下
    • 六、将yolov5部署在云端或做为一个端口被其他程序调用
      • 1、基于ros机器人的物体检测
      • 2、部署到微信小程序
      • 3、部署到安卓/苹果上的APP上

一、搜集图片

1、下载已有的数据集

如果出于学习,或者应用范围比较广泛,对鲁棒性要求较高,可以使用一些
公开的数据集请添加图片描述
知乎地址:https://zhuanlan.zhihu.com/p/25138563
当然这只是公开数据集的一部分,大家可以继续检索到。

其他搜集的找数据集的网站
1.datafountain
https://www.datafountain.cn/datasets
2.聚数力
http://dataju.cn/Dataju/web/searchDataset
3.中文NLP数据集搜索
https://www.cluebenchmarks.com/dataSet\_search.html
4.阿里云天池
https://tianchi.aliyun.com/dataset/?spm=5176.12282016.J\_9711814210.24.2c656d92n0Us6s
5.谷歌数据集好像要翻墙

2、使用自己拍摄的图片

将拍摄的目标图片全部保存在电脑上

3、在网站上使用爬虫爬取图片

下面是使用爬虫下载图片的代码

import os
import sys
import time
import urllib
import requests
import re
from bs4 import BeautifulSoup
import time

header = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'
}
url = "https://cn.bing.com/images/async?q={0}&first={1}&count={2}&scenario=ImageBasicHover&datsrc=N_I&layout=ColumnBased&mmasync=1&dgState=c*9_y*2226s2180s2072s2043s2292s2295s2079s2203s2094_i*71_w*198&IG=0D6AD6CBAF43430EA716510A4754C951&SFX={3}&iid=images.5599"


def getImage(url, count):
    '''从原图url中将原图保存到本地'''
    try:
        time.sleep(0.5)
        urllib.request.urlretrieve(url, './imgs/hat' + str(count + 1) + '.jpg')
    except Exception as e:
        time.sleep(1)
        print("本张图片获取异常,跳过...")
    else:
        print("图片+1,成功保存 " + str(count + 1) + " 张图")


def findImgUrlFromHtml(html, rule, url, key, first, loadNum, sfx, count):
    '''从缩略图列表页中找到原图的url,并返回这一页的图片数量'''
    soup = BeautifulSoup(html, "lxml")
    link_list = soup.find_all("a", class_="iusc")
    url = []
    for link in link_list:
        result = re.search(rule, str(link))
        #将字符串"amp;"删除
        url = result.group(0)
        #组装完整url
        url = url[8:len(url)]
        #打开高清图片网址
        getImage(url, count)
        count += 1
    #完成一页,继续加载下一页
    return count


def getStartHtml(url, key, first, loadNum, sfx):
    '''获取缩略图列表页'''
    page = urllib.request.Request(url.format(key, first, loadNum, sfx),
                                  headers=header)
    html = urllib.request.urlopen(page)
    return html


if __name__ == '__main__':
    name = "戴帽子"    #图片关键词
    path = './imgs/hat'   #图片保存路径
    countNum = 2000  #爬取数量
    key = urllib.parse.quote(name)
    first = 1
    loadNum = 35
    sfx = 1
    count = 0
    rule = re.compile(r"\"murl\"\:\"http\S[^\"]+")
    if not os.path.exists(path):
        os.makedirs(path)
    while count < countNum:
        html = getStartHtml(url, key, first, loadNum, sfx)
        count = findImgUrlFromHtml(html, rule, url, key, first, loadNum, sfx,
                                   count)
        first = count + 1
        sfx += 1

二、标注图片

1、在线标注网站MAKE SENSE的介绍

MAKE SENSE
make-sense 是一个被YOLOv5官方推荐使用的图像标注工具。

相比于其他工具,make-sense的上手难度非常低,仅需数分钟,玩家便能熟练掌握工作台中的功能选项,快速地进入工作状态;此外,由于make-sense是一款web应用,各个操作系统的玩家可打破次元壁实现工作协同。

2、创建标签

新建一个名为labels的文件,按照每行为一个标签的原则,依次输入
栗子如下:
在这里插入图片描述

3、使用MAKE SENSE网站标注并导出

打开网站
在这里插入图片描述
点击放入图片
在这里插入图片描述
全选搜集到的图片并确认
在这里插入图片描述
根据标注需求点击对应的,在这里我们点击物体检测
在这里插入图片描述
点击Load labels from file。表示从文件中批量导入标签
在这里插入图片描述

放入后点击Create labels list在这里插入图片描述
最后点击开始项目,就可以开始标注了

开始项目
依次标注每一个图片
在这里插入图片描述

导出标注结果在这里插入图片描述

选择导出格式,并导出

导出

导出压缩包参考如下:

到这里图片与标签就都准备好了,可以准备开始制作数据集

三、制作数据集

1、创建mydata文件夹

创建文件夹mydata
其内部构造如下

在这里插入图片描述

2、将之前的图片以及标注数据放入mydata文件夹

test与train集合一般比例为2:8或3:7
例子如下:
在这里插入图片描述

3、新建一个mydata.yaml文件,

在这里插入图片描述

四、基于数据集训练模型

1、修改train.py中data参数

在这里插入图片描述

2、开始根据制作好的数据集训练模型

在这里插入图片描述

3、模型训练结束

在这里插入图片描述

注:由上图可以看到这次训练的模型保存在runs/train/exp6

参数介绍

P Precision,精确率
对类A来说(下面提到的都是被预测成A的):
P = 正确数 / 预测总数
或 P = 正确数/ 正确数+错误数
即,预测的东西正确了多少百分比。

R Recall,召回率
对类A来说(下面提到的都是被归为A类的):
R = 预测正确数 / 真实A类总数。
或 R = 预测正确数 / 被预测到的A + 未被预测到的A
即,预测的东西找到了多少百分比。

mAP@0.5:mean Average Precision
即将IoU设为0.5时,计算每一类的所有图片的AP(可以理解为识别精度),然后所有类别求平均,即mAP

mAP@0.5:0.95:mean Average Precision
表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。

五、部署模型

1、保存刚刚训练的模型的相对地址

在这里插入图片描述

2、在detect.py中调用模型

在这里插入图片描述
注:由于我们的数据集很少很少只是用来做示范的,可能没检测出什么,这不是步骤问题,只是量太少而已。

3、检测正常运行结果如下

在这里插入图片描述

六、将yolov5部署在云端或做为一个端口被其他程序调用

1、基于ros机器人的物体检测

2、部署到微信小程序

3、部署到安卓/苹果上的APP上

注:这三部分,还在学习,在之后会补上开源源码以及代码解析。

相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
96 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
5月前
|
监控 计算机视觉 知识图谱
YOLOv10的改进、部署和微调训练总结
YOLOv10在实时目标检测中提升性能与效率,通过无NMS训练解决延迟问题,采用一致的双任务和效率-精度驱动的模型设计。YOLOv10-S比RT-DETR-R18快1.8倍,YOLOv10-B比YOLOv9-C延迟减少46%。新方法包括一致性双标签分配,优化计算冗余和增强模型能力。实验结果显示YOLOv10在AP和延迟上均有显著改善。文章还提供了部署和微调YOLOv10的示例代码。
673 2
|
6月前
|
IDE 数据处理 开发工具
垃圾分类模型训练部署教程,基于MaixHub和MaixPy-k210(1)
我的准备 Maix duino开发板一块(含摄像头配件) Type-c数据集一根
302 0
|
6月前
|
IDE 开发工具
垃圾分类模型训练部署教程,基于MaixHub和MaixPy-k210(3)
在开发板上运行模型 1、烧录模型文件到板子 使用kflash_gui工具,可以完成这个任务。
389 0
|
存储 机器学习/深度学习 算法
MMDetection3d对KITT数据集的训练与评估介绍
MMDetection3d对KITT数据集的训练与评估介绍
1965 0
MMDetection3d对KITT数据集的训练与评估介绍
|
Python
MMDetection系列 | 3. MMDetection自定义模型训练
MMDetection系列 | 3. MMDetection自定义模型训练
840 0
MMDetection系列 | 3. MMDetection自定义模型训练
|
1月前
|
数据可视化 计算机视觉
训练数据集(一):真实场景下采集的煤矸石目标检测数据集,可直接用于YOLOv5/v6/v7/v8训练
本文介绍了一个用于煤炭与矸石分类的煤矸石目标检测数据集,包含891张训练图片和404张验证图片,分为煤炭、矸石和混合物三类。数据集已标注并划分为训练和验证集,适用于YOLOv5/v6/v7/v8训练。数据集可通过提供的链接下载。
53 1
训练数据集(一):真实场景下采集的煤矸石目标检测数据集,可直接用于YOLOv5/v6/v7/v8训练
|
1月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
1294 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
328 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
162 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)