最近在做image caption的任务,因为有自己的数据集,因此需要自己创建字典、annotation等信息。而COCO官方针对coco image caption任务的数据集写了一个API接口(pycocotools包),因此如果想偷懒就老老实实按照coco image caption数据集的格式准备数据。否则自己写pycocotools接口,可能会出现各种各样的bug。因此我们应该首先看一下imgae caption的数据格式。
{
"info" : info, "images" : [image], "annotations" : [annotation], "licenses" : [license],
}
info{
"year" : int, "version" : str, "description" : str, "contributor" : str, "url" : str, "date_created" : datetime,
}
image{
"id" : int, "width" : int, "height" : int, "file_name" : str, "license" : int, "flickr_url" : str, "coco_url" : str, "date_captured" : datetime,
}
annotation{
"image_id":int ,"id":int ,"caption":"giraffe eating food from the top of the tree"
}
license{
"id" : int, "name" : str, "url" : str,
}
注:其中images、lincense和annotations是包含多个实例以dict形式存储的多个实例数组。
annotation其中的“image_id”字段与image中的“id”字段相对应,为图片的id。
虽然在annotations中是一条描述的存储,但是pycocotools工具会把具有相同"image_id"的图片组成一个,所以才会有常说的一张图像对应5句描述。
licenses和info字段对于caption任务没起作用,自己制作数据集的时候可以忽略,或者随便填充指定格式的值。
举个例子 image={}
image={"license": 5,
"file_name": "COCO_train2014_000000057870.jpg",
"coco_url": "http://mscoco.org/images/57870",
"height": 480,
"width": 640,
"date_captured": "2013-11-14 16:28:13",
"flickr_url": "http://farm4.staticflickr.com/3153/2970773875_164f0c0b83_z.jpg",
"id": 57870}
}
annotation={}
annotation={'image_id': 318556,
'id': 48,
'caption': 'giraffe eating food from the top of the tree'
}
按照这个格式只需要准备相应的数据即可,几十行代码足以。比起改写pycocotools,还是这个效率高!!!