LabelGo使用记录-基于Yolov5的半自动标注工具

简单介绍

在做深度学习检测项目时,可能经常需要标注数据,单单靠人工标注是一件很麻烦的时间,耗时耗力,今天介绍一下刚学到的Github大佬开源的基于yolov5的辅助标注工具,介绍一下使用过程。
首先贴出链接:
https://github.com/cnyvfang/labelGo-Yolov5AutoLabelImg

这是一个基于 labelImg与 YOLOv5 的半自动标注工具,通过现有的YOLOv5 PyTorch模型对数据集进行半自动标注。原理很简单,使用训练过的yolov5模型对数据进行标注,然后在简单修修改改就好啦!

代码下载

代码最新我看是yolov5-v6.2版本, 我没有用过,直接跑去yolov5-v5.0版本了,克隆代码使用官方权重在我的环境中会报torch版本error,就跑release版本下载labelGo_for_yolov5_v5_final代码
地址:
https://github.com/cnyvfang/labelGo-Yolov5AutoLabelImg/releases

然后 下载yolov5-v5.0官方代码,这个也会用到
git clone https://github.com/ultralytics/yolov5.git

这个代码就和平常的代码库一样运行,我是习惯pycharm运行代码,直接在pycharm打开项目,然后配置环境,这个配置环境就自己来吧!

yolov5官方权重使用

在github下载yolov5-v5.0官方权重yolov5s.pt
这里放下百度云下载地址:
链接:https://pan.baidu.com/s/1DNRX3LcvIMGEKeTS9WJrcw
提取码:1234
运行labelGo,在pycharm终端输入:python labelGo.py
在这里插入图片描述
点击Open Dir 按钮选择要标注的图片文件夹打开
LabelGo使用记录-基于Yolov5的半自动标注工具_第1张图片
在点击Auto Lable 选择yolovs.pt权重文件,会自动标注,也可一使用Create RectBox手动增加标注,和lableimg一样,默认是YOLO格式标签文件,点击YOLO (TO VOC) 可以将生成的yolo标签转换成VOC格式,都保存在图片文件夹中。
LabelGo使用记录-基于Yolov5的半自动标注工具_第2张图片
这是生成的标签文件
LabelGo使用记录-基于Yolov5的半自动标注工具_第3张图片
实际测试时会有找不到classes.txt文件错误,有时候会自动生成,出错可以手动将coco标签类别文件放到图片所在目录中。
在这里插入图片描述

标注自己的数据集

使用yolov5-v5.0训练自己的数据集,获得权重文件,然后使用此权重文件进行标注。
错误解决:
LabelGo使用记录-基于Yolov5的半自动标注工具_第4张图片
这个应该是代码没有更新,在issues有解决方案。
https://github.com/cnyvfang/labelGo-Yolov5AutoLabelImg/issues/20
将yolov5-v5.0官方代码的utils文件夹拷贝到labelGo-Yolov5AutoLabelImg-source项目中,将 yolov5-5.0\models\yolo.py文件拷贝到labelGo-Yolov5AutoLabelImg-source\libs\models 文件夹内替换yolo.py文件,然后修改下文件,其他错误就不用管。
这里直接下载zip的官方代码和这个项目的代码好像一样,会报其他错误,使用git clone的是ok的。
LabelGo使用记录-基于Yolov5的半自动标注工具_第5张图片
接下来出现找不到SPPF模块。
LabelGo使用记录-基于Yolov5的半自动标注工具_第6张图片
将yolov5源码的SPPF模块复制到libs/models/common.py 文件中,并import warnings

import warnings
class SPPF(nn.Module):
    # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
    def __init__(self, c1, c2, k=5):  # equivalent to SPP(k=(5, 9, 13))
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * 4, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)

    def forward(self, x):
        x = self.cv1(x)
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')  # suppress torch 1.9.0 max_pool2d() warning
            y1 = self.m(x)
            y2 = self.m(y1)
            return self.cv2(torch.cat((x, y1, y2, self.m(y2)), 1))


然后就可以愉快的标注了。方法同上。

你可能感兴趣的:(目标检测,YOLO,深度学习,python)