[机器学习与深度学习] - No.5 ILSVRC2012_img_val数据集的使用

ILSVRC2012_img_val数据集的使用

在之前使用Imagenet 2012的Validation数据集的时候,遇到了数据集图片和下载的标签文件不对应的问题,困扰了一段时间,后来终于解决了,在这里记录一下。

ILSVRC2012_img_val数据的正确姿势:

下载数据集和正确的label:

解压数据集和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.csdn.net/download/tjuyanming/11232273

发布了118 篇原创文章 · 获赞 140 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/tjuyanming/article/details/91354244