window10下半自动标注

前言

我看了一眼我们项目的标签很多不行,得重新标注。想借助一下自动标注或者半自动标注救救一万多近两万张照片

方法1:easyDL智能标注

(1)借助百度easyDL进行标注

  1. 选择EasyDL图像–>物体检测
    在这里插入图片描述
    我是做图像识别所以选择EasyDL图像
    在这里插入图片描述
  2. 简单的注册信息之后导入图片或者是压缩包就可以进行标注了
  3. 我标注了百来张就想试试自动标注
    在这里插入图片描述
    实际上后面还是要更正和修正
    最后可以在数据总览看见如下图的结果
  4. 点击红圈圈出的“立即前往”,进入EasyDAata,点击 “立即使用”,再点击“导出”
    在这里插入图片描述
  5. 在等待一段时间之后就可以下载
    在这里插入图片描述

最后放上一张结果图
在这里插入图片描述
它是一一对应的
后面估计还得写一个脚本,把两种文件分开
我写的脚本都会因为版权限问题失败,后面发现我自己好呆。直接在搜索栏里面输入.jpg或者是.json,然后全选复制到另一个文件夹就行了
在这里插入图片描述

方法2:使用labelimg和pytorch框架下的yolov5实现自动标注

(1)环境配置

环境配置的就不说了
框架选用的也是pytorch

(2)思路

先训练一个小批量数据的模型,然后使用这个权重进行识别并进行标注

!!!提醒一下大家小样本的训练集的数量,也不能真的太小(建议是有千来张,建议是根据自己的数据集)

出于两方面的考虑:①样本太小训练效果不好,到后面有可能变成半手动(出力不讨好)
②可以适当增加一些比较特殊的训练样本以增加训练效果

(3)步骤

1 )首先就是先训练一个小的权重

  1. 先利用之前标注好的文件进行yolov5训练

不知道怎么训练的看看Pytorch搭建YoloV5目标检测平台
但是有一个问题就是博主给的代码和官方给的代码是有差异的
在这里插入图片描述
左边是该博主的代码右边是在官网下载的,而且生成的权重文件是pth类型,官网下载的生成的好像是pt文件

  1. 如果只按照这个博主来的接下来就得考虑pth转pt文件了

下次一定写个脚本!!!


  1. 使用官方的代码的话
    可以看看我之前写的这篇可能有些地方写得不清楚,可以私信我或者是直接评论,看到了(我会的 )一定解答

2)开始自动标注

我试了很多代码最后效果比较好的就是神秘cv男的自动标注整体操作比较简单,还有视频讲解。
操作下:

  1. 直接在github下载在这
  2. 然后放入yolov5的文件夹中
  3. pip Install natsort 因为之前没下载过报红了
  4. 给个示意图吧!
  5. 在这里插入图片描述
    一万六千张照片一会就搞完了!但是我发现有一个比较麻烦的问题是他只能在window系统下运行,如果在linux(我用的是ubantu)就会出现xml文件进入不了文件夹子!!!在这里插入图片描述
    下次一定改改!下次一定下次一定!

3)xml转成yolo(即txt)格式

import xml.etree.ElementTree as ET

import pickle
import os
from os import listdir, getcwd
from os.path import join
import glob

###!!!!!!!!!###
###(1)改类名
classes = ['number']


def convert(size, box):
    dw = 1.0 / size[0]
    dh = 1.0 / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def convert_annotation(image_name):
    ###!!!!!!!!!###
    #(2)修改为自己的xml路径
    in_file = open('D:/computervision/ocr/data/xml_file/' + image_name[:-3] + 'xml')  # xml文件路径
    #(3)改txt路径
    out_file = open('D:/computervision/ocr/data/txt/' + image_name[:-3] + 'txt', 'w')  # 转换后的txt文件存放路径
    f = open('D:/computervision/ocr/data/xml_file/' + image_name[:-3] + 'xml')
    xml_text = f.read()
    root = ET.fromstring(xml_text)
    f.close()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls not in classes:
            print(cls)
            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')


wd = getcwd()

if __name__ == '__main__':
    ###!!!!!!!!!###
    ###(4)改jpg文件路径
    for image_path in glob.glob("D:/computervision/ocr/data/jpg_file/*.jpg"):  # 每一张图片都对应一个xml文件这里写xml对应的图片的路径
        image_name = image_path.split('\\')[-1]
        convert_annotation(image_name)

这份代码存在一个问题就是没有xml文件(因为训练结果可能不一定保证每一张图片都能标注到),此时就要手动修正了!

方法3:基于PaddleHub和Labelimg

emmm…前面两种效果都很好 ,我就没仔细研究。下次一定!下次一定!

猜你喜欢

转载自blog.csdn.net/weixin_50862344/article/details/125900740
今日推荐