图像半自动标注「建议收藏」

图像半自动标注「建议收藏」前言标注数据集对深度学习而言是很重要的一步,但是标注数据是件很繁琐的工作,而半自动标注可以减轻工作量。Github(https://github.com/virajmavani/semi-auto-image-annotation-tool)上有一款自动标注工具,它以RetinaNet作为建议算法,使用预训练的RetinaNet模型从MSCOCO数据集建议80个类对象。这款工具我没有…

大家好,又见面了,我是你们的朋友全栈君。

前言

标注数据集对深度学习而言是很重要的一步,但是标注数据是件很繁琐的工作,而半自动标注可以减轻工作量。
Github(https://github.com/virajmavani/semi-auto-image-annotation-tool)上有一款自动标注工具,它以RetinaNet作为建议算法,使用预训练的RetinaNet模型从MS COCO数据集建议80个类对象。
这款工具我没有安装使用,从Demo来看效果还是挺好的,大部分目标都能检测出来。
我这里要说的半自动标注是什么?
其实就是通过训练好的模型检测目标,输出包含目标类别和位置的txt文件,然后再将其转换为xml文件,最后再使用标注工具进行完善。
当然,前提是模型的精度越高越好,如果检测结果不准确,就会增加工作量,导致无法使用。

训练模型

首先我们要训练出一个可用的模型,精度越高越好。

使用模型对数据集进行测试

以车辆检测为例,测试结果如下图所示:


图像半自动标注「建议收藏」


得到包含目标类别和位置的txt文件,部分内容如下:

00001.png car 1028 367 1241 520
00001.png car 671 382 938 610
00001.png car 939 339 1019 402

把txt文件转换为xml文件,代码如下:

#! /usr/bin/python
# -*- coding:UTF-8 -*-
import os, sys
import glob
from PIL import Image

# 图像存储位置
src_img_dir = ""  # 添加你的路径
# 图像的 ground truth 的 txt 文件存放位置
src_txt_dir = ""
src_xml_dir = ""

img_Lists = glob.glob(src_img_dir + '/*.jpg')

img_basenames = [] # e.g. 100.jpg
for item in img_Lists:
    img_basenames.append(os.path.basename(item))

img_names = [] # e.g. 100
for item in img_basenames:
    temp1, temp2 = os.path.splitext(item)
    img_names.append(temp1)

for img in img_names:
    im = Image.open((src_img_dir + '/' + img + '.jpg'))
    width, height = im.size

    # open the crospronding txt file
    gt = open(src_txt_dir + '/' + img + '.txt').read().splitlines()

    # write in xml file
    xml_file = open((src_xml_dir + '/' + img + '.xml'), 'w')
    xml_file.write('<annotation>\n')
    xml_file.write(' <folder>VOC2007</folder>\n')
    xml_file.write(' <filename>' + str(img) + '.jpg' + '</filename>\n')
    xml_file.write(' <size>\n')
    xml_file.write(' <width>' + str(width) + '</width>\n')
    xml_file.write(' <height>' + str(height) + '</height>\n')
    xml_file.write(' <depth>3</depth>\n')
    xml_file.write(' </size>\n')

    # write the region of image on xml file
    for img_each_label in gt:
        spt = img_each_label.split(' ') #这里如果txt里面是以逗号‘,’隔开的,那么就改为spt = img_each_label.split(',')。
        xml_file.write(' <object>\n')
        xml_file.write(' <name>' + str(spt[4]) + '</name>\n')
        xml_file.write(' <pose>Unspecified</pose>\n')
        xml_file.write(' <truncated>0</truncated>\n')
        xml_file.write(' <difficult>0</difficult>\n')
        xml_file.write(' <bndbox>\n')
        xml_file.write(' <xmin>' + str(spt[0]) + '</xmin>\n')
        xml_file.write(' <ymin>' + str(spt[1]) + '</ymin>\n')
        xml_file.write(' <xmax>' + str(spt[2]) + '</xmax>\n')
        xml_file.write(' <ymax>' + str(spt[3]) + '</ymax>\n')
        xml_file.write(' </bndbox>\n')
        xml_file.write(' </object>\n')

    xml_file.write('</annotation>')

对应的XML文件:

  <annotation>
    <folder>VOC2007</folder>
    <filename>00001.png</filename>
    <size>
        <width>1280</width>
        <height>1024</height>
        <depth>3</depth>
    </size>
    <object>
        <name>car</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1028</xmin>
            <ymin>367</ymin>
            <xmax>1241</xmax>
            <ymax>520</ymax>
        </bndbox>
    </object>
    <object>
        <name>car</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>671</xmin>
            <ymin>382</ymin>
            <xmax>938</xmax>
            <ymax>610</ymax>
        </bndbox>
    </object>
    <object>
        <name>car</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>939</xmin>
            <ymin>339</ymin>
            <xmax>1019</xmax>
            <ymax>402</ymax>
        </bndbox>
    </object>
</annotation>

打开标注软件完善标注

如下图所示,上一步的结果可能会出现以下情况:

  • 检测结果不准确
  • 有目标未被检测出来


    图像半自动标注「建议收藏」

因此,还需要我们手动标注进行完善。

总结

如果半自动标注工具的效果能达到要求,就会大幅减小标注的工作量。
但是,精度和效率很难达到平衡,目前来看,主流方法还是全人工标注。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147535.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [基础常识]申请免费SSL证书 – 阿里云云盾证书 – Digicert+Symantec 免费型DV SSL

    [基础常识]申请免费SSL证书 – 阿里云云盾证书 – Digicert+Symantec 免费型DV SSL

    2021年10月14日
    39
  • 《Android开发从零开始》视频全集「建议收藏」

    《Android开发从零开始》视频全集「建议收藏」这套教程是若水倾情为有一定Java基础的朋友制作的Android开发从零开始视频集合,目前共38集。《Android开发从零开始》文章列表:1.Android开发环境的搭建2.模拟器的使用3.第一个Android程序4.TextView控件学习5.EditText控件学习6.DDMS视图&Button7.Intent初级学习8

    2022年5月9日
    40
  • 阿里编程规范 pdf_阿里前端开发规范

    阿里编程规范 pdf_阿里前端开发规范阿里编程规范及阿里Java开发规约插件AlibabaJavaCodingGuidelines统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本。2017年年初,首次公开了《阿里巴巴Java开发手册》,自从第一个版本起,倍受业界关注。为了让开发者更加方便、快速的将规范推动并实行起来,阿里巴巴基于手册内容,研发了一套自动化的IDE检测插件(…

    2025年7月4日
    2
  • filezilla 教程_filezilla怎么登录

    filezilla 教程_filezilla怎么登录FileZilla是一种快速、可信赖的FTP客户端以及服务器端开放程式,具有多种特色、直接的接口。既然提到ftp客户端,那就不得不提iis7。IIS7服务器管理工具中的ftp功能可以实现批量添加服务

    2022年8月2日
    5
  • vue的render函数用法[通俗易懂]

    vue的render函数用法[通俗易懂]1.render简介前面我们的组件的模板都是在模板里写的(template),模板最后都会被vue编译成virtualdom(虚拟dom),在某些情况下模板可能不好用,例如需要实现一个动态的文章标题,根据父组件的level属性,动态的渲染成h1~hx标签,用模板写部分代码如下。<article-header:level=”1″>Helloworld</article-h…

    2025年6月15日
    2
  • 微型计算机课设电梯控制8255,东南大学吴健雄学微机课程设计电梯控制器.doc[通俗易懂]

    微型计算机课设电梯控制8255,东南大学吴健雄学微机课程设计电梯控制器.doc[通俗易懂]东南大学吴健雄学微机课程设计电梯控制器东南大学吴健雄学院《微机实验及课程设计》课程设计报告FBIWarning:汇编代码是好几届之前的一个学姐的只是修改了一下后完美运行是我自己写的不需要注明出处,就说是你写的专业:吴健雄学院实验室:计算机硬件实验室组别:同组人员:设计时间:2012年5月17日…

    2022年5月4日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号