当前位置:网站首页>window10下半自动标注
window10下半自动标注
2022-08-02 14:02:00 【weixin_50862344】
前言
我看了一眼我们项目的标签很多不行,得重新标注。想借助一下自动标注或者半自动标注救救一万多近两万张照片
方法1:easyDL智能标注
(1)借助百度easyDL进行标注
- 选择EasyDL图像–>物体检测

我是做图像识别所以选择EasyDL图像
- 简单的注册信息之后导入图片或者是压缩包就可以进行标注了
- 我标注了百来张就想试试自动标注

实际上后面还是要更正和修正
最后可以在数据总览看见如下图的结果 - 点击红圈圈出的“立即前往”,进入EasyDAata,点击 “立即使用”,再点击“导出”

- 在等待一段时间之后就可以下载了

最后放上一张结果图
它是一一对应的
后面估计还得写一个脚本,把两种文件分开
我写的脚本都会因为版权限问题失败,后面发现我自己好呆。直接在搜索栏里面输入.jpg或者是.json,然后全选复制到另一个文件夹就行了
方法2:使用labelimg和pytorch框架下的yolov5实现自动标注
(1)环境配置
环境配置的就不说了
框架选用的也是pytorch
(2)思路
先训练一个小批量数据的模型,然后使用这个权重进行识别并进行标注
!!!提醒一下大家小样本的训练集的数量,也不能真的太小(建议是有千来张,建议是根据自己的数据集)
出于两方面的考虑:①样本太小训练效果不好,到后面有可能变成半手动(出力不讨好)
②可以适当增加一些比较特殊的训练样本以增加训练效果
(3)步骤
1 )首先就是先训练一个小的权重
- 先利用之前标注好的文件进行yolov5训练
不知道怎么训练的看看Pytorch搭建YoloV5目标检测平台
但是有一个问题就是博主给的代码和官方给的代码是有差异的
左边是该博主的代码右边是在官网下载的,而且生成的权重文件是pth类型,官网下载的生成的好像是pt文件
- 如果只按照这个博主来的接下来就得考虑pth转pt文件了
下次一定写个脚本!!!
- 使用官方的代码的话
可以看看我之前写的这篇可能有些地方写得不清楚,可以私信我或者是直接评论,看到了(我会的)一定解答
2)开始自动标注
我试了很多代码最后效果比较好的就是神秘cv男的自动标注整体操作比较简单,还有视频讲解。
操作下:
- 直接在github下载在这
- 然后放入yolov5的文件夹中
pip Install natsort因为之前没下载过报红了- 给个示意图吧!
一万六千张照片一会就搞完了!但是我发现有一个比较麻烦的问题是他只能在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…前面两种效果都很好 ,我就没仔细研究。下次一定!下次一定!
边栏推荐
猜你喜欢

Object detection scene SSD-Mobilenetv1-FPN

网络安全第二次作业

Supervision strikes again, what about the market outlook?2021-05-22

第二届中国Rust开发者大会(RustChinaConf 2021~2022)线上大会正式开启报名

网络安全第三次作业

The world's largest Apache open source foundation is how it works?

WeChat Mini Program-Recent Dynamic Scrolling Implementation

Interview | with questions to learn, Apache DolphinScheduler Wang Fuzheng

IDEA打包jar包

目标检测场景SSD-Mobilenetv1-FPN
随机推荐
The world's largest Apache open source foundation is how it works?
idea社区版下载安装教程_安装天然气管道的流程
Geoffery Hinton:深度学习的下一个大事件
mysql的case when如何用
【Tensorflow】AttributeError: module 'keras.backend' has no attribute 'tf'
Gstreamer Plugin注册流程详解
VMM是什么?_兮是什么意思
Flask-RESTful请求响应与SQLAlchemy基础
RowBounds[通俗易懂]
OpenMMLab简介
How to solve mysql service cannot start 1069
此次519暴跌的几点感触 2021-05-21
瑞吉外卖笔记——第10讲Swagger
ping命令的使用及代码_通过命令查看ping路径
为什么四个字节的float表示的范围比八个字节的long要广
如何自定义feign方法级别的超时时间
CVE-2020-27986(Sonarqube敏感信息泄漏) 漏洞修复
Swagger 的使用
第十二单元 关联序列化处理
jwt(json web token)