[LabelImg][LabelMe]标注工具使用小结

数据是深度学习算法的关键,其中最常见的数据操作就是目标标注。通用数据集已经给出了标注结果,并且对数据本身进行了很好的分类和归纳,而在最近的工作中需要对原始数据进行有效整理并进行标注,小结遇到的问题,希望对之后的实践有帮助

标注工具

目前最常用的是以下两个标注工具:

  • LabelImg:支持正矩形标注,标注结果默认保存为PASCAL VOC格式的xml文件
  • LabelMe:支持多边形标注(默认),同时还支持正矩形、点、线、圆的标注,标注结果默认保存为json文件

Note 1:LabelImg会解析jpeg文件的exif元信息,导致图像自动旋转。此问题将在后面内容中提及

Note 2:LabelMe会将标注图像的数据保存在json文件中,字段为imageData。对于此数据的解析将在后面内容中提及

标注规范

刚开始和标注公司打交道,遇到了很多的问题,感觉自己还是太naive,把所有的条件都想像的太理想了,导致前期的数据处理阶段遇到了很多的小麻烦。小结一下请别人进行标注时需要注意的事项(默认标注的是正矩形框

  • 标注前:需要让标注公司清楚的地方
    1. 标注文件的编码格式:utf-8
    2. 标注图像的格式:不推荐使用Jpeg格式(后续会提及),最好使用Png格式(自己可以先进行图像格式转换,再交给标注公司)
    3. 标注的工具:LabelImg还是LabelMe
    4. 标注文件保存规范:和对应的标注图像保存在同一目录下即可
    5. 标注的内容:自己给出示例,写清楚标注目标和对应标签,写清楚标注目标的标注范围
  • 标注后:后处理需要注意的地方
    1. xmin/ymin/xmax/ymax:进行标框时,除了保存左上-右下的坐标外,还有可能保存的是左下-右上、右下- 左上、右上-左下的坐标,所以需要额外代码处理
    2. 标注框是否符合标准:对标注目标有范围要求,比如小目标标注不要超出大目标标注的范围,有可能会标错,需要额外代码判断
    3. 图像是否标注:实际上还会发生有些图像没有标注的情况

关于Jpeg格式图像

问题

在实践过程中发现有些jpeg图像会在LabelImg中自动翻转90

解析

在网上查过资料后发现是由于EXIF元数据的关系,参考Jpeg图片旋转和Exif方向

带方向传感器的数码相机允许自动旋转肖像图像。不幸的是,对此功能的支持并不普遍或一致地应用

尝试了多种方式打开图像,发现确实没有普遍支持

  • 支持
    1. LabelImg
    2. VSCode
  • 不支持
    1. Ubuntu 18.04自带图像查看工具
    2. OpenCV cv2.imread
    3. LabelMe

解决

参考:

vscode - Image using EXIF rotation does not display correctly #63727

LabelImg - Rotate image feature #198

可以使用工具exiftran解析该属性,或者直接使用OpenCVJPEG图像转换为PNG图像即可(这样所见即所得

坚持原创技术分享,您的支持将鼓励我继续创作!