在物体检测问题中,第一个需要解决的就是给训练集中的图片打标,所谓打标,就是用一个文件来描述图中物体的位置框坐标(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来解决;
上图存在不规范的标注问题,猜猜是哪里?详见下文。
你可以使用如下的快捷键来加速标注的过程:
图像标注的原则
标注什么
预定义的所有类别的所有对象实例(就是说,如果图片里面有3只浣熊,就要分别标注3只浣熊), 除非:
你拿不准那玩意儿是不是。对象非常非常的小(尺度自己拿捏)只能看见对象的不到 10-20%的部分 , 因此你拿不准那个到底是哪一类的,比如你只能看见一个轮胎,你不确定是卡车还是小轿车,这种就可以不用标注.如果图片中的对象肉眼都难以识别,就丢掉这张图片
难以识别
difficult
若肉眼虽然可以大致识别,但确信度不是很高,则勾选difficult复选框,表示这个对象不是很好识别。
矩形框
用矩形框标注对象的可见区域, 不可见的区域不要标注. 非对象的区域不要标注
矩形框应该要且仅包括对象的所有可见的像素点, 除非为了包括很小一部分的对象部件,需要扩大很大一个矩形框面积,比如,小轿车的天线可以不用框进来,因为他太小了,且天线对于汽车来说无关紧要,并非主要特征。
上面的截图的标注就不是很规范,不要学他哟。
截断Truncated
如果对象超过 15-20% 的部分不在矩形框内,则将对象标记为Truncated. 这个标记意味着矩形框内没有包含完成的对象实例。这个属性在LabelImg中无法直接勾选,需要手工编辑XML文件里的对应标签。
遮挡Occlusion
如果矩形框内,对象有超过 5% 的部分被遮挡, 标记为 Occluded. 这个标记指示矩形框内的图像存在被遮挡的情况。这个属性在LabelImg中无法直接勾选,需要手工编辑XML文件里的对应标签。
衣服、雪、泥etc.
如果遮挡物是跟对象强相关的,则不用标记为遮挡,比如 人身上的衣服,应视为人的一部分。
透明
透过玻璃看到的对象也应该被标记, 但是若玻璃是有点反光的,则玻璃上的映像,应被标记为遮挡 occlusion.
镜子
镜子里的对象也应该被标记。
海报
图片里面的海报、杂志等上面的对象也应该被标记,除非是一些很浮夸的卡通画