在物体检测问题中,第一个需要解决的就是给训练集中的图片打标,所谓打标,就是用一个文件来描述图中物体的位置框坐标(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来解决;
使用步骤
- 运行主程序.
- 点击 'Change save dir ' ,设置图像标记文件(XML)的默认存储位置
- 点击 'Open Dir',打开图片所在的目录
- 点击 'Create RectBox' ,用鼠标创建一个矩形框,框出你需要识别的物体
- 松开鼠标后,在弹出框中选择或新录入物体的类别名称。
- 点击Next Image或Save,工具会保存该标注信息到XML文件
你可以使用如下的快捷键来加速标注的过程:
快捷键
Ctrl + u | 加载一个目录的所有图片文件,相当于Open Dir按钮 |
Ctrl + r | 更改标注文件默认的存储位置,相当于Change Save Dir 按钮 |
Ctrl + s | 保存当前标图片标注 |
Ctrl + d | 将当前的矩形框复制一份 |
Space | 标记当前图像标注信息为已核验,通常在多人协作时才会用到 |
w | 创建一个矩形框,最为常用的按钮 |
d | 下一张图片,最为常用 |
a | 上一张图片 |
del | 删除矩形框 |
Ctrl++ | 放大 |
Ctrl-- | 缩小 |
↑→↓← | 移动矩形框 |
标注什么 |
预定义的所有类别的所有对象实例(就是说,如果图片里面有3只浣熊,就要分别标注3只浣熊), 除非:
如果图片中的对象肉眼都难以识别,就丢掉这张图片 |
难以识别 difficult |
若肉眼虽然可以大致识别,但确信度不是很高,则勾选difficult复选框,表示这个对象不是很好识别。 |
矩形框 |
用矩形框标注对象的可见区域, 不可见的区域不要标注. 非对象的区域不要标注 矩形框应该要且仅包括对象的所有可见的像素点, 除非为了包括很小一部分的对象部件,需要扩大很大一个矩形框面积,比如,小轿车的天线可以不用框进来,因为他太小了,且天线对于汽车来说无关紧要,并非主要特征。 上面的截图的标注就不是很规范,不要学他哟。 |
截断Truncated |
如果对象超过 15-20% 的部分不在矩形框内,则将对象标记为Truncated. 这个标记意味着矩形框内没有包含完成的对象实例。这个属性在LabelImg中无法直接勾选,需要手工编辑XML文件里的对应标签。 |
遮挡Occlusion |
如果矩形框内,对象有超过 5% 的部分被遮挡, 标记为 Occluded. 这个标记指示矩形框内的图像存在被遮挡的情况。这个属性在LabelImg中无法直接勾选,需要手工编辑XML文件里的对应标签。 |
衣服、雪、泥etc. |
如果遮挡物是跟对象强相关的,则不用标记为遮挡,比如 人身上的衣服,应视为人的一部分。 |
透明 |
透过玻璃看到的对象也应该被标记, 但是若玻璃是有点反光的,则玻璃上的映像,应被标记为遮挡 occlusion. |
镜子 |
镜子里的对象也应该被标记。 |
海报 |
图片里面的海报、杂志等上面的对象也应该被标记,除非是一些很浮夸的卡通画 |