使用windows批量解压和布局ImageNet ISLVRC2012数据集

使用的系统是windows,找到的解压命令很多都linux系统中的,为了能在windows系统下使用,因此下载Git这个软件,在其中的Git Bash中使用以下命令,因为Git Bash集成了很多linux的命令,方便我们的使用。

ImageNet 中目前共有 14,197,122 幅图像,总共分为 21,841 个类别(synsets),通常我们所说的 ImageNet 数据集其实是指 ISLVRC2012 比赛用的子数据集,其中 train 有 1,281,167 张照片和标签,共 1000 类,大概每类 1300 张图片,val 有 50,000 副图像,每类 50 个数据,test 有 100,000 副图片,每类 100 个数据。

比赛分为三个场景:图像分类(CLS)、目标定位(LOC)和目标检测(DET)。CLS:2010-2014 比赛中独立任务,2015 年与 LOC 合并,使用 top5。LOC:从 2011 年开始,2015 年与 CLS 合并为 CLS-LOC,单目标定位任务的数据与 CLS 任务包含相同的照片,照片数据手动标注图像是否存在 1000 个物体类别之一的实例,每张图片包含一个 gt 标签,该类别的每个实例都标注了边界框 bounding box,比赛中 IoU>0.5。

1.数据集下载:(一个大佬的链接)

  • 训练集:ILSVRC2012_img_train.tar.gz,提取码:yoos;
  • 验证集:ILSVRC2012_img_val.tar.gz,提取码:yl8m;
  • 测试集:ILSVRC2012_img_test.tar.gz,提取码:jumt;
  • 任务 1&2 的 devkit:ILSVRC2012_devkit_t12.tar,提取码:dw6i;

2. 数据解压

我们会得到训练集与验证集的两个压缩包,分别是 ILSVRC2012_img_train.tar 和 ILSVRC2012_img_val.tar

数据集布局要求是:

/path/to/imagenet/
  train/
    class1/
      img1.jpeg
    class2/
      img2.jpeg
  val/
    class1/
      img3.jpeg
    class2/
      img4.jpeg

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

(1)解压训练集

右键对训练集选择Git Bash Here

三行命令逐行输入进Git Bash Here窗口中:

mkdir train && mv ILSVRC2012_img_train.tar train/ && cd train
tar -xvf ILSVRC2012_img_train.tar && rm -f ILSVRC2012_img_train.tar
find . -name "*.tar" | while read NAME ; do mkdir -p "${NAME%.tar}"; tar -xvf "${NAME}" -C "${NAME%.tar}"; rm -f "${NAME}"; done
cd ..

结果如下:

(2)解压测试集
wget https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh

mkdir val && tar -xvf ILSVRC2012_img_val.tar -C val && mv valprep.sh val && cd val && bash valprep.sh

下载的valprep.sh文件在外网(valprep.sh文件中保存的就是图片按类生成文件夹的布局),或者可以直接迅雷链接,将下载后的文件放入和验证集压缩包同一文件夹下,这样直接在Git Bash Here窗口使用第二个命令就可以完成解压。(也是一个大佬的链接)

链接:https://pan.xunlei.com/s/VMkus56ePQ4LMJUIXheBkhXSA1 提取码:k9ej
或者利用python解压测试集:

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

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

在映射关系储存在和txt文件同目录下的 meta.mat 文件中。我们希望验证集的文件结构长得和训练集一样,即 :

/val
/n01440764
images
/n01443537
images

解压完压缩包后:新建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()

3. 预处理Crop & Resize

数据集在扔给网络模型做训练前还需要统一尺寸处理,一方面是 CNN 需要统一尺寸的输入,另一方面是可以有数据增强的效果。一般来说有 crop 和 resize 两个过程。

其中 crop 的方法有 single crop 和 multiple crops 两种:

  • single crop:先将图像 resize 到某个尺度,例如:256 x N(短边为256),然后 centercrop 成 224x224 作为模型的输入;
  • multiple crops 的具体形式有多种,可自行指定,比如:1)10 crops:取(左上,左下,右上,右下,正中)以及它们的水平翻转,这 10 个 crops 作为 CNN 输入,最终取平均预测结果;2)144 crops:首先将图像 resize 到 4 个尺度:256xN,320xN,384xN,480xN,然后每个尺度上去取“最左”,“正中”,“最右”这 3 个位置的正方形区域,对每个正方形区域,取上述的 10 个 224x224 的 crops,则得到 4x3x10=120 个 crops,再对上述正方形区域直接 resize 到 224x224,以及做水平翻转,则又得到 4x3x2=24 个 crops,总共加起来就是 144 个 crops,输入到网络最后取平均预测结果

4.  用Pytorch加载

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

  • 
    def load_ImageNet(ImageNet_PATH, batch_size=64, workers=3, pin_memory=True): 
        
        traindir = os.path.join(ImageNet_PATH, 'ILSVRC2012_img_train')
        valdir   = os.path.join(ImageNet_PATH, 'ILSVRC2012_img_val')
        print('traindir = ',traindir)
        print('valdir = ',valdir)
        
        normalizer = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                         std=[0.229, 0.224, 0.225])
    
        train_dataset = datasets.ImageFolder(
            traindir,
            transforms.Compose([
                transforms.RandomResizedCrop(224),
                transforms.RandomHorizontalFlip(),
                transforms.ToTensor(),
                normalizer
            ])
        )
    
        val_dataset = datasets.ImageFolder(
            valdir,
            transforms.Compose([
                transforms.Resize(256),
                transforms.CenterCrop(224),
                transforms.ToTensor(),
                normalizer
            ])
        )
        print('train_dataset = ',len(train_dataset))
        print('val_dataset   = ',len(val_dataset))
        
        train_loader = torch.utils.data.DataLoader(
            train_dataset,
            batch_size=batch_size,
            shuffle=True,
            num_workers=workers,
            pin_memory=pin_memory,
            sampler=None
        )
        val_loader = torch.utils.data.DataLoader(
            val_dataset,
            batch_size=batch_size,
            shuffle=False,
            num_workers=workers,
            pin_memory=pin_memory
        )
        return train_loader, val_loader, train_dataset, val_dataset
    
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/803555.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python: 一些python和Java不同的基础语法

文章目录 1. 数据类型2. 字符串的引用3. 字符串拼接4. Python中的报错5. Python中的输入语句(input)6. 运算符(**和//)7. 除法运算8. 注释方法: #或者三引号9. Python中的比较10. Java中用and, or, not代替逻辑运算符11. 多元赋值12. Python不支持自增自减操作13. 在Python中, …

jenkins 使用教程

1. 安装最新长期稳定版 2.426.1 Redhat Jenkins Packages sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key yum insta…

Oracle线上执行SQL特别慢的原因分析

一、背景: 线上反馈一张表select * from table where idxxx语句执行特别慢,超过60s超时不能处理,第一直觉是索引失效了,开始执行创建索引语句create index index_name on table() online。但是执行了超过20分钟索引还没有创建成功…

python课设——宾馆管理系统

python课设——宾馆管理系统 数据库课设-宾馆管理系统-python3.7pyqt5 简介 大二数据库课程设计(3-4天工作量)的项目,登录界面的ui设计参考了他人成果,其余ui以及所有后端部分全部独立完成,详细功能见功能模块图使用…

简单实现一个本地ChatGPT web服务(langchain框架)

简单实现一个本地ChatGPT 服务,用到langchain框架,fastapi,并且本地安装了ollama。 依赖安装: pip install langchain pip install langchain_community pip install langchain-cli # langchain v0.2 2024年5月最新版本 pip install bs4 pi…

Unity | Shader基础知识(第十八集:Stencil应用-透视立方盒子)

目录 一、前言 二、场景布置 三、 shader部分 1.图片的部分 2.图片部分纯净代码 3.遮罩部分复习 4.深度写入 ZWrite 5.颜色遮罩ColorMask 6.遮罩纯净代码 四、场景中shader使用 五、作者的碎碎念 一、前言 因为这个内容稍微有点多,我尽力讲清楚了&#x…

速部署 HBase 测试环境

快速部署 HBase 测试环境 第一步:下载软件,在HBase官网下载最新版, 找到 bin,点击下载,比如我这里下载的是 hbase-2.5.6-bin.tar.gz 第二步:解压软件 $ tar -zxvf hbase-2.5.6-bin.tar.gz $ cd hbase-2.…

业务终端动态分配IP-DHCP技术、DHCP中继技术

一、为什么需要DHCP? 1、许多设备(主机、无线WiFi终端等)需要动态地址的分配; 2、人工手工配置任务繁琐、容易出错,比如:IP地址冲突; 3、网络规模扩大、复杂度提高,网络配置越来越复杂,计算机的位置变化和数量超过可分配IP地址的数量,造成IP地址变法频繁以及IP地址…

微信小游戏 彩色试管 倒水游戏 逻辑 (四)

最近开始研究微信小游戏,有兴趣的 可以关注一下 公众号, 记录一些心路历程和源代码。 定义了一个名为 WaterFlow class,该类继承自 cc.Graphics,用于在 Cocos Creator 中创建和显示水流的动画效果。下面是对代码的详细解释&#x…

FPGA FIR fdatool filter designer MATLAB

位数问题 fdatool 先确定输入信号的位宽,比如17位在fdatool中,选set quantization parameters 选input/output 设置input word length 为17bit(not confirmed) fir compiler implementation 注意: 当设置输入位宽为16位时,ip核…

智能手术新时代:Apple Vision Pro在医疗领域的突破性应用

无人驾驶的未来:AI如何重塑我们的出行世界-CSDN博客文章浏览阅读2.2k次,点赞109次,收藏64次。无人驾驶汽车的发展是AI技术应用的一次伟大尝试。特斯拉与百度“萝卜快跑”在这个领域的竞争与合作,不仅展示了AI技术的强大潜力&#…

记录些MySQL题集(6)

MySQL 单表为什么不要超过 2000W 行? 数据持久化在磁盘中,磁盘的最小单元是扇区,一个扇区 0.5 KB,而由 8 个扇区可以构成一个文件系统块(4K),以 InnoDB 存储引擎为例,一个数据页的大…

React Native 自定义 Hook 获取组件位置和大小

在 React Native 中自定义 Hook useLayout 获取 View、Pressable 等组件的位置和大小的信息 import {useState, useCallback} from react import {LayoutChangeEvent, LayoutRectangle} from react-nativeexport function useLayout() {const [layout, setLayout] useState&l…

MySQL数据库查询索引失效场景

在连表情况下,如果排序字段涉及到了两个表,排序字段将无法走索引. 加上第二个排序字段之后,走全表扫描了. 或者尽量让两次排序都用同一个表的字段,这样可以建联合索引让排序也能走索引.(不想建联合索引的话,可以第二次排序用表id,这样单个的…

《昇思25天学习打卡营第25天|第10天》

今天是打卡的第十天,今天开始学应用实践中的LLM原理和实践,今天学的是基于MindSpore实现BERT对话情绪识别。最先了解的是BERT模型的简介(来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Transformers&…

暑期-大数据人工智能学习-在线实习项目

这个暑期 默默努力一把 悄悄惊艳所有人 在线企业项目试岗实训 助你突破固有思维模式,伴你进阶成长

Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关

目录 开始 Prometheus 数据类型 简单理解 时序样本 格式 和 命名要求 Metrics 指标类型 Counter 计数器 Gauge Histogram Summary Exporter 相关 概述 Exporter 类型 Exporter 规范 开始 Prometheus 数据类型 简单理解 a)安装好 Prometheus 后会暴露…

Nginx、LNMP万字详解

目录 Nginx 特点 Nginx安装 添加Nginx服务 Nginx配置文件 全局配置 HTTP配置 状态统计页面 Nginx访问控制 授权用户 授权IP 虚拟主机 基于域名 测试 基于IP 测试 基于端口 测试 LNAMP 解析方式 LNMP转发php-fpm解析 Nginx代理LAMP解析 LNMP部署示例 实…

Android:将自定义视图设为互动式

一、简介 点击查看将自定义视图设为互动式官网文档 绘制界面只是创建自定义视图的一个部分。您还需要让视图以非常类似于您模仿的真实操作的方式响应用户输入。 让应用中的对象的行为方式与真实对象相似。例如,不要让应用中的图片消失后重新出现在其他位置&#x…

模块化和包管理工具

一,模块化 1.定义 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用 2.模块化…