最新要闻
- 视焦点讯!支持Win7运行最后版本:U盘软件Rufus 3.22正式发布
- 女子家中开氛围灯外面看如同着火 引来消防员场面十分尴尬
- 信息:003至薄套壁 杰士邦避孕套0.66元/枚狂促
- 世界热讯:永安林业:副董事长辞职
- 环球观速讯丨肝帝玩家!《暗黑破坏神4》公测玩家达成全职业满级
- 男子高速奇葩操作:头上竟然套了一个“车顶”
- 热点评!股票除权日在什么时候
- 环球观焦点:阿什莉动捕演员庆祝《生化危机4:重制版》发售 身穿黑丝超吸睛
- 今日精选:网络爽文改编 《赘婿》动画定档4月23日B站开播
- 全球球精选!加拿大旅游团费_加拿大旅游费用
- 小米顶级自研技术!Redmi Note 12 Turbo用上小米影像大脑
- 【新视野】GPT已长出眼睛耳朵 周鸿祎:人工智能将会产生意识
- 看点:苏州天使母基金合作子基金接连完成投资
- 曹德旺谈人工智能:能做饭吃吗?如果大家都去研究会饿死
- 当前看点!南方新一轮强降雨将上线!北方大部气温“狂飙” 最高飙到25度
- 今日观点!12款随便挑 太平鸟印花T恤清仓:到手69元
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
快看点丨yolov5训练自己的数据集
1.安装cuda
可以先看看自己的 显卡信息,支持哪个cuda版本
cuda下载地址:https://developer.nvidia.com/cuda-toolkit-archive
(相关资料图)
我的RTX3060,下载的cuda11.8
下载后安装,直接默认安装到底,然后打开cmd,输入nvcc -V
2.安装cudnn
需要安装和cuda版本对应的cudnn
地址:https://developer.nvidia.com/rdp/cudnn-archive
下载对应的版本,解压替换到cuda安装目录下
3.安装Pytorch
我使用的是conda默认的环境,python3.9
进入pytorch官网:https://pytorch.org/
找到对应的版本下载,我这里不指定torch版本,直接运行
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
等待安装完成即可
4.安装标注软件
pip installlabelImg
安装成功后直接运行labelImg 打开软件
open dir打开图片文件夹,change save dir 选择保存的xml文件的文件夹
create rectBox去框选需要检测的目标,输入label name
标注完自己的数据
一个img图片文件夹, 一个和图片对应的xml文件夹
5. 将数据集进行分割
执行下面代码,即可得到分割好的数据集
import osimport randomimport shutilimg_path = "img"xml_path = "xml"def split_file_name(file_name): f_name, _ = file_name.split(".") return f_namedef split_move_file(target_path, save_basic_path, train_scale=0.9): train_img_path = os.path.join(save_basic_path, "images/train") train_xml_path = os.path.join(save_basic_path, "xml/train") val_img_path = os.path.join(save_basic_path, "images/val") val_xml_path = os.path.join(save_basic_path, "xml/val") print(save_basic_path, train_img_path) if not os.path.exists(train_img_path): os.makedirs(train_img_path) if not os.path.exists(train_xml_path): os.makedirs(train_xml_path) if not os.path.exists(val_img_path): os.makedirs(val_img_path) if not os.path.exists(val_xml_path): os.makedirs(val_xml_path) img_file_path = os.path.join(target_path, img_path) file_list = os.listdir(img_file_path) # print(file_list) # 得到名字列表 file_name_li = list(map(lambda x: split_file_name(x), file_list)) random.shuffle(file_name_li) # print(file_name_li) train_ind = int(len(file_name_li) * train_scale) train_data = file_name_li[:train_ind] val_data = file_name_li[train_ind:] print("total number", len(file_name_li)) print("train number", len(train_data)) print("val number", len(val_data)) for file in train_data: file_path = os.path.join(img_file_path, file+".jpg") save_path = os.path.join(train_img_path, file+".jpg") if not os.path.exists(file_path): file_path = os.path.join(img_file_path, file + ".jpeg") save_path = os.path.join(train_img_path, file + ".jpg") if not os.path.exists(file_path): file_path = os.path.join(img_file_path, file + ".png") save_path = os.path.join(train_img_path, file + ".png") if os.path.exists(file_path): shutil.copyfile(file_path, save_path) # xml文件 xml_file_path = os.path.join(target_path, xml_path) file_path = os.path.join(xml_file_path, file + ".xml") save_path = os.path.join(train_xml_path, file + ".xml") if os.path.exists(file_path): shutil.copyfile(file_path, save_path) for file in val_data: file_path = os.path.join(img_file_path, file+".jpg") save_path = os.path.join(val_img_path, file+".jpg") if not os.path.exists(file_path): file_path = os.path.join(img_file_path, file + ".jpeg") save_path = os.path.join(val_img_path, file + ".jpg") if not os.path.exists(file_path): file_path = os.path.join(img_file_path, file + ".png") save_path = os.path.join(val_img_path, file + ".png") if os.path.exists(file_path): shutil.copyfile(file_path, save_path) # xml文件 xml_file_path = os.path.join(target_path, xml_path) file_path = os.path.join(xml_file_path, file + ".xml") save_path = os.path.join(val_xml_path, file + ".xml") if os.path.exists(file_path): shutil.copyfile(file_path, save_path)if __name__ == "__main__": target_path = r"C:\Users\mojia\Desktop\maizi\maozi20230326" save_basic_path = r"C:\Users\mojia\Desktop\maizi\maozi20230326_train_val" if not os.path.exists(save_basic_path): os.mkdir(save_basic_path) scale = 0.9 # 训练集比例 split_move_file(target_path, save_basic_path, scale)
6. 将标注的xml文件转换为txt文件格式
import xml.etree.ElementTree as ETimport osdef convert(size, box): dw = 1. / (size[0]) dh = 1. / (size[1]) x = (box[0] + box[1]) / 2.0 - 1 y = (box[2] + box[3]) / 2.0 - 1 w = box[1] - box[0] h = box[3] - box[2] x = x * dw w = w * dw y = y * dh h = h * dh if w >= 1: w = 0.99 if h >= 1: h = 0.99 return (x, y, w, h)folder_li = ["train", "val"]def convert_annotation(rootpath, classes): labelpath = rootpath + "/labels" # 生成的.txt文件会被保存在labels目录下 if not os.path.exists(labelpath): os.makedirs(labelpath) for folder in folder_li: xmlpath = rootpath + "/xml/"+folder file_list = os.listdir(xmlpath) for xmlname in file_list: xmlfile = os.path.join(xmlpath, xmlname) with open(xmlfile, "r", encoding="UTF-8") as in_file: txtname = xmlname[:-4] + ".txt" # print(txtname) txtpath = labelpath + "/" + folder if not os.path.exists(txtpath): os.makedirs(txtpath) txtfile = os.path.join(txtpath, txtname) with open(txtfile, "w+", encoding="UTF-8") as out_file: tree = ET.parse(in_file) root = tree.getroot() size = root.find("size") w = int(size.find("width").text) h = int(size.find("height").text) out_file.truncate() for obj in root.iter("object"): difficult = obj.find("difficult").text cls = obj.find("name").text if cls not in classes or int(difficult) == 1: continue cls_id = classes.index(cls) xmlbox = obj.find("bndbox") b = (float(xmlbox.find("xmin").text), float(xmlbox.find("xmax").text), float(xmlbox.find("ymin").text), float(xmlbox.find("ymax").text)) bb = convert((w, h), b) out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + "\n")if __name__ == "__main__": rootpath = r"C:\Users\mojia\Desktop\maizi\maozi20230326_train_val" # 数据标签 classes = ["帽子"] # 需要修改 convert_annotation(rootpath, classes)
得到下面这个的目录结构
txt文件里有标签索引和归一化后的坐标和宽高信息
7.下载yolov5源码
直接将代码下载到本地,我下载的时v7.0
下载版本对应的与训练模型
8.修改训练的数据集路径及参数
修改data/coco128.yaml,给出数据集的路径
修改models/yolov5s.yaml,注意我训练时用的yolov5s.pt。这里主要将标签数改成一样的,nc字段改为1个,我只标了一个。
修改train.py,这个我只将device改为0,也就是启用GPU训练,其他参数没有改变,或者在运行train.py时传入参数也一样。
直接运行 python train.py
9.查看训练结果
可以查看损失函数,准确率等信息
训练好的结果在run/train文件夹下面,找到最新的文件夹
可以运行tensorboard --logdir=C:\Users\mojia\Desktop\yolov5-master\runs\train\exp14 通过浏览器查看运行的结果
训练好的权重参数保存在weights文件夹下面
10.进行预测
修改detect.py文件, 修改使用的权重文件,和检测的目标文件
运行 pythondetect.py
结果保存在/runs/detect路径下最新的文件夹里
关键词:
快看点丨yolov5训练自己的数据集
环球关注:有监督学习——决策树、集成学习
每日播报!定时任务的路径问题
视焦点讯!支持Win7运行最后版本:U盘软件Rufus 3.22正式发布
女子家中开氛围灯外面看如同着火 引来消防员场面十分尴尬
信息:003至薄套壁 杰士邦避孕套0.66元/枚狂促
世界热讯:永安林业:副董事长辞职
今日快看!简单部署halo博客
微速讯:Qt源码阅读(二) moveToThread
AES之CryptoJS加密与C#解密
环球观速讯丨肝帝玩家!《暗黑破坏神4》公测玩家达成全职业满级
男子高速奇葩操作:头上竟然套了一个“车顶”
热点评!股票除权日在什么时候
【环球新视野】软件测试--详细判断电话号码
前端设计模式——计算属性模式
世界速递!PLG SaaS 案例:如何实践外链自动增长策略?
需求分析报告(软件项目)
每日播报!Android中常见的线程池
环球观焦点:阿什莉动捕演员庆祝《生化危机4:重制版》发售 身穿黑丝超吸睛
今日精选:网络爽文改编 《赘婿》动画定档4月23日B站开播
全球球精选!加拿大旅游团费_加拿大旅游费用
小米顶级自研技术!Redmi Note 12 Turbo用上小米影像大脑
世界观点:.NET6+Quartz实现定时任务
当前观察:logback的使用和原理
【新视野】GPT已长出眼睛耳朵 周鸿祎:人工智能将会产生意识
环球看热讯:状态观测器(一)
看点:苏州天使母基金合作子基金接连完成投资
曹德旺谈人工智能:能做饭吃吗?如果大家都去研究会饿死
当前看点!南方新一轮强降雨将上线!北方大部气温“狂飙” 最高飙到25度
今日观点!12款随便挑 太平鸟印花T恤清仓:到手69元
全球观热点:苹果WWDC 2023日期曝光!iOS 17首秀来了:或不再支持iPhone X/8
广东突降冰雹 多车被砸毁容!保险给赔吗?
事关出生证明、免税购物、高铁新路线!4月一大波新规来了
精选!AMD新一代APU曝光:大小核架构终于上了
动态:我国首次实现固态氢能发电并网,“绿电”与“绿氢”灵活转换
易烊千玺代言!九号电动两轮车国内出货突破150万辆
转型电动化 韩系车在中国还有救吗?
老人故意推倒摩托车案胜诉 老人儿子需赔1.6万!车主回应
全球关注:读Java性能权威指南(第2版)笔记28_线程和同步性能中
速讯:孤芳自赏是哪一期蒙面唱将
【全球热闻】“韩国宾利”能拿下中国人吗?
焦点观察:票房破40亿中国影史第10!《流浪地球2》4月14日上线咪咕视频
焦点快看:叙利亚外交部谴责美国对叙发动敌对行动
使用 Linux dd 命令测试磁盘读写性能
国际短信平台接口调用的方法步骤,简单5步快速教程
全球信息:Java之大数加减乘除——构建类
张译包场张颂文的新电影《不止不休》!猫眼评分9.3分
世界快消息!2026年亚运会将不建设运动员村:为了削减开支
焦点资讯:3年来最盛大红毯叫停:邓超激动得像买票进场 胡歌刘亦菲杨幂同框梦回仙剑
当前速看:国内这些城市地标为地球熄灯一小时:有你认识的吗?
小米OPPO和vivo实现突破性跨越!微信聊天记录能互相迁移了
天天微资讯!武汉一小伙考研出分后失眠多日,医生支招制定减压计划
linux中conda虚拟环境使用(便于项目切换)、pip和conda换源
原来熊猫的笑声这么粗犷吗 网友直呼没想到:公鸭嗓笑的像反派
天天讯息:被马斯克16亿垄断的工艺 卡了下游企业的脖子
天天热点评!女孩穿汉服乘公交:颜值惊艳众人
环球视点!液体钙和钙片哪个更容易吸收(液体钙和钙片哪个更好吸收)
python 使用 kafka
世界观点:《暗黑4》与《暗黑3》角色截图对比:女性角色更逼真了
捐100亿建大学 曹德旺:我赚了很多钱但不贪婪 会还给社会
女子摔跤上牙磕进嘴唇1月后才发现 医生惊叹不已:网友直呼心太大
徕卡+双长焦史无前例!小米13 Ultra曝光
焦点信息:Vue——initState【十】
当前信息:国外短信平台收不到验证码,怎么解决?
今日快看!什么叫针灸师
全球热文:红心番石榴吃法?
130余年老字号 非遗工艺 吴裕泰特种级茉莉香毫100g装40元
热资讯!灵隐寺旁小溪中大量放生乌龟死亡被吐槽是伪善 放生已成产业链最高2000元一次
【独家焦点】干旱缓解 新疆最大湖泊变了:阿雅克库木湖30年面积扩大近7成
焦点速讯:WPF 入门基础
周鸿祎与库克共话科技未来:惟一被淘汰的是不会用GPT的人
天天观点:12小时保温保冷 朴原良品316不锈钢保温杯16.9元起
世界快讯:代码漏洞暴露用户支付信息 ChatGPT安全存隐患:官方致歉
世界速讯:聚焦险企负债成本管理 监管座谈会释放调整信号
AMD Yes!Zen4回归骨折价 12核锐龙9 7900到手2549元
学生党福音 Redmi小金刚Note 12 Turbo的NFC卡升级:两大功能合体
当前资讯!mp3格式转换器哪个好_mp3格式转换器
dotnet-csharp
焦点精选!C++ sizeof与strlen,并借此明晰内存对齐
女生靠摆地摊还清百万负债 还有人两周赚1万5、月入万元:摆摊真这么赚钱?
【天天速看料】周鸿祎:中国与GPT-4差距两三年 不存在难以逾越技术障碍
当前热文:Windows OpenGL ES 图像 GPUImageAmatorkaFilter
javascript的基础知识
小彭汽车向小鹏汽车道歉:盘点那些神级模仿的老年代步车
【速看料】《三体》动画今日正式完结!豆瓣评分仅3.8:半数一星差评
焦点关注:998的比亚迪秦PLUS DM-i多能跑?博主极端工况实测:合资还怎么打
当前关注:Office2019永久激活工具_Office2019激活工具神龙版v2023.2
天天快播:What is static and dynamic libraries
[白嫖系列] 白嫖一个永久免费的eu.org域名
速看:76人攻防俱佳夺冠有望,湖人防守第一进攻拉胯,勇士卫冕基本无望
全球新资讯:女子模仿网红穿搭遭对方粉丝网暴!法院判网红连续15天道歉、赔偿
男子喝红牛味道不对发现是累牛引热议:康帅傅、雷碧等山寨货为何层出不穷
资讯推荐:关于aws-s3-bucket-静态网站托管相关的查询-S3.Client.get_bucket_website(**kwargs)
天天速读:西班牙经济连续两年增速达5.5%
用4年不卡!Redmi Note 12 Turbo配置公布:16GB+1TB、5000mAh
环球今头条!男子抖音晒夜爬泰山到井盖下躲风 景区回应:核实后会处罚
【焦点热闻】YCSB工具原理重点内容解读(二)
CSS鼠标样式(cursor)总结(转载)
每日速看!因航班延误缺考复试 考研生崩溃大哭:对不起父母 对不起自己的努力
猪肉含量≥85% 一口全是肉:亚明猪肉烤肠29.9元2斤大促