ILSVRC2012_img_val数据集的使用
在之前使用Imagenet 2012的Validation数据集的时候,遇到了数据集图片和下载的标签文件不对应的问题,困扰了一段时间,后来终于解决了,在这里记录一下。
ILSVRC2012_img_val数据的正确姿势:
下载数据集和正确的
label:
-
下载数据集:
数据集地址:http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_val.tar
-
下载label文件:
label文件的地址:http://dl.caffe.berkeleyvision.org/caffe_ilsvrc12.tar.gz
解压数据集和label文件:
解压label文件,我们可以看到以下文件:
其中的val.txt即是ILSVRC2012_img_val对应的标签文件,其内容如下:
ILSVRC2012_val_00000001.JPEG 65
ILSVRC2012_val_00000002.JPEG 970
ILSVRC2012_val_00000003.JPEG 230
ILSVRC2012_val_00000004.JPEG 809
.....
其格式为左边是图片名称,右边是该图片对应的label id,例如我们以ILSVRC2012_val_00000001.JPEG为例,解释一下数据集和标签的对应关系:
其id为65 ,打开上图中的synsets.txt,其第66行(从0开始标,65代表第66个类别)n01751748即为该图的编号。
那么该图的名称是什么呢?打开上图中的synset_words.txt,依然找到第66行(或者直接搜索编号n01751748),我们可以看到该编号对应的名称为:
同理,ILSVRC2012_val_00000004如下所示:
其id为809,synset_words.txt的第810即为ILSVRC2012_val_00000004的编号和名称:
Imagenet数据集的两种标签:
上文提到的这种标签关系是caffe版本的标签,Imagenet还提供了一种原始的标签方式。
下载上面的标签文件并解压,我们在data 文件夹中可以看到ILSVRC2012_validation_ground_truth.txt,这也就是imagenet原始的label:
可以看到,第一个图片ILSVRC2012_val_00000001.JPEG的label是490,如何根据490的label获取对应的编号和名称呢?
使用ILSVRC2012_mapping.txt,在第490行获取ILSVRC2012_val_00000001.JPEG的编号为n01751748
在我调研的过程中,我还发现一些标签对图片ILSVRC2012_val_00000001.JPEG的标注是489,这种标签是从0号id开始标的。
遇到的坑:
在最开始,我使用的是imagenet原版的标签,ILSVRC2012_val_00000001.JPEG的标签为490。由于keras中的resnet等imagenet数据集上的模型,使用的是caffe版本的标签训练的,其对ILSVRC2012_val_00000001.JPEG的预测结果均为65,所以结果显示resnet pre-train model精度很低。
当我们使用标注数据进行evaluate模型时,要弄清楚这个模型是使用什么版本的标签进行标注的。
最后,推荐使用caffe版本的imagenet标签。
参考文章:https://www.cnblogs.com/zjutzz/p/6083201.html
上面提到的ILSVRC2012_mapping.txt等所有文件下载链接:https://download.youkuaiyun.com/download/tjuyanming/11232273