Yolov5训练日记~如何用Yolov5训练识别自己想要的模型~

news2024/9/21 22:45:39

目录

一.数据集准备

二.标签设置

 三.模型训练

 四.模型测试


        最近尝试了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/125065788

headers={                            #遇到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().hex
    tmp_file_name = './arsenal/%s.jpg' % uuid_str
    with 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*30
    for 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:
            break
        print("爬取了"+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+=1
                shutil.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 🚀 in PyTorch > ONNX > CoreML > TFLite

        下载好YOLOv5后按要求配置环境:

        下载COCO128数据集coco128 | Kaggle

         将下载好的dataset文件与yolov5文件夹按如下放置:

         将coco128.yaml的内容修改:

         改成如下:

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: python train.py --data coco128.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco128  ← downloads here (7 MB)


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
names:
  0: 0
  # 1: bicycle
  # 2: car
  # 3: motorcycle
  # 4: airplane
  # 5: bus
  # 6: train
  # 7: truck
  # 8: boat
  # 9: traffic light
  # 10: fire hydrant
  # 11: stop sign
  # 12: parking meter
  # 13: bench
  # 14: bird
  # 15: cat
  # 16: dog
  # 17: horse
  # 18: sheep
  # 19: cow
  # 20: elephant
  # 21: bear
  # 22: zebra
  # 23: giraffe
  # 24: backpack
  # 25: umbrella
  # 26: handbag
  # 27: tie
  # 28: suitcase
  # 29: frisbee
  # 30: skis
  # 31: snowboard
  # 32: sports ball
  # 33: kite
  # 34: baseball bat
  # 35: baseball glove
  # 36: skateboard
  # 37: surfboard
  # 38: tennis racket
  # 39: bottle
  # 40: wine glass
  # 41: cup
  # 42: fork
  # 43: knife
  # 44: spoon
  # 45: bowl
  # 46: banana
  # 47: apple
  # 48: sandwich
  # 49: orange
  # 50: broccoli
  # 51: carrot
  # 52: hot dog
  # 53: pizza
  # 54: donut
  # 55: cake
  # 56: chair
  # 57: couch
  # 58: potted plant
  # 59: bed
  # 60: dining table
  # 61: toilet
  # 62: tv
  # 63: laptop
  # 64: mouse
  # 65: remote
  # 66: keyboard
  # 67: cell phone
  # 68: microwave
  # 69: oven
  # 70: toaster
  # 71: sink
  # 72: refrigerator
  # 73: book
  # 74: clock
  # 75: vase
  # 76: scissors
  # 77: teddy bear
  # 78: hair drier
  # 79: toothbrush


# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip

         即将没有用到的种类注释掉。

        之后训练:

python train.py --img 640 --epochs 30 --data coco128.yaml --weights yolov5s.pt

         其中yolov5s.pt会自动下载,如果进度条没跑完就停止了,则把命令行中的下载网址复制到浏览器下载,并删除原本下载一半的数据。

         训练后在runs/train文件夹下寻找训练好的模型best.pt并替换yolov5s.pt

 四.模型测试

测试模型的命令行:

python detect.py --weights yolov5s.pt --source       0                               # webcam
                                                     img.jpg                         # image
                                                     vid.mp4                         # video
                                                     screen                          # screenshot
                                                     path/                           # directory
                                                     list.txt                        # list of images
                                                     list.streams                    # list of streams
                                                     'path/*.jpg'                    # glob
                                                     'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                                                     'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

 测试效果:

 (图源网络侵删)

注意:如果遇到什么问题,请在留言区留言并附上你的代码,认为有用的文件内容截图~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

还没用过这12款建筑设计软件?你OUT了

每个建筑设计软件都针对不同的需求。选择最好的一个取决于许多因素,例如成本、与其他程序的兼容性以及您愿意花在绘图过程上的时间。它还取决于您在设计过程中所处的位置——我们可能都开始在纸上画草图,然后转向建筑软件。我们甚至需要图形设计软件来说…

Haoop集群的搭建(小白教学)

搭建hadoop集群我们必须拥有自己的虚拟机,下列我会给大家奉上超详细的集群搭建以及我在搭建的时候碰到的问题以及对应解决办法,正所谓自己走过的错路是曲折的,也是防止大家做弯路,不仅浪费时间还心态爆炸,下面带走入ha…

蜘蛛池搭建需要多少域名?全面解析!

蜘蛛池是指为搜索引擎爬虫提供优质、可靠的页面,从而提高网站的收录和排名。在蜘蛛池搭建过程中,域名数量是一个非常重要的问题。那么,蜘蛛池搭建需要多少域名呢?本文将对这个问题进行全面解析。 首先,我们需要了解什么…

SQL教程

1、基础 演示数据库,下面是选自 “Websites” 表的数据: SELECT 语句用于从数据库中选取数据。 SELECT name,country FROM Websites;SELECT DISTINCT 语句用于返回唯一不同的值。 SELECT DISTINCT country FROM Websites;WHERE 子句用于提取那些满足…

二十三种设计模式第五篇--原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建…

Linux网络——Shell编程之循环

Linux网络——Shell编程之循环 一、循环1.循环与遍历2.循环的优势 二、for 循环语句1.for 语句的结构2.for语句应用示例 三、while 循环语句1.while 语句的结构2.while语句应用示例 四、until 循环五、跳出循环1.break2.continue3.exit 六、死循环 一、循环 定义:循…

2023年适合营销公司使用的十大「社交媒体管理」工具

在遍地都是数字营销公司的时代,对品牌来说,拥有强大的社交媒体影响力以保持竞争力从未如此重要。 而对于管理一个或多个品牌的数字营销公司来说,从内容创作到执行报告,使用正确的工具可以帮助你做到这一点。从规划、管理和跟踪社…

idb使用教程(一)

概述 iOS开发桥(idb)是一个多功能的工具,用于自动化iOS模拟器和设备。它在一个一致的、对人友好的界面中暴露了很多分布在苹果工具中的功能。 安装 idb由两个部分组成,每个部分都需要单独安装。 idb伴侣 每个目标&#xff08…

《花雕学AI》ChatMind:与AI对话,轻松梳理思路并创建思维导图

引言: 思维导图是一种有效的思维工具,可以帮助用户整理和表达自己的思路,提高学习和工作的效率和质量。然而,传统的思维导图工具往往需要用户花费大量的时间和精力,学习和操作复杂的界面和功能,而且很难根据…

医院智能导诊系统,医院导航解决方案

随着现代医院规模不断扩大,功能区域越来越细化,面对复杂的楼宇结构,集中的就诊人流,患者在就诊中经常会面临找不到目的地的困境,就诊体验变差。针对这个问题,一些面积和规模都比较大的医院,已经…

html实现经典打方块小游戏

文章目录 1.设计来源1.1 主界面1.2 游戏界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/130581985 html实现经典打方块小游戏源码 html实现经典打方块…

自主可控不走捷径,中国长城做难且正确的事

2020-2022年是中国信创产业的重要推广期,在国家战略的支持下,自主可控领域诸多相关企业均获得绝佳发展良机。 但信创产业“完成替代”不是终点,“实现领先”方是目标。如今势已启、路尚远,前景广阔的市场并不意味着自主可控相关企…

运营商三要素验证原理,这篇文章就够了!

引言 运营商三要素验证 API 是一种基于手机号码、身份证号码和姓名等三种信息的验证服务,主要用于验证用户身份信息的真实性和一致性,以及查询手机号码所属的运营商信息。 运营商三要素 API 的验证原理 1. 身份验证的原理 身份信息验证是运营商三要素…

入门级的家用洗地机怎么样?入门级洗地机推荐

洗地机的功能有很多,比如除菌、洗地机清洁地面的确是一把好手。但是!清洁完之后还要手动清洗洗地机,是一件麻烦事啊!现在市面上大部分洗地机都有自清洁这个功能,但是很多洗地机的自清洁并不算真正的自清洁,…

从月薪3000到月薪20000,自动化测试应该这样学...

绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…

倒转时空,颠覆传统:探究逆置链表的三种思路

本篇博客会讲解力扣“206. 反转链表”的解题思路,这是题目链接。 老规矩,先来审题: 示例如下: 提示和进阶: 本题的思路非常多,我讲解一下常见的思路。 思路1 最容易想到的方法,是直接使…

macOS本地python环境/vscode/导入python包/设置python解释器

查看macbook本地是否有python环境 输入python或者python3,退出python环境使用exit(),别忘了括号 没有的话去官网安装https://www.python.org/ 2. 安装vscode 官网https://code.visualstudio.com/ 3. 安装插件 点击左边的“插件”按钮,安装…

springcloud-gateway集成knife4j(swagger3)

springcloud-gateway集成knife4j(swagger3) springcloud-gateway集成knife4j(swagger3) 环境信息准备工作微服务集成knife4j 第一步:编写Knife4jApiInfoProperties第二步:编写配置类Knife4jConfig第三步&a…

5月9号软件资讯更新合集......

Linux 嵌入式系统构建工具 Yocto 发布 4.2 版本 基于 Linux 基金会的 Yocto 项目发布了 4.2 版本。Yocto 提供模板、工具和方法,帮助开发者创建基于 Linux 的定制版物联网 / 嵌入式操作系统,而无需关心硬件体系。 4.2 中的新功能 / 增强功能 Linux 内核…

106.(cesium篇)cesium椎体旋转

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <