Yolov5训练日记~如何用Yolov5训练识别自己想要的模型~
目录
一.数据集准备
二.标签设置
三.模型训练
四.模型测试
最近尝试了Yolov5训练识别人体,用的是自己尝试做的训练集。见识到Yolo的强大后,决定分享给大家。
一.数据集准备
数据集是从百度图片上下载的,我当然不可能一个一个下载,会累死的。。。
既然会python,就做最好的爬虫~
from fake_useragent import UserAgent
import requests
import re
import uuid
#参考:
#https://blog.csdn.net/weixin_56198196/article/details/120470874
#https://blog.csdn.net/weixin_52971139/article/details/125065788headers={ #遇到Forbid spider access就在请求头多加一些东西,试了一下'Accept-Encoding'是关键# 'Accept': 'text/plain, */*; q=0.01',# 'Accept-Encoding': 'gzip, deflate, br',# 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',# 'Connection': 'keep-alive','Cookie': 'BDqhfp=%E5%8F%B2%E5%8A%AA%E6%AF%94%26%260-10-1undefined%26%263746%26%264; BIDUPSID=5A04241009FD166564DACF4050551F2D; PSTM=1611376447; __yjs_duid=1_2de46e288096c13a7edea3d05a5204421620544039468; BAIDUID=F163DBC1DF098AF604AE753E72659BAA:FG=1; BDUSS=Tczc3RnamRhaUhicm5rfm83V3pkMTBySUd1Z0V4Q25mbXhYdElRemJHdVktVnRoRVFBQUFBJCQAAAAAAQAAAAEAAACR090iR3JpZmZleTUxMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJhsNGGYbDRhN; BDUSS_BFESS=Tczc3RnamRhaUhicm5rfm83V3pkMTBySUd1Z0V4Q25mbXhYdElRemJHdVktVnRoRVFBQUFBJCQAAAAAAQAAAAEAAACR090iR3JpZmZleTUxMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJhsNGGYbDRhN; BAIDUID_BFESS=F163DBC1DF098AF604AE753E72659BAA:FG=1; BDORZ=AE84CDB3A529C0F8A2B9DCDD1D18B695; userFrom=cn.bing.com; IMG_WH=573_756; H_WISE_SIDS=110085_178384_179349_181588_182531_183327_183611_183750_184578_185029_185517_185653_185750_186317_186411_187020_187195_187206_187292_187450_187663_187670_187928_8000097_8000100_8000126_8000140_8000150_8000169_8000177_8000185; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; firstShowTip=1; cleanHistoryStatus=0; indexPageSugList=%5B%22%E5%8F%B2%E5%8A%AA%E6%AF%94%22%2C%22%E6%B5%B7%E8%B4%BC%E7%8E%8B%22%2C%22%E8%8A%B1%E6%9C%B5%22%2C%22undertale%22%2C%22python%22%2C%22%E8%8A%B1%E7%AE%80%E7%AC%94%E7%94%BB%22%2C%22%E5%90%8C%E5%9E%8B%E4%B8%96%E4%BB%A3%E4%BA%A4%E6%9B%BF%22%2C%22%E6%A8%9F%E7%A7%91%E8%8A%B1%22%2C%22%E6%A8%9F%E7%A7%91%E8%8A%B1%E7%9A%84%E8%A7%A3%E5%89%96%22%5D; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; ab_sr=1.0.1_MTY1OTI2YjEyMzViNzQyYWVhZjdhZWQxNzc0YjE1NzA2NGEyZmMwZGEwNzRmMWVjZGM3N2IzMDlkYjViZWVlOGYyNTllZDMzZjgwZGMxZWZhOWFiMmEyYjg0NjgyYzgwYjk0Y2QxYWVmM2E1ZTFiZjkyYTNlOGYzMDg1MWVjNjUyODViYzMyZjc2Mjk2OGFmZmZjZTkwNjg3OWI4NjhjZjdiNzJmNTY3NTIyZjg2ODVjMzUzNTExYjhiMjkxZjEx; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm','Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%8F%B2%E5%8A%AA%E6%AF%94&oq=%E5%8F%B2%E5%8A%AA%E6%AF%94&rsp=-1','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36 Edg/93.0.961.52'
}img_re = re.compile('"thumbURL":"(.*?)"')
img_format = re.compile("f=(.*).*?w")def file_op(img):uuid_str = uuid.uuid4().hextmp_file_name = './arsenal/%s.jpg' % uuid_strwith open(file=tmp_file_name, mode="wb") as file:file.write(img)def xhr_url(url_xhr, start_num=0, page=5):end_num = page*30for page_num in range(start_num, end_num, 30):resp = requests.get(url=url_xhr+str(page_num), headers=headers)if resp.status_code == 200:print(resp.text)img_url_list = img_re.findall(resp.text) # 这是个列表形式for img_url in img_url_list:img_rsp = requests.get(url=img_url, headers=headers)file_op(img=img_rsp.content)else:breakprint("爬取了"+str(page_num)+"张")print("内容已经全部爬取")if __name__ == "__main__":org_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&word={text}&pn=".format(text=input("输入你想检索内容:"))xhr_url(url_xhr=org_url, start_num=int(input("开始页:")), page=int(input("所需爬取页数:")))
用这样的代码就可以把指定关键词的照片爬取下来,如下图所示是爬取下来的照片。爬取代码位于newdata目录下。
(图源网络侵删)
在上图中,爬取的数据关键词为“路人照片”。
二.标签设置
标签有很多可以打的工具,我采用的是vott,图片和安装包链接如下。
链接:https://pan.baidu.com/s/1CtAiR6ub072WvgfoFkm6Ig?pwd=0kqu
提取码:0kqu
--来自百度网盘超级会员V5的分享
具体使用方法参考:标注工具 VoTT 详细教程_vott使用_清欢守护者的博客-CSDN博客
如果要识别人,就把人的区域都框起来~
最后输出的标签如下:
json内的标签数据
标签数据需要经过如下代码处理成yolov5的可识别数据
import os
import json
import shutil
img_folder_path = "img/"
# 使用os.listdir()函数获取文件夹下的所有文件名
img_file_names = os.listdir(img_folder_path)
lab_folder_path = "label/"
# 使用os.listdir()函数获取文件夹下的所有文件名
lab_file_names = os.listdir(lab_folder_path)
# 打印所有文件名
'''for file_name in img_file_names:print(file_name)'''
# 打印所有文件名
data_num=0
outdir_img="outdata/images/"
outdir_lab="outdata/labels/"
for file_name in lab_file_names:with open(lab_folder_path+file_name,'r',encoding = 'utf-8') as fp:# read()方法将fp(一个支持.read()的文件类对象,包含一个JSON文档)转换成字符串data = json.loads(fp.read())#print(fp.read())for img_file_name in img_file_names:if img_file_name[-4:]==".jpg":if img_file_name[-18:]==data['asset']['name'][-18:]:name="im"+str(data_num)data_num+=1shutil.copy(img_folder_path+img_file_name,outdir_img+name+".jpg")for item in data['regions']:data1=str((item['points'][0]['x']+item['points'][1]['x'])/(2*data['asset']['size']['width']))data2=str((item['points'][0]['y']+item['points'][2]['y'])/(2*data['asset']['size']['height']))data3=str(item['boundingBox']['width']/data['asset']['size']['width'])data4=str(item['boundingBox']['height']/data['asset']['size']['height'])Note=open(outdir_lab+name+".txt",mode='a')Note.write("0 "+data1+" "+data2+" "+data3+" "+data4+"\n")Note.close()
(代码仅供参考,具体以实际情况为准)
上述代码的目录架构:
img
-xx.jpg
-xx.jpg
...
label
-xx.json
-xx.json
...outdata
-images
-labels
运行后在outdata文件夹会生成转换格式成功的图像和标签
其中,标签的格式如下:
参考yolov5的数据格式:
Train Custom Data - Ultralytics YOLOv8 Docs
三.模型训练
准备好数据集,就可以训练啦~
GitHub - ultralytics/yolov5: YOLOv5
Yolov5训练日记~如何用Yolov5训练识别自己想要的模型~相关推荐
- NLP命名实体识别NER数据准备及模型训练实例
NLP命名实体识别NER数据准备及模型训练实例 目录 NLP命名实体识别NER数据准备及模型训练实例 方案一
- 深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码)
深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码) 目录 深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码) 1. 前言 2. 车辆检测数据集说明 (1)车 ...
- Yolov5如何在训练意外中断后接续训练
Yolov5如何在训练意外中断后接续训练 1.配置环境 2.问题描述 3.解决方法 3.1设置需要接续训练的结果 3.2设置训练代码 4.原理 5.结束语 1.配置环境 操作系统:Ubuntu20.0 ...
- yolov5 从配置环境到自己训练数据集合
yolov5 (Macre) 目录 文章目录 yolov5 (Macre) 一.yolov5介绍 1 四种网络模型 2 yolov5 输入结构 2.1 **Mosaic数据增强** 2.2 **自适应 ...
- YOLOv5实战之输电线路绝缘子缺陷检测识别
在前面的文章中已经详细介绍了在本机上安装YOLOv5的教程,安装YOLOv5可参考前面的文章YOLOv5训练自己的数据集(超详细)https://blog.csdn.net/qq_40716944/a ...
- 融合CBAM注意力机制基于YOLOv5开发构建毛尖茶叶嫩芽检测识别系统
首先看下整体效果: 要进行茶叶嫩芽的检测和识别,可以使用计算机视觉和深度学习技术来实现.下面是一种基本的流程: 数据收集:收集包含毛尖.嫩芽以及其他类型茶叶图像的数据集.确保数据集中包含不同角度.光照 ...
- 程序员的训练日记:编程也是一项耐力活动
全文共1809字,预计学习时长6分钟 图源:unsplash 笔者曾经是一名长跑运动员,当开始编程之后,我发现二者有许多相似之处.于是,我将自己运动员时期的一些训练习惯应用到了当前的"耐力活 ...
- HALCON示例程序color_pieces.hdev通过MLP训练器对彩色棋子进行分类识别
HALCON示例程序color_pieces.hdev通过MLP训练器对彩色棋子进行分类识别:分别在彩色图像下与灰度图像下进行,从而产生对比. 示例程序源码(加注释) 关于显示类函数解释 dev_up ...
- 如何用PyTorch训练图像分类器
本文为 AI 研习社编译的技术博客,原标题 : How to Train an Image Classifier in PyTorch and use it to Perform Basic Infe ...
最新文章
- 利用被入侵的路由器迈入内网——抓包,利用路由器漏洞入侵,进行流量劫持...
- ROS学习笔记九:ROS工具
- mysql二进制日志内容说明_MySQL二进制日志相关问题详细说明
- android 访问权限,Android 使用情况访问权限
- 防抖函数和节流函数的实现,这个是在某保险公司笔试题遇到的。
- 计算机网络(四)网络层
- kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇
- imkey只支持imtoken吗_辛巴表态我只认天道 不认散打!等天道回来我还他1000万关注!散打哥喊话辛巴 不要说只认道不认散打哥!...
- CSDN很火的汤小洋老师全部课程总共有哪些(问号问号问号)
- Unity网格编程篇(三) 温度图、热力图
- 宝塔面板配置服务器代理
- ABAP 语法备忘 刘欣
- ERROR: Error while obtaining start requests
- 8Manage:大宗商品采购,专注构建企业采购信息化!
- DeFi:过去、现在和未来
- 分享一个自己写的可视化编程工具
- 利用定时器实现PWM波对Zigbee(CC2530)上LED亮度进行强弱调整
- 圆满收官!第六届99趣拿节精彩盘点!
- 读 L. S. Stavrianos 之 《全球通史:从史前到21世纪》
- 秦智杂志秦智杂志社秦智编辑部2022年第12期目录
热门文章
- 学习-Java字符串之字符串、字符数组与字节数组间的使用之单词重新排序
- java故事之以月引序
- php 网页内容下载,如何使用PHP下载网页
- 面试官问你期待工资多少时,该怎么回答?
- mpvue 微信小程序api_mpVue 小程序框架 SDK
- 【Node】Error: ENOENT: no such file or directory,解决方案
- chrome 报错connection is not private. NET::ERR_CERT_COMMON_NAME_INVALID Provisional headers warning
- GEE|时间序列分析(二)
- 与Xcode比照Adobe AIR开发iOS的优势和局限
- 2246xt u盘开卡详细教程_联想y700-15笔记本如何使用bios设置u盘启动【详细步骤】...