赞
踩
链接: yolov5安装教程
labelme 打标签工具
labelme生成的标签文件是.json文件,而YOLOv5标签文件格式要求是.txt文件,所以要对.json文件进行处理转换成.txt文件。
创建文件目录框架如下
images和labels的一定要放在同一路径下,因为yolov5模型使用时并不需要你去指定labels数据位置,而是通过训练数据的路径去找labels路径,如训练集路径./datasets/images/train/*.png,那么yolov5会直接把训练集路径中的’images’替换成‘labels’,‘png’替换成’txt’,替换后的新路径设置为label训练集对应的标签路径。
训练前需要调整的是训练的模型,yolov5提供了5个模型,yolov5n、yolov5s、yolov5m、yolov5l、yolov5x,训练时间依次递增,训练效果依次递增
训练结束后会将模型保存在runs下的exe文件夹下。
值得一提的是yolov5模型有早停机制(Early Stopping),如果训练过程中在未到达epochs且平均mAP(平均精确率的平均)没有再提高,那么yolov5会自己停下训练并保存训练模型。
定义detector检测类,
class Detector: def __init__(self): self.model_af = torch.hub.load(r'C:\dip\yolov5', 'custom', path=r'C:\dip\model\weights\best-xwd-1109.pt', source='local') self.model_af.conf = 0.01 # 置信度 self.model_af.iou = 0.01 # 交叉比 def detect(self, images): res_list = [] results = None results = self.model_af(images, size=1000) for row_i in results.xyxy[0].cpu(): xmin, ymin, xmax, ymax, conf, label = row_i res_list.append([int(xmin.round()), int(ymin.round()), int(xmax.round()), int(ymax.round()), float(conf), int(label)]) return res_list
定义检测函数
def detect_img_dir(src_dir:str):
detector = Detector()
img_file_list = glob.glob('*.png', root_dir=src_dir)
total_num = len(img_file_list)
print("total_num = ", total_num)
i = 0
for img_file in img_file_list:
i += 1
print(f'{i}/{total_num} {img_file}')
try:
detect_tif_file(os.path.join(src_dir, img_file), detector)
except BaseException as e:
print(e)
通过调用检测函数会在原文件下新生成两个.csv文件和一个*mark.png文件,即正负级极点坐标和描点图像。
这次任务中遇到以下几个问题
解决方法
这次项目是来公司的第一个项目,主要运用Canny边缘检测算法和yolov5深度学习框架。首先是对于边缘检测的有了新的认识。本科在校期间也做过边缘检测的相关实验,使用的有sober算子、Laplace算子和Canny算子等,这次是首次将这些真正运用到实际生活中,图像的边缘处理效果最好的还是Canny算子,他是基于一阶导数,对于图像噪声有较强的适应性,主要分为高斯滤波、计算梯度、非极大值抑制、双阈值过滤四个部分,其中sigma为高斯滤波方差,影响图像所能识别出线条的数量,双阈值是为了控制非主体线条的数量。YOLOv5使用起来还是非常方便的,用x模型训练出来的模型效果也较为理想,但原理方面现在还是一窍不通,往后会继续学习深度学习和机器视觉相关内容,再接再厉!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。