用python将MSCOCO和Caltech行人检测数据集转化成VOC格式
代码:转换用的代码放在这里
之前用Tensorflow提供的object detection API可以很方便的进行fine-tuning实现所需的特定物体检测模型(看这里)。那么现在的主要问题就是数据集了,目前公开的数据集已经有很多了,比如综合的有MSCOCO, ImageNet;人脸的有LFW,CASIA,CelebV等;行人检测的有Caltech,KITTI等;姿势检测的VGG,还有其他等等(具体按分类可以参考下这个)。总之这个数据集资源的总结有很多,在google或者github上搜下有一大堆,这里就不具体介绍了。
1. COCO数据集
这里用到的数据集是object instance/keypoints数据集,用于之后的物体检测和姿势检测,可以在这里进行下载,也可以用git上coco项目提供的api。
一开始的做法是下载train2014和val2014图片数据集,然后根据instance/keypoints annotation (json)文件根据图片名从中匹配出所需的图片。不过后来发现annotation中的链接不一定能在下载的数据集里面找到,需要自行下载,所以最后的做法是直接从annotation文件中提取图片名跟下载链接然后下载进行匹配。coco比Imagenet好的一点是除了图片flickr链接之外还提供了coco源的链接(比如:http://mscoco.org/images/472),前者在开几个线程爬取图片的时候很可能会被封,后者就随意多了,爬取速度可以很快。
使用:
MSCOCO数据集的注释说明很清楚,转换脚本很容易写。用上面的库里的anno_json_image_urls.py
从annotation文件获取图片链接,然后用download_coco_images.py
下载图片以及anno_coco2voc.py
生产voc格式的xml注释文件。
2. Caltech pedestrian数据集
这个数据集提供的图片文件存在seq中,注释文件是vbb(是这群dalao用matlab写的),开始还以为需要用matlab进行处理了,不过后来发现用scipy.io.loadmat
函数可以读取vbb文件,用opencv的cv2.VideoCapture()
可以读取seq,那么就可以直接用python来转换而非matlab。当然如果对matlab很熟的话,可以直接用官方提供的toolbox。
不过这个数据集的annotation文件的说明文档我好像没有找到,所以vbb文件的数据格式并不是很清楚,通过直接加载以后查看能够知道里面提供了一大堆字段比如id(类型:person,people, person-far这种),pos(位置,就是我们需要的),occl(是否遮挡,可能有用),lock, posv(这两个不太清楚是啥也没怎么查到,有人查到可以留言下哈)。
使用:
用上面库里的vbb2voc
脚本可以将下载的seq和vbb文件转换成jpg和xml文件(不过这个数据集的下载有点麻烦,可能需要FQ)。