在物体检测问题中,第一个需要解决的就是给训练集中的图片打标,所谓打标,就是用一个文件来描述图中物体的位置框坐标(xmin,ymin,xmax,ymax),以定位物体的位置。

一个比较好的打标工具是LabelImg (推荐用windows版本,安装比较方便,https://pan.baidu.com/s/1d27UMi )。编译好后只要要在图片上轻点鼠标就可以得到PASCAL VOC格式的XML文件(PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge,这种XML就是他们定义的一种图像标注文件的格式),再利用一个脚本就可以转换成Tensorflow需要的TFRecord格式了;有时候在Mac上打开jpeg图像会出现问题,需要将其转换为png来解决;




深度学习 如何给图像打标签 图像识别 打标签_AI



上图存在不规范的标注问题,猜猜是哪里?详见下文。


使用步骤

  1. 运行主程序.
  2. 点击 'Change save dir ' ,设置图像标记文件(XML)的默认存储位置
  3. 点击 'Open Dir',打开图片所在的目录
  4. 点击 'Create RectBox' ,用鼠标创建一个矩形框,框出你需要识别的物体
  5. 松开鼠标后,在弹出框中选择或新录入物体的类别名称。
  6. 点击Next Image或Save,工具会保存该标注信息到XML文件

深度学习 如何给图像打标签 图像识别 打标签_AI_02

你可以使用如下的快捷键来加速标注的过程:

快捷键

Ctrl + u

加载一个目录的所有图片文件,相当于Open Dir按钮

Ctrl + r

更改标注文件默认的存储位置,相当于Change Save Dir 按钮

Ctrl + s

保存当前标图片标注

Ctrl + d

将当前的矩形框复制一份

Space

标记当前图像标注信息为已核验,通常在多人协作时才会用到

w

创建一个矩形框,最为常用的按钮

d

下一张图片,最为常用

a

上一张图片

del

删除矩形框

Ctrl++

放大

Ctrl--

缩小

↑→↓←

移动矩形框

图像标注的原则


标注什么

预定义的所有类别的所有对象实例(就是说,如果图片里面有3只浣熊,就要分别标注3只浣熊), 除非:

  • 你拿不准那玩意儿是不是。
  • 对象非常非常的小(尺度自己拿捏)
  • 只能看见对象的不到 10-20%的部分 , 因此你拿不准那个到底是哪一类的,比如你只能看见一个轮胎,你不确定是卡车还是小轿车,这种就可以不用标注.

如果图片中的对象肉眼都难以识别,就丢掉这张图片

难以识别

difficult

若肉眼虽然可以大致识别,但确信度不是很高,则勾选difficult复选框,表示这个对象不是很好识别。

矩形框

用矩形框标注对象的可见区域, 不可见的区域不要标注. 非对象的区域不要标注

矩形框应该要且仅包括对象的所有可见的像素点, 除非为了包括很小一部分的对象部件,需要扩大很大一个矩形框面积,比如,小轿车的天线可以不用框进来,因为他太小了,且天线对于汽车来说无关紧要,并非主要特征。


上面的截图的标注就不是很规范,不要学他哟。

截断Truncated

如果对象超过 15-20% 的部分不在矩形框内,则将对象标记为Truncated. 这个标记意味着矩形框内没有包含完成的对象实例。这个属性在LabelImg中无法直接勾选,需要手工编辑XML文件里的对应标签。

遮挡Occlusion

如果矩形框内,对象有超过 5% 的部分被遮挡, 标记为 Occluded. 这个标记指示矩形框内的图像存在被遮挡的情况。这个属性在LabelImg中无法直接勾选,需要手工编辑XML文件里的对应标签。


 

衣服、雪、泥etc.

如果遮挡物是跟对象强相关的,则不用标记为遮挡,比如 人身上的衣服,应视为人的一部分。

透明

透过玻璃看到的对象也应该被标记, 但是若玻璃是有点反光的,则玻璃上的映像,应被标记为遮挡 occlusion.

镜子

镜子里的对象也应该被标记。

海报

图片里面的海报、杂志等上面的对象也应该被标记,除非是一些很浮夸的卡通画