ImageNet数据集用法

1. 数据下载

1.1 方法一:官网下载

ImageNet​www.image-net.org/

在官方网站注册账号,注册时最好使用教育邮箱(.edu )之后。按照流程申请,收到邮件之后可以就可以在 Download界面里下数据啦~
推荐下载12年的数据,因为比较经典。不如果你如果凑巧财力雄厚,也可以考虑最顶上那个ImageNet21k,它相比12年的数据大的离谱。

点进去之后,下载如下三个压缩包(图片分类任务用这三个足够了)

1.2 方法二


如果你觉得这么下不方便/网速太慢容易断,可以在这个网址自行找12年的版本下载(别全下了呀)

ImageNet 10 图像识别数据集 - 数据集下载 - 超神经​hyper.ai/datasets/4889


2. 数据解压

下载完毕后把 Development kit 留着备用,我们会得到训练集与验证集的两个压缩包,分别是 ILSVRC2012_img_train.tarILSVRC2012_img_val.tar

首先创建两个用于放训练集和测试集的文件夹,然后解压:

mkdir train
mkdir val
tar xvf ILSVRC2012_img_train.tar -C ./train
tar xvf ILSVRC2012_img_val.tar -C ./val

对于train的压缩包,解压之后其实还是1000个tar压缩包(对应1000个类别),需要再次解压,解压脚本unzip.sh如下(PS:可能需要自己改一下目录 dir ):

dir=./train 
for x in `ls $dir/*tar` do     
  filename=`basename $x .tar`     
  mkdir $dir/$filename     
  tar -xvf $x -C $dir/$filename 
done 
rm *.tar

执行脚本之后,我们就获得了1000个文件夹和对应的图片数据啦~截至目前,我们已经把所有的 JPEG 图片搞了出来。


3. 数据标签

对于训练集,不同类别的数据躺在不同的文件夹里,用起来很方便(同一文件夹的视为一类)。但是验证集没有对应的标签,需要额外处理。

验证集的标签在 Development kit (文件名为 ILSVRC2012_devkit_t12.tar.gz)中的ILSVRC2012_devkit_t12\data\ILSVRC2012_validation_ground_truth.txt 中:


但是新的问题又来了,那就是这个数字和文件夹的名字虽然是一一对应的,但还是需要额外的映射……好在映射关系储存在和txt文件同目录下的 meta.mat 文件中。我们希望验证集的文件结构长得和训练集一样,即 :

  • /val
    • /n01440764
      • images
    • /n01443537
      • images


因此,我们首先解压 devkit 压缩包,把我们需要的东西取出来:

tar -xzf ILSVRC2012_devkit_t12.tar.gz


之后,在imagenet目录(devkit和val的根目录下)创建并运行如下 python 脚本

from scipy import io
import os
import shutil

def move_valimg(val_dir='./val', devkit_dir='./ILSVRC2012_devkit_t12'):
    """
    move valimg to correspongding folders.
    val_id(start from 1) -> ILSVRC_ID(start from 1) -> WIND
    organize like:
    /val
       /n01440764
           images
       /n01443537
           images
        .....
    """
    # load synset, val ground truth and val images list
    synset = io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat'))
    
    ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt'))
    lines = ground_truth.readlines()
    labels = [int(line[:-1]) for line in lines]
    
    root, _, filenames = next(os.walk(val_dir))
    for filename in filenames:
        # val image name -> ILSVRC ID -> WIND
        val_id = int(filename.split('.')[0].split('_')[-1])
        ILSVRC_ID = labels[val_id-1]
        WIND = synset['synsets'][ILSVRC_ID-1][0][1][0]
        print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND))

        # move val images
        output_dir = os.path.join(root, WIND)
        if os.path.isdir(output_dir):
            pass
        else:
            os.mkdir(output_dir)
        shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))

if __name__ == '__main__':
    move_valimg()


4. 用Pytorch加载


使用 torchvision.datasets.ImageFolder() 就可以直接加载处理好的数据集啦!

import os
import torch
import torchvision.datasets as datasets

root = 'data/imagenet'
def get_imagenet(root, train = True, transform = None, target_transform = None):
    if train:
        root = os.path.join(root, 'train')
    else:
        root = os.path.join(root, 'val')
    return datasets.ImageFolder(root = root,
                               transform = transform,
                               target_transform = target_transform)
### Imagenet 数据集 下载、使用说明及格式 Imagenet 数据集是一个广泛应用于计算机视觉领域的基准数据集,尤其在图像分类任务中扮演着重要角色。以下是关于该数据集的下载、使用方法和数据结构的相关信息。 #### 1. 数据集概述 Imagenet 数据集包含超过 100 万张图像样本,涉及 1000 个不同的物体类别[^3]。每个类别都有成千上万的图片,这些类别基于 WordNet 结构组织,确保了类别的多样性和系统性。数据集分为训练集、验证集和测试集,分别用于模型的学习、评估和最终测试。 #### 2. 下载链接与注意事项 - 官方下载地址通常需要通过注册账户获取访问权限。 - ImageNet 数据集非常庞大(训练集约 150GB+),因此需要确保存储空间充足[^1]。 - 下载过程中建议使用稳定的网络连接以避免中断。 - 数据集受许可限制,仅限学术研究用途,商用前需获得授权[^1]。 #### 3. 数据结构 - **训练集**:文件名为 `ILSVRC2012_img_train.tar`,解压后会生成 1000 个子文件夹,每个文件夹对应一个类别,包含该类别的所有训练图像。 - **验证集**:文件名为 `ILSVRC2012_img_val.tar`,解压后为单个文件夹,包含所有验证图像。需要注意的是,验证集的标签需要从开发工具包中提取。 - **测试集**:文件名为 `ILSVRC2012_img_test.tar`,官方不公开测试集的标签,主要用于正式评测。 - **开发工具包**:文件名为 `ILSVRC2012_devkit_t12.tar`,包含评价标准和脚本,帮助开发者进行结果评估[^3]。 #### 4. 使用方法 - **数据预处理**:对于验证集,需要将图像按照类别重新组织,并从开发工具包中提取标签信息。 - **格式转换**:如果使用 Faster R-CNN 等目标检测框架,可能需要将 ImageNet 的标注格式转换为 Pascal VOC 格式[^2]。 - **训练模型**:可以使用深度学习框架(如 TensorFlow 或 PyTorch)加载数据集并训练模型。以下是一个简单的数据加载示例代码: ```python import torchvision from torchvision import datasets, transforms # 定义数据预处理操作 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) # 加载训练集 train_dataset = datasets.ImageFolder( root='/path/to/ILSVRC2012_img_train', transform=transform ) # 加载验证集 val_dataset = datasets.ImageFolder( root='/path/to/ILSVRC2012_img_val', transform=transform ) ``` #### 5. 注意事项 - 在使用 ImageNet 数据集时,请确保遵守相关许可协议。 - 如果仅需要部分类别进行实验,可以从训练集中筛选出对应的子集。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值