linux下载/解压ImageNet-1k数据集

慈云数据 2024-03-13 技术支持 84 0

文章目录

    • 前言
    • 一、数据集下载
    • 二、解压
      • 1.训练集
      • 2.验证集
      • 总结

        前言

        本文在Linux中,处理对象为ILSVRC2012数据集(ImageNet-1k)

        linux下载/解压ImageNet-1k数据集
        (图片来源网络,侵删)

        一、数据集下载

        ImageNet官网链接

        在Linux上也可以直接用命令行进行下载:

        linux下载/解压ImageNet-1k数据集
        (图片来源网络,侵删)
        • 训练集(ILSVRC2012_img_train.tar):
          wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar --no-check-certificate
          
          1. 验证集(ILSVRC2012_img_val.tar):
          wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar --no-check-certificate
          
          1. 标签映射文件(ILSVRC2012_devkit_t12.tar.gz):
          wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz --no-check-certificate
          

          二、解压

          1.训练集

          执行命令进入该文件目录下:

          cd /home/data/imagenet
          

          执行命令,将训练集解压到文件夹 train 目录下:

          mkdir train && tar -xvf ILSVRC2012_img_train.tar -C train && for x in `ls train/*tar`; do fn=train/`basename $x .tar`; mkdir $fn; tar -xvf $x -C $fn; rm -f $fn.tar; done
          

          执行命令,进入 train 目录下:

          cd train
          

          执行命令,查看该目录下的文件夹数量,若解压成功,则返回1000:

          ls -lR|grep "^d"|wc -l
          

          执行命令,查看 train 目录下所有文件(图片)的数量,若解压成功,则返回1281167:

          ls -lR|grep "^-"|wc -l
          

          2.验证集

          执行命令,进入3个文件所在的根目录:

          cd /home/data/imagenet
          

          执行命令,创建解压验证集的文件夹:

          mkdir val
          

          执行命令,将验证集图像解压到 val 目录下:

          tar xvf ILSVRC2012_img_val.tar -C ./val
          

          此时 val 目录下是50000张图像,并没有被分类到1000个文件夹下。因此需要将验证集中的图像进行分类存放。

          执行命令,解压ILSVRC2012_devkit_t12.tar.gz这个文件:

          tar -xzf ILSVRC2012_devkit_t12.tar.gz
          

          该文件中记录着验证集中的图像名及其类别标签之间的映射关系。

          在 ‘/home/data/imagenet’ 目录下创建 Python 脚本,假设命名为“unzip.py”,其内容如下:

          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()
          

          回到imagenet下,执行该文件,进行验证集分类存放进1000个文件夹:

          cd /home/data/imagenet
          
          python unzip.py
          

          总结

          这样就成功啦!!

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon