当前位置:   article > 正文

【无标题】_yolov5早停机制

yolov5早停机制


接上一篇。任务流程是拿到电池三维重建结果,对重建结果进行Z轴切割,根据切割出的图像中的电池边缘在合适的位置对电池进行X轴和Y轴方向再次切割,就可以得到清晰的电池纵向和横向的切割截面图,并找出截面图中电池正负级极点坐标输出为csv文件。
因为这次项目要用到yolov5深度学习框架,是要用到英伟达显卡,我的笔记本是amd显卡,所有用的是我师父的电脑,现在就没什么数据在我这个电脑上。

yolov5下载

链接: 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,训练时间依次递增,训练效果依次递增
yolov5模型
训练结束后会将模型保存在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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

定义检测函数

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

通过调用检测函数会在原文件下新生成两个.csv文件和一个*mark.png文件,即正负级极点坐标和描点图像。

问题

这次任务中遇到以下几个问题

  • x,y截面图不清晰
  • 模型找不到标签
  • 训练模型准确度不够理想

解决方法

  • 重新修改寻边函数,对于个别结果依旧不理想的手动去截
  • 创建标准文件目录框架,labels和images一定要是相同的路径结构
  • 原因认为是训练集太少,打标签的标准不够清晰。先打第一批标签60个,生成预标准,然后训练模型,将全部数据集在放入模型中去检测,将检测结果在转回.json文件,再次订正标签60个,生成第二批预标准,将两批预标准都放入模型中再次训练。

总结

这次项目是来公司的第一个项目,主要运用Canny边缘检测算法和yolov5深度学习框架。首先是对于边缘检测的有了新的认识。本科在校期间也做过边缘检测的相关实验,使用的有sober算子、Laplace算子和Canny算子等,这次是首次将这些真正运用到实际生活中,图像的边缘处理效果最好的还是Canny算子,他是基于一阶导数,对于图像噪声有较强的适应性,主要分为高斯滤波、计算梯度、非极大值抑制、双阈值过滤四个部分,其中sigma为高斯滤波方差,影响图像所能识别出线条的数量,双阈值是为了控制非主体线条的数量。YOLOv5使用起来还是非常方便的,用x模型训练出来的模型效果也较为理想,但原理方面现在还是一窍不通,往后会继续学习深度学习和机器视觉相关内容,再接再厉!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/286231
推荐阅读
相关标签
  

闽ICP备14008679号