ImageNet使用方法(细节)自用!

news2024/9/29 19:25:56

学习记录,自用。

1. 下载数据集

点击以下链接下载种子文件,然后使用迅雷进行下载,仅下载勾选的文件即可。

https://hyper.ai/datasets/4889/c107755f6de25ba43c190f37dd0168dbd1c0877e

2. 解压 

找到下载好的ILSVRC2012_img_train.tar 和 ILSVRC2012_img_val.tar

创建两个用于放训练集和测试集的文件夹⬇️

mkdir train
mkdir val

解压文件⬇️

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

ILSVRC2012_img_train.tar解压后为1000个tar压缩包,对应1000类别,需要再次解压,

解压脚本(先创建txt文件,粘贴下面代码,最后保存为.sh文件)⬇️

#!/bin/bash

# 遍历所有以.tar结尾的文件,进行解压
for x in *.tar
do
    # 获取文件名(不包括.tar后缀)
    filename=$(basename "$x" .tar)
    
    # 创建目录并解压文件
    mkdir "$filename"
    tar -xvf "$x" -C "$filename"
done

# 删除原来的tar文件
rm *.tar

执行脚本之后,就获得了1000个文件夹(每个文件夹对应一种类别)。

目前,已经把所有的 JPEG 图片搞了出来。

3.数据标签

对于训练集,同一类别的数据在同一文件夹下;

验证集没有标签,需要进行处理,下面的步骤都是对验证集标签的处理。

验证集的标签在 Development kit(ILSVRC2012_devkit_t12.tar.gz),

解压ILSVRC2012_devkit_t12.tar.gz⬇️

tar -xvf ILSVRC2012_devkit_t12.tar.gz

解压后得到ILSVRC2012_devkit_t12文件夹,在ILSVRC2012_devkit_t12\data\ILSVRC2012_validation_ground_truth.txt找到验证集对应的标签。

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

from scipy import io
import os
import shutil

def move_valimg(val_dir='./ILSVRC2012_img_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()

如果在运行脚本的时候报错,大概率是ILSVRC2012_img_val有非jpeg文件,将其移出即可;

我这里有两个其他文件,使用迅雷下载时产生的额外文件,我执行了一下命令将其移出。

mv .5d6d0df7ed81efd49ca99ea4737e0ae5e3a5f2e5.torrent ..
mv .5D6D0DF7ED81EFD49CA99EA4737E0AE5E3A5F2E5.js ..

如何还有其他报错,可以自行调试代码。

4.数据加载

使用 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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动端布局rem与vw的区别

目录 1. rem 2. rem的弊端与优点 3. rem布局前注意点 4. vw 5. vw单位和%单位对比 6. vw布局前注意点 7. vue项目中使用vw 1. rem 先简单说下rem,官当文档是这样说的: rem是css中的长度单位,1rem 根元素html的font-size值。当页面…

【笔试强训选择题】Day6.习题(错题)解析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、Day6习题(错题)解析 二、Day6习题(原题)练习 总结 前言 一、Day6习题(错题)解析…

chatgpt智能提效职场办公--ppt怎么做

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 导入PPT有 1.通过菜单导入 打开PowerPoint 找到菜单栏中的 点击"插入" 总结 最后的最后 以上是chatgpt能力的冰山一角。…

<Linux> 常用指令

文章目录ls 指令pwd命令cd 指令touch指令mkdir指令(重要):rmdir指令 && rm 指令man指令cp指令mv指令cat指令more指令less指令(重要)head指令tail指令date指令Cal指令find指令: -namegrep指令zip/un…

Springboot —— 根据docx填充生成word文件,并导出pdf

文章目录前言将docx模板填充数据生成doc文件1、依赖引入2、doc文件转换docx,并标注别名3、编写java代码实现数据填充docx文件填充数据导出pdf(web)1、依赖引入2、字体文件3、编写工具类4、编写测试接口请求测试参考资料前言 在项目中碰见一个需求,需要将…

[4] 实现无头单向非循环链表

目录 一、框架 二、实现各个方法 三、测试各个方法 四、源码 一、框架 一个单向链表的节点,有数值域和下一个节点的地址 我们可以设计一个链表类,在这个链表类设计一个节点内部类,这里设计成内部类的形式,因为链表是由节点组…

《论文阅读》SetGNER:General Named Entity Recognition as Entity Set Generation

0.总结 不知道是不是大模型的流行还是什么其他原因,导致现在网上都没有人来分享NER模型的相关论文了~本文方法简单,代码应该也比较简单(但是没见作者放出来)。推荐指数:★★☆☆☆ 1. 动机 处理三种不同场景的NER 与…

python笔记:datetime

处理日期和时间 1 常量 MINYEAR datetime允许的最小年份 MAXYEAR datetime允许的最大年份 2 数据类型 datetime.date带有属性year,month,daydatetime.time带有属性hour,minute,second,microsecond,tzinfodatetime.datetime带有属性year,month,day,hour,minute,second,m…

【网络安全】文件包含漏洞

文件包含漏洞文件包含漏洞原理文件包含漏洞经常出现的函数尝试查看etc/passwd敏感文件渗透过程上传phpinfo和webshell到服务器并使用工具连接其他方式包含日志文件getshell包含环境变量getshell文件包含漏洞原理 文件包含漏洞是指,程序开发人员一般会把重复使用的函…

【C语言学习4——整型数据类型】

C语言学习4——整型数据类型整型数据类型用sizeof关键词来测量大小三位二进制表示的数值范围数值的补码表示法各种整型类型的数值范围是多少无符号整型整型数据类型 在上一节当中,我们遇到了用int关键词(整数integer的缩写)来表示一个整数的…

Python Qt5 入门教程

Python Qt5 入门教程 Python Qt5是一个强大的GUI工具包,可以用来设计各种桌面应用程序,包括图形用户界面、数据库应用程序等。本教程将带你入门Python Qt5,从安装开始到图形界面的设计以及常见的控件和事件。 安装 Python Qt5需要使用PyQt5…

好用的便签APP排行榜前十名?

我是一名时间管理与自律达人,而便签应用程序就是必备与理想的时间管理工具。经过自己长期的总结认为好用的电脑手机云便签APP应用程序应该具备以下功能。 1、多设备同步:可以方便地将电脑和手机之间的数据同步,随时随地管理便签内容。 2、分…

海思部署分类模型

1、原始模型 onnx转caffe报错没有globalaverage层。 于是转化成: onnx转化caffe之后,修改prototxt文件,加上globalaverage和reshape层. 参考:https://blog.csdn.net/z649431508/article/details/113425275 layer { name: “Glob…

PPO算法-理论篇

1. Policy Gradient 【李宏毅深度强化学习笔记】1、策略梯度方法(Policy Gradient) 李宏毅深度强化学习-B站 2. PPO PPO 算法 PPO算法更新过程如下: 初始化policy参数θ0\theta^0θ0在每一步迭代中: 使用θk\theta^kθk与环境…

架构师:不想当架构师的程序员不是好程序员

引言 不想当将军的士兵不是好士兵。 很多程序员的梦想,就是将来能成为一名架构师。 包括我刚学编程那时候,也是以当架构师为目标,觉得不想当架构师的程序员不是好程序员,希望将来能成为一个优秀的架构师。就像拿破仑那句名言&am…

进程调度算法(操作系统)

1、 前置知识 1.1 非抢占式与抢占式 1.1.1 非抢占式 非抢占式指的是一个线程的在执行期间,另一个线程的到达,尽管各项标准都优于执行线程(例如优先级高于当前执行线程),也不会抢占CPU资源,会耐心的等待该…

【matlab程序】海图坐标轴单位的唯一

【matlab程序】海图坐标轴单位的唯一 【matlab程序】海图坐标轴单位的唯一 本文写作来源,从实际出发,用于实际: 热带海洋学报,投稿须知: 其中一条关于海图制作规范中: 经度标识(E, W&#…

真题详解(0/1背包)-软件设计(四十九)

真题详解(线性表)-软件设计(四十八)https://blog.csdn.net/ke1ying/article/details/130119249 多态有四种类型: 参数多态:应用比较广泛的多态,称为最纯多态。 包含多态:最常见的就是子类型化。 过载多态&#xff1…

Nfinity: YouTube创作者如何通过SocialFi变现

Nfinity推出了一个具有革命性的SocialFi平台:该平台通过生成NFT来帮助YouTube创作者实现内容变现。 YouTube做为全球第一大视频内容平台,尽管通过付费会员和广告收入的分成,为创作者们提供了大量的盈利机会,但它也存在很多的局限性…

【MybatisPlus快速入门】—— 基础入门

入门篇 我们先简单回顾一下 Mybatis 的用法,再引出MybatisPlus 1.1 Mybatis 框架回顾 🌔 1、什么是Mybatis框架呢? 一个持久层框架,目的是简化持久层的开发我们就使用springboot整合Mybatis,实现Mybatis框架的搭建…