赞
踩
以识别水管和电线这两个对象为例,对如何基于yolov5训练自己的数据集进行记录,并附上在学习过程中参考到的一些好文章。
目录
环境安装---数据集采集及标注---模型训练---模型推理---模型优化
3.3.1.拓展库下载安装 remote-ssh 和 remote development
3.3.2.ctrl+shift+p后输入remote,点击remote-ssh connect to host
3.3.3.创建新账户 Add new SSH host,输入要进入的云服务器地址
3.3.7.默认的目录不是该服务器的根目录,需要进入根目录的话选择下拉列表的第一个,其他看自己的需要
3.3.8.继续选择根目录下的下级目录,我这里没选,默认进入整个目录
这部分不是本博客的重点,很多热门好文也都有保姆级别的教程,这里不多说,还没安装的小伙伴可以参考以下几篇文章:
深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解
我要训练所用的水管及电线在网上图片很少,所以自己动手,将各类水管电线在不同场景下拍摄了近千张。
而一些常见素材,如人,猫,狗,汽车等素材,可以通过很多资源网站收集,比如:
1.Machine Learning Datasets | Papers With Code
公开数据集分门别类的整理好了,可以快速找到需要的数据集,以及使用该数据集的一些论文。
academictorrents提供超过127TB 的研究数据。一个分布式系统来共享庞大的数据集——供研究人员使用。一个可扩展、安全且容错的数据存储库,具有极快的下载速度。在其他网站上看到的数据,基本都可以通过这个网站下载。
我用的是cvat标注,cvat使用的前提是安装docker,安装教程如下:
CVAT安装及图片标注使用教程,这里copy一下之前我写的cvat使用教程:
2.2.2.1 创建Task
高级配置 Advanced configuration很多参数目前阶段用不到,以下仅对几个常用的参数进行说明:
2.2.2.2 Task列表页面
2.2.2.3 Task内页
2.2.2.4 标注页面
2.2.2.5 标注小技巧
到这里就完成数据标注了。
从cvat下载下来的文件夹里,图片和txt文件是分开放置的,如下图:
我们要将images和txt文件分开放置,才能使其满足能被yolo可识别的存放格式,创建一个文件夹,我这里起名为waterpipe_electricwire6000+(因为有),再在这个文件夹里分别创建名为images和labels的文件夹用来存放一会要被分类的图片和txt文件:
对已经标注好的图片,我们可以通过图片增强的方法实现数量扩充,这里我们对图片RGB三个颜色通道进行排列组合,就可以得到原先六倍数量的数据集,同时生成与之对应的txt文件,以下是实现代码:
- import cv2
- import os
- import re
- from glob import glob
- import shutil
- from numpy import TooHardError
-
- dir = "/home/lyr/下载/complete_callout/02/"#转换后图片保存位置
- ray_path = "/home/lyr/下载/complete_callout/obj_train_data/"#原始图片位置
-
- labels_dir = "/home/lyr/下载/complete_callout/03/"#转换后图片label保存位置
- ray_labels_path = "/home/lyr/下载/complete_callout/obj_train_data/"#原始图片labels位置
-
- frames = glob(os.path.join(ray_path, '*.jpg'))
-
- for i, frame in enumerate(frames):
- pattern = re.compile(r'([^<>/\\\|:""\*\?]+)\.\w+$')
- data = pattern.findall(frame)
- data_now = data[0]
- Newdir = os.path.join(ray_path, str(data_now) + '.jpg')
- img = cv2.imread(Newdir)
- # print(Newdir)
- B, G, R = cv2.split(img) #openCV切分为BGR三个通道
- img_GRB = cv2.merge([G, R, B])#重定义为GRB顺序
- img_RGB = cv2.merge([R, G, B])#重定义为RGB顺序
- img_BGR = cv2.merge([B, G, R])#重定义为BGR顺序
- img_GBR = cv2.merge([G, B, R])#重定义为GBR顺序
- img_RBG = cv2.merge([R, B, G])#重定义为RBG顺序
- img_BRG = cv2.merge([B, R, G])#重定义为BRG顺序
-
- lablename= Newdir.split("/")[-1]#获取图片的名字(含文件名后缀)
- # print(lablename)
- lablename = lablename.split(".")[0]#获取图片的名字(不含文件名后缀)
- # print(lablename)
- labelpath = os.path.join(ray_labels_path,lablename)#获取该图片labels的完整路径
- all_dir = labelpath+'.txt'
- print(all_dir)
-
- if os.path.exists(all_dir): #判断该图片在labels路径下是否有对应的label
- # os.rename(labelpath+'.txt',labelpath+'_RGB'+'.txt')#如果有,就在它移动之后重命名操作
- shutil.copyfile(all_dir,labels_dir + lablename + '_RGB.txt')
- shutil.copyfile(all_dir,labels_dir + lablename + '_BGR.txt')
- shutil.copyfile(all_dir,labels_dir + lablename + '_GRB.txt')
- shutil.copyfile(all_dir,labels_dir + lablename + '_GBR.txt')
- shutil.copyfile(all_dir,labels_dir + lablename + '_RBG.txt')
- shutil.copyfile(all_dir,labels_dir + lablename + '_BRG.txt')
-
-
- else:
- print("The file does not exist")
-
- name_RGB = str(data_now) + "_RGB"+".jpg"
- name_BGR = str(data_now) + "_BGR"+".jpg"
- name_GRB = str(data_now) + "_GRB"+".jpg"
- name_GBR = str(data_now) + "_GBR"+".jpg"
- name_RBG = str(data_now) + "_RBG"+".jpg"
- name_BRG = str(data_now) + "_BRG"+".jpg"
-
-
- cv2.imwrite(dir + name_RGB, img_RGB)
- cv2.imwrite(dir + name_BGR, img_BGR)
- cv2.imwrite(dir + name_GRB, img_GRB)
- cv2.imwrite(dir + name_GBR, img_GBR)
- cv2.imwrite(dir + name_RBG, img_RBG)
- cv2.imwrite(dir + name_BRG, img_BRG)
-
运行成功就可以得到扩充六倍数量的图片和对应的txt文件了,如果想得到按阿拉伯数字命名的文件,可以参考这篇博客:python对文件/图片按生成顺序进行重命名(从指定数字开始)
yolo目录下/data/coco128.yaml是这样的:
- # YOLOv5 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/337925推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。