当前位置: 首页 > news >正文

详解ImageNet著名子数据集ILSVRC2012基于Python的下载、解析及可视化

目录

  • ImageNet简介
  • WordNet简介
  • ILSVRC2012简介
  • ILSVRC2012下载
  • ILSVRC2012评价指标
  • ILSVRC2012开发套件DevelopmentKit
  • 获取Synset的标签描述
  • Python读取及可视化
    • PyTorch读取API
    • 基于PyTorch的API接口加载及可视化
    • 自定义读取接可视化Python脚本
  • 参考文献

摘要:本篇文档详细介绍了人工智能(artificial intelligence,AI)及计算机视觉(computer vision,CV)领域非常著名的基准数据集ImageNet,以及与ImageNet相关的WordNet、ImageNet大规模视觉识别挑战赛(ImageNet large scale visual recognition challenge,ILSVRC)等重要信息。最后,以ImageNet非常重要的一个子数据集ILSVRC2012作为切入点,介绍了如何下载该子数据集,以及基于Python编程语言的分析和可视化。

关键词:ImageNet;ILSVRC2012;计算机视觉;Python

在这里插入图片描述

⚠️警告:后续内容较多,阅读需要~20min!🌺🌺🌺


ILSVRC2012的训练集、验证集及测试集可视化结果:

在这里插入图片描述


ImageNet简介

ImageNet是一个大规模的视觉图像数据集,不是一个神经网络模型。相似的还有WordNet,是一个大型的英语词汇数据库,也不是一个神经网络模型。ImageNet广泛应用于计算机视觉领域,尤其是深度学习和图像识别的研究。它由斯坦福大学(Standford University)的李飞飞教授及其团队基于WordNet层次结构创建并维护,最初发布于2009年。目前,ImageNet包含1400万多张图像,涵盖了超过20000个类别。ImageNet可以免费提供给研究人员用于非商业的研究和教育。

ImageNet最常用的子集是2012-2017年用于Image Large Scale Visual Recognition Challenge(ILSVRC)的图像分类(classification)和定位(localization)数据集。该子数据集涵盖了1000个对象类别,包含1281167(一百二八万多)张训练图像、50000(五万)张验证图像和100000(十万)张测试图像

WordNet简介

WordNet是一个大型的英语词汇数据库,主要用于自然语言处理(natural language processing,NLP)和计算语言学领域,于1980年代末普林斯顿大学(Princeton University)的心理学家乔治·A·米勒(George A. Miller)及其团队发起。他们希望能够构建起一个反应人类思维的词汇组织方式的数据库,以促进语言学和认知科学的研究。传统的按照字母表顺序编排的单词库在计算机应用中并不直观,米勒表示单词之间语义关系(如同义词synonyms、反义词antonyms和上下位词hyponyms等)才是李姐词义的关键,因此他们够想了一种基于语义关系而非字母关系的词汇数据库,即WordNet的最初构想。

1985年,米勒他们基于心理学中的语义网络理论,组织了词汇之间的语义关系,并发布了WordNet的第一个版本,最初知识一个小规模的英语词汇数据库。1990年代初,WordNet被逐渐扩充。1995年,发布了WordNet的1.5版本,大约涵盖了11万个词汇相和7.6万个同义词集。2000年代,在欧盟EuroWordNet项目的资助下,WordNet构建了多个欧洲语言的词汇网络。那时至今,WordNet不断发展,增加了更多的现代词汇、哩语和专业术语。WordNet 3.1版本中涵盖了15.5万多个词汇和11.8万多个同义词集。

WordNet被广泛应用到各种NLP工具和平台中,例如Word2Vec、Globe、BERT等模型,以及机器翻译、多语言处理、认知科学核心语言学等方面,进而帮助提高词汇表示和语义理解能力

ILSVRC2012简介

ILSVRC2012有三个比赛任务:任务1:图像分类;任务2:目标检测;任务3:细粒度分类,如下图所示,具体说明如下:

  • 任务1:图像分类(classification)
    预测一个类别标签。1000个类别、训练集中每个类别有1.2K张图片。
  • 任务2:目标检测(detection:classification + localization)
    预测一个类别标签 + bounding box信息。1000个类别、训练集中每个类别有1.2K张图片。
  • 任务3:细粒度分类
    相关的图片在任务2的基础上,将狗进一步细分为20个亚类
    预测一个类别标签 + bounding box信息。120个狗的亚类别标签、每个类别大概200张图片。

在这里插入图片描述

ILSVRC2012下载

包括ILSVRC2012在内的ImageNet数据集可以从其官方网站下载。下载ImageNet数据集需要注册一个账号,并申请使用权限。研究人员需要填写相关的研究信息和机构信息,并同意使用条款。一旦获得批准,可以登录到ImageNet网站,选择需要下载的子集,例如:ILSVRC2012。由于数据集非常庞大,建议使用支持断点续传的下载工具(如 wget、curl或迅雷等)来下载数据。下载完成后,数据通常是压缩格式(如 .tar 或 .zip),用户需要解压缩并组织数据。训练数据、验证数据和测试数据通常分别存放在不同的文件夹中。

注意:

  1. ImageNet数据集仅用于非商业研究用途,下载时需要同意其许可协议。
  2. ILSVRC数据集非常庞大(几十GB),需要足够的存储空间和带宽来下载和存储数据。
  3. 图像数据通常以JPEG格式存储,分类标签和标注文件通常以文本格式提供。

大体上下载ImageNet数据集需要完成以下几步:

  1. 使用机构邮箱(一般要求是edu结尾或者edu.c结尾的校园邮箱)注册ImageNet账号,并登录;
  2. 申请下载权限:申请时ImageNet会发送一个Email到你的机构邮箱,需要通过该邮件提供的链接再次进入ImageNet,并同意使用条例方可进行下载。

ILSVRC2012数据集下载官方链接:https://image-net.org/challenges/LSVRC/2012/2012-downloads.php🚀🚀🚀需要登录!!!

截止2024年9月ILSVRC2012提供的下载资源包括:Development Kit、Images和Bounding Boxes,具体如下:

  • Development Kit:

    • Development kit (Task 1 & 2):2.5MB.
    • Development kit (Task 3):22MB.
  • Images:

    • Training images (Task 1 & 2):138GB.
    • Training images (Task 3):728MB.
    • Validation images (all tasks):6.3GB.
    • Test images (all tasks):13GB.
  • Bounding Boxes:

    • Training bounding box annotations (Task 1 & 2 only):20MB.
    • Training bounding box annotations (Task 3 only):1MB.
    • Validation bounding box annotations (all tasks):2.2MB.
    • Test bounding box annotations (Task 3 only):33MB.

注意: 根据ImageNet使用条例,用户只能自行前往其官网下载相关数据。

在ILSVRC2012官网上可以下载如下几个数据包,具体信息如所示。

序号类别名称文件名文件大小备注
1Development Kit任务1、2的工具包ILSVRC2012_devkit_t12.tar.gz2.5 MB施工中……
2Development Kit任务3的工具包ILSVRC2012_devkit_t3.tar.gz22 MB施工中……
3Images训练集JPEG图片:任务1、2ILSVRC2012_img_train.tar138 GB施工中……
4Images训练集JPEG图片:任务3ILSVRC2012_img_train_t3.tar728 MB施工中……
5Images验证集JPEG图片ILSVRC2012_img_val.tar6.3 GB施工中……
6Images测试集JPEG图片ILSVRC2012_img_test_v10102019.tar13 GB施工中……
7Bounding Boxes训练集任务3的标注XML文件ILSVRC2012_bbox_train_v2.tar.gz20 MB施工中……
8Bounding Boxes训练集任务1、2的标注XML文件ILSVRC2012_bbox_train_dogs.tar.gz1 MB施工中……
9Bounding Boxes验证集的标注XML文件ILSVRC2012_bbox_val_v3.tgz2.2 MB施工中……
10Bounding Boxes测试集的标注XML文件ILSVRC2012_bbox_test_dogs.zip33 MB施工中……

ILSVRC2012官网提供的数据集文件可能需要多次解压。例如:ILSVRC2012_img_train.tar 第一次解压会产生类似于 n01440764.tar 这样的 1000个*.tar 文件,再次解压后才是存储了图片的1000个类别文件夹!!!

各个文件解压后的文件夹层级结构大致如下

  • ILSVRC2012_devkit_t12.tar.gz🔥🔥🔥任务1、2的开发工具

    ILSVRC2012_devkit_t12/
    ├── data/
    │   ├── ILSVRC2012_validation_ground_truth.txt
    │   └── meta.mat  # 这里存储了任务1和2数据集对应的Synsets的描述信息
    ├── evaluation/
    │   ├── compute_overlap.m
    │   ├── demo.val.pred.det.txt
    │   ├── demo.val.pred.txt
    │   ├── demo_eval.m
    │   ├── eval_flat.m
    │   ├── eval_localization_flat.m
    │   ├── get_class2node.m
    │   ├── make_hash.m
    │   ├── VOCreadrecxml.m
    │   ├── VOCreadxml.m
    │   └── VOCxml2struct.m
    ├── COPYING
    └── readme.txt
    
  • ILSVRC2012_devkit_t3.tar.gz 任务3的开发工具

    ILSVRC2012_devkit_t3/
    ├── data/
    │   ├── filelist.mat
    │   ├── ILSVRC2012_validation_ground_truth.txt
    │   └── meta.mat  # 这里存储了任务3数据集对应的Synsets的描述信息
    ├── evaluation/
    │   ├── ._.DS_Store
    │   ├── ._readDat.m
    │   ├── ._writeDat.m
    │   ├── .DS_Store
    │   ├── demo.val.pred.dat
    │   ├── demo_eval.m
    │   ├── evalAccuracy.m
    │   ├── evalAP.m
    │   ├── perfect.val.pred.dat
    │   ├── readDat.m
    │   ├── VOCap.m
    │   └── writeDat.m
    ├── COPYING
    └── readme.txt
    
  • ILSVRC2012_img_train.tar🔥🔥🔥任务1、2的训练集图片

    ILSVRC2012_devkit_t12/  # 存储了1000个synset编号命名的文件夹。每个文件夹下存储288-1300张JPEG图片。绝大部分类别是1300张JPEG图片。总共1279207张图片。
    ├── n01440764/  # 存储了1300张n01440764类别的JPEG图像
    │   ├── n01440764_18.JPEG
    │   ├── ...
    │   └── n01440764_32420.JPEG
    ├── n01443537/  # 存储了1300张n01443537类别的JPEG图像
    │   ├── n01443537_2.JPEG
    │   ├── n01443537_16.JPEG
    │   ├── ...
    │   └── n01443537_24803.JPEG
    ├── ...
    └── n15075141/  # 存储了1300张n15075141类别的JPEG图像├── n15075141_27.JPEG├── n15075141_32.JPEG├── ...└── n15075141_53286.JPEG
    
  • ILSVRC2012_img_train_t3.tar任务3的训练集图片

    ILSVRC2012_devkit_t12/  # 存储了120个狗亚类文件夹。每个文件夹下存储148-252张JPEG图片,总共20580张。
    ├── n02085620/  # 存储了152张n01440764类别的JPEG图像
    │   ├── n02085620_7.JPEG
    │   ├── n02085620_199.JPEG
    │   ├── ...
    │   └── n02085620_14516.JPEG
    ├── n02085782/  # 存储了185张n01443537类别的JPEG图像
    │   ├── n02085782_2.JPEG
    │   ├── n02085782_17.JPEG
    │   ├── ...
    │   └── n02085782_4798.JPEG
    ├── ...
    └── n02116738/  # 存储了1300张n15075141类别的JPEG图像├── n02116738_124.JPEG├── n02116738_204.JPEG├── ...└── n02116738_10895.JPEG
    
  • ILSVRC2012_img_val.tar🔥🔥🔥任务1、2的验证集图片

    ILSVRC2012_img_val/  # 存储了50,000张任务1、2的验证集图片。若是使用PyTorch的API解压,则应该是按类别存储在不同的子文件夹下,进而方便进行分类。
    ├── ILSVRC2012_val_00000001.JPEG
    ├── ILSVRC2012_val_00000006.JPEG
    ├── ...
    └── ILSVRC2012_val_00050000.JPEG
    
  • ILSVRC2012_img_test_v10102019.tar任务1、2的测试集图片

    ILSVRC2012_img_test_v10102019/
    └── test/  # 存储了100,000张任务1、2的测试集图片。├── ILSVRC2012_test_00000001.JPEG├── ILSVRC2012_test_00000014.JPEG├── ...└── ILSVRC2012_test_00100000.JPEG
    
  • ILSVRC2012_bbox_train_v2.tar.gz任务1、2的训练集标签

    ILSVRC2012_bbox_train_v2/  # 存储了任务1、2的训练集标签。1000个文件夹,每个文件夹288-1300个XML标签,共1279207个。
    ├── n01440764/  # 存储了1300张n01440764类别的xml标签
    │   ├── n01440764_18.xml
    │   ├── ...
    │   └── n01440764_32420.xml
    ├── n01443537/  # 存储了1300张n01443537类别的xml标签
    │   ├── n01443537_2.xml
    │   ├── n01443537_16.xml
    │   ├── ...
    │   └── n01443537_24803.xml
    ├── ...
    └── n15075141/  # 存储了1300张n15075141类别的xml标签├── n15075141_27.xml├── n15075141_32.xml├── ...└── n15075141_53286.xml
    
  • ILSVRC2012_bbox_train_dogs.tar.gz任务3的训练集标签

    ILSVRC2012_bbox_train_dogs/  # 存储了任务3的训练集标签。120个文件夹,每个文件夹148-252个XML标签,共计20580个
    ├── n02085620/  # 存储了152个PASCAL VOC类型的XML标签文件
    │   ├── n02085620_7.xml
    │   ├── n02085620_199.xml
    │   ├── ...
    │   └── n02085620_14516.xml
    ├── n02085782/  # 存储了185个PASCAL VOC类型的XML标签文件
    │   ├── n02085782_2.xml
    │   ├── n02085782_17.xml
    │   ├── ...
    │   └── n02085782_4798.xml
    ├── ...
    └── n02116738/  # 存储了120个PASCAL VOC类型的XML标签文件├── n02116738_124.xml├── n02116738_204.xml├── ...└── n02116738_10895.xml
    
  • ILSVRC2012_bbox_val_v3.tgz任务3的验证集标签

    ILSVRC2012_bbox_val_v3/  # 存储了任务3验证集标签
    └── val/  # 存储了50000个PASCAL VOC类型的XML标签文件├── ILSVRC2012_val_00000001.xml├── ILSVRC2012_val_00000002.xml├── ...└── ILSVRC2012_val_00050000.xml
    
  • ILSVRC2012_bbox_test_dogs.zip任务3的测试集标签

    ILSVRC2012_bbox_test_dogs/  # 存储了任务3的测试集标签
    └── test_clean/  # 存储了100000个PASCAL VOC类型的XML标签文件。object节点下只有一个bndbox节点。├── ILSVRC2012_test_00000001.xml├── ILSVRC2012_test_00000002.xml├── ...└── ILSVRC2012_test_00100000.xml
    

    以上数据集文件主要是JPEG图片文件和XML标注文件。
    任务1,分类:只需要读取图片和图片文件夹的名称即可。因为图片文件夹的名称就是该图片所属的synset类别编号,使用MATLAB打开ILSVRC2012_devkit_t12/data/meta.m,就可以找编号对应的WordNet描述。

ILSVRC2012评价指标

  • 任务1:图像分类
    采用TOP5分类误差: e = 1 n ⋅ ∑ k min ⁡ j d ( l j , g k ) e=\frac{1}{n} · \sum_{k} \min_{j}d(l_j, g_k) e=n1kjmind(lj,gk)
  • 任务2:目标检测
  • 采用TOP5分类和定位误差:
    e = 1 n ⋅ ∑ k min ⁡ j min ⁡ m M k max ⁡ { d ( l j , g k ) , f ( b j , z k m ) } e=\frac{1}{n} · \sum_{k} \min_{j}\min_{m}^{M_{k}}\max\{d(l_j, g_k),f(b_j, z_{km})\} e=n1kjminmminMkmax{d(lj,gk),f(bj,zkm)}
  • 任务3:狗类细分
    单类别的平均精度(average precision,AP)和多类别的均值平均精度(mean average precision,mAP)。因此,要求系统能够输出图像bounding box指定的狗数据特定狗的亚类的实值置信度。

ILSVRC2012开发套件DevelopmentKit

ILSVRC2012的开发套件(development kit)有两个分别是用于任务1、2ILSVRC2012_devkit_t12和用于任务3的ILSVRC2012_devkit_t3,他们的主要内容也有两个:

  1. 比赛中所用图片所属WordNet类别的元数据介绍。它是一个MATLAB的*.m文件,保存在ILSVRC2012_devkit_t12/data/meta.mILSVRC2012_devkit_t2/data/meta.m中。
  2. 用于提交用户作品评价的ILSVRC2012MATLAB例程。相关*.m文件存储在ILSVRC2012_devkit_t12/evaluation/或ILSVRC2012_devkit_t2/evaluation/下。

这里简要介绍一下data/meta.m文件。meta.m是一个MATLAB文件,里面存储了一个名为synsets的变量。可以通过load函数打开,例如:metadata=load(‘meta.m’), synsets=metadata.synsets、synsets=load(‘meta.m’, ‘synsets’)。

synsets结构体主要定义了比赛中图片所属类别的相关信息,一共包含8个字段,每个字段的具体含义如下:

序号字段含义与WordNet关系
1ILSVRC2012_IDILSVRC2012中类别的内部唯一编号,专门为这个竞赛设计,用于表示特定类别它是ILSVRC2012特定的类目编号,与WordNet中的Synset ID是对应的,但不直接使用WordNet的编号
2WNIDWNID (WordNet ID),WordNet 中的 Synset ID,用来标识特定的同义词集(Synset)直接来自 WordNet,每个类别都有一个对应的 WNID,与 WordNet 中的 Synsets 一一对应。通常以 n 开头,后面跟8位数字。WNID = n01440764 可能对应鱼类的类别。
3words每个类别的标签,也就是该类别的词义(通常为英文描述)。通常是对 WNID 的自然语言描述。与 WordNet Synset 中的词义部分一致,描述该类别的意思。
4gloss类别的简短解释或释义,提供了对该类别的更详细的描述。来自 WordNet Synset 的释义部分,帮助理解词义的具体含义。
5num_children当前类别的子类别数目,表示该类别在 WordNet 中是否有更细分的子类。直接来自 WordNet 的分类结构,表明某个 Synset 是否在层次结构中有子类(分支)。
6children当前类别的所有子类的 ILSVRC2012_ID 列表,列出了该类目的下级类别。对应 WordNet 中的分层结构,如果该 Synset 有子类,这里会列出这些子类。
7wordnet_height当前类别在 WordNet 层次结构中的高度,表示该类别距离 WordNet 层次树的根节点的距离。高度数值越大,表示该类别位于更深层次的结构中。这个值直接反映了 WordNet 中的类别层级。
8num_train_images与该类别相关的训练图像的数量,表示用于训练的该类图片的数目。这个字段与 WordNet 无关,它是特定于 ILSVRC 数据集的,提供训练数据集的相关信息。

下方提供了将*.mat文件存储为CSV文件的MATLAB脚本代码:

synsets = load('meta.mat', 'synsets').synsets  % 加载meta.mat中的sysnets结构体变量
synsets_t = struct2table(synsets)  % 使用struct2table函数将结构体变量转变为表格
writetable(synsets_t, 'synsets.csv')  % 将synsets表格存储在本地的CSV文件中

注意:

  1. meta中一共包含了 1860 个synsets,只有其中前1000个才是ILSVRC2012需要的,并给出了训练集图片;
  2. meta.mat中synsets结构体变量的children字段是一个列表,因此在CSV文件中表现为多个列。

获取Synset的标签描述

要在 Python 中读取 ILSVRC2012 数据集中不同 WNID 对应的 WordNet 词义,可以结合 ILSVRC2012 的 WNID(WordNet ID) 和 NLTK 的 WordNet 接口 来实现。ILSVRC2012 使用的 WNID 是 WordNet 同义词集(synsets)的唯一标识符,借助 NLTK 和 WordNet 数据库,可以根据 WNID 查询对应的词义。
我们会使用到nltk.corpus.wordnet.synset_from_pos_and_offset这个函数。该函数式NLTK WordNet接口中的一个函数,用于通过词性(pos:part of speach)和偏移量(offset)获取对应的同义词集。该函数根据WordNet数据的内部结构,直接从WordNet的ID中提取出词义、定义、同义词等信息。

该函数的定义原型为:

nltk.corpus.wordnet.synset_from_pos_and_offset(pos, offset)

参数

  • pos(词性,part of speech):str字符串类型。表示词条的词性,可供选择项如下。
    • n:noun,名词。
    • v:verb,动词。
    • a:adjective,形容词。
    • r:adverb,副词。
    • s:satellite adjective,卫星形容词。
  • offset(偏移量):int整型。表示WordNet中每个同义词集(synset)的唯一标识符,代表该同义词集在WordNet中的位置。

返回值

  • 返回值是一个nltk.corpus.reader.wordnet.Synset对象。通过该对象可以获取同义词集的名称、定义、例句和所有同义词,具体如下:
    • synset.name():获取同义词集的名称(通常以 “词条.词性.编号” 的形式)。
    • synset.definition():获取该同义词集的定义。
    • synset.examples():获取该词义的例句(如果有)。
    • synset.lemmas():获取该同义词集中的所有同义词。

例如:

import nltk
from nltk.corpus import wordnet as wn
nltk.download('wordnet')  # 下载一次即可wnid = 'n02110063'synset = wn.synset_from_pos_and_offset('n', int(wnid[1:]))# 输出 WNID 对应的词义信息
print(f"WNID: {wnid}")
print(f"词条: {synset.name()}")
print(f"定义: {synset.definition()}")
print(f"例句: {synset.examples()}")
print(f"同义词: {[lemma.name() for lemma in synset.lemmas()]}")

输出如下:

WNID: n02110063
词条: malamute.n.01
定义: breed of sled dog developed in Alaska
例句: []
同义词: ['malamute', 'malemute', 'Alaskan_malamute']

Python读取及可视化

ILSVRC2012的测试集一共10W张JPEG图片和bounding box的xml标注文件。虽然提供了xml标注,但是进提供xmin、ymin、xmax和ymax。不会告知类别,毕竟是测试集嘛!

注意:ILSVRC2012的标签采用的是PASCAL VOC所使用的XML文件管理方式。其中,ILSVRC2012_val_00048827.xml文件内容为:

<annotation><folder>val</folder><filename>ILSVRC2012_val_00048827</filename><source><database>ILSVRC_2012</database></source><size><width>1024</width><height>693</height><depth>3</depth></size><segmented>0</segmented><object><name>n02281787</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>133</xmin><ymin>157</ymin><xmax>620</xmax><ymax>587</ymax></bndbox></object>
</annotation>

PyTorch读取API

PyTorch提供了一个用于加载和解析本地 ImageNet2012数据集中图像分类任务的API:torchvision.datasets.ImageNet

  • torchvision.datasets.ImageNet的参数:
    • root:str或pathlib.Path类型。ImageNet数据集存储的根目录。
    • split:str类型。数据集划分,支持trainval
    • transform:可调用类型。可选项。接收PIL图像并返回转换后版本的函数/转换,例如transforms.RandomCrop
    • target_transform:可调用类型。可选项。接受目标并对其进行转换的函数/转换。,例如transforms.RandomCrop
    • loader:加载给定路径的图像的函数。
  • torchvision.datasets.ImageNet的返回值:
    • 一个可以使用索引获取图像和类别索引元组对的Python类。

注意:

  1. PyTorch提供处理ImageNet的API:torchvision.datasets.ImageNet不提供下载选项。
    这是因为根据ImageNet的使用条例,所有的用户需要使用机构邮箱注册ImageNet账户,并申请
    数据集使用权限,通过后方可下载。
  2. torchvision.datasets.ImageNet需要传入数据集根目录root,并且要求root
    目录下存在以下三个文件:
    • ILSVRC2012_devkit_t12.tar.gz
    • ILSVRC2012_img_train.tar
    • ILSVRC2012_img_val.tar

基于PyTorch的API接口加载及可视化

import torchvision.datasets as datasets
import matplotlib.pyplot as pltimagenet = datasets.ImageNet(root='F:/ImageNet/ILSVRC2012/ILSVRC2012/',split='val',
)fig = plt.figure(figsize=(6, 2))
fig.suptitle("ILSVRC2012 Validation!")
print(f"There are {len(imagenet)} samples in ILSVRC2012 val subdataset.")
for idx, (img, target) in enumerate(imagenet):ax = fig.add_subplot(1, 3, idx + 1)ax.set_xticks([])ax.set_yticks([])ax.set_frame_on(b=False)ax.imshow(img)ax.set_xlabel(f"class: {target}")if idx >= 2:breakplt.show()

在这里插入图片描述

自定义读取接可视化Python脚本

  • 一个简单的加载及可视化的Python脚本接可视化结果
import cv2
from PIL import Image
import numpy as np
from xml.etree import ElementTree as ET
import matplotlib.pyplot as pltnum = 50000  # the total image number of validation subdataset
val_xml_root = "./Annotations/"  # directory where val xml labels are saved
val_img_root = "./JPEGImages/"  # directory where val JPEG images are saveddef parse_voc(xml_file: str):"""parse PASCVAL VOC annotations"""tree = ET.parse(xml_file)root = tree.getroot()objects = []# iter each object nodefor obj in root.findall('object'):obj_dit = {}for child in obj:if child.tag == 'bndbox':bbox = {}for dim in child:bbox[dim.tag] = dim.textobj_dit[child.tag] = bboxelse:obj_dit[child.tag] = child.textobjects.append(obj_dit)return objectsdef draw_bndbox(img: Image, object: list[dict]):"""draw bounding box according to boxes list."""img_cv2 = cv2.cvtColor(np.asanyarray(img), cv2.COLOR_RGB2BGR)  # convert PIL.Image to cv2for obj in object:name = obj['name']xmin = int(obj['bndbox']['xmin'])xmax = int(obj['bndbox']['xmax'])ymin = int(obj['bndbox']['ymin'])ymax = int(obj['bndbox']['ymax'])img_cv2 = cv2.rectangle(img_cv2, (xmin, ymin), (xmax, ymax),(0, 0, 255))img_cv2 = cv2.putText(img_cv2, name, (xmin, ymin),cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1, cv2.FILLED)return Image.fromarray(cv2.cvtColor(img_cv2, cv2.COLOR_BGR2RGB))# random select 6 images, and show their classes ID and bounding boxes in them
fig = plt.figure(figsize=(12, 12))
np.random.seed(2)
for idx, id in enumerate(np.random.choice(num, size=6)):xml_addr = val_xml_root + 'ILSVRC2012_val_' + str(id + 1).zfill(8) + '.xml'img_addr = val_img_root + 'ILSVRC2012_val_' + str(id + 1).zfill(8) + '.JPEG'objs = parse_voc(xml_addr)img = Image.open(img_addr)img_show = draw_bndbox(img, objs)ax = fig.add_subplot(2, 3, idx + 1)ax.imshow(img_show)ax.set_xticks([])ax.set_yticks([])ax.set_frame_on(b=False)plt.show()

在这里插入图片描述

参考文献

  1. Standford Lab, Standford University, Princeton University. ImageNet. [EB.OL]. [2024-09-03]. https://www.image-net.org/
  2. Standford Lab, Standford University, Princeton University. ImageNet Large Scale Visual Recognition Challenge (ILSVRC)[EB/OL]. [2024-09-03]. https://www.image-net.org/challenges/LSVRC/index.php
  3. Addison Howard, Eunbyung Park, Wendy Kan. ImageNet Object Localization Challenge[EB/OL]. (2018)[2024-09-03]. https://www.kaggle.com/c/imagenet-object-localization-challenge/overview/description
  4. WordNet: A Lexcical Database for English[EB/OL]. [2024-09-03]. https://wordnet.princeton.edu/
  5. Standford Lab, Standford University, Princeton University. ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012)[EB/OL]. [2024-09-03]. https://www.image-net.org/challenges/LSVRC/2012/index.php
  6. Slides: Introduction and overview of results for ILSVRC2012[EB/OL]. (2012)[2024-09-06]. https://www.image-net.org/static_files/files/ilsvrc2012.pdf🚀🚀🚀这是李飞飞讲解ILSVRC2012概况和比赛结果的幻灯片PDF文件!
  7. Russakovsky O., Deng J., Su H., et al. ImageNet Large Scale Visual Recognition Challenge[J]. Internatinal Journal of Computer Science. 2015, 115(3): 211-252.

最后:笔者能力和水平有限,此处内容仅供学习和参考,若有错漏可私信博主。❗️❗️❗️


收集整理和创作不易, 若有帮助🉑, 请帮忙点赞👍➕收藏❤️, 谢谢!✨✨🚀🚀

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 6- 【JavaWeb】Maven管理项目
  • 如何调试本地npm package
  • 【前端】Flutter vs uni-app:性能对比分析
  • 系统架构设计师: 信息安全技术
  • Wazuh的安装和基本使用
  • 日志管理之Logrotate
  • 目标检测-YOLOv2
  • nefu 转专业到计算机相关专业(软件)的个人经历分享
  • STM32点亮第一个LED
  • 【RabbitMQ】工作模式
  • 如何模拟一个小程序项目打包的流程
  • 力扣题解2555
  • STM32F1+HAL库+FreeTOTS学习10——任务相关API函数使用
  • Vue/cli不同环境下打包后js文件没有添加hash值-会导致缓存问题-解决
  • 基于C#+SQLServer 2005实现(CS界面)校园卡消费信息系统
  • 【个人向】《HTTP图解》阅后小结
  • Angular 2 DI - IoC DI - 1
  • CSS居中完全指南——构建CSS居中决策树
  • CSS魔法堂:Absolute Positioning就这个样
  • CSS相对定位
  • git 常用命令
  • GraphQL学习过程应该是这样的
  • MySQL用户中的%到底包不包括localhost?
  • ng6--错误信息小结(持续更新)
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • unity如何实现一个固定宽度的orthagraphic相机
  • 从PHP迁移至Golang - 基础篇
  • ------- 计算机网络基础
  • 讲清楚之javascript作用域
  • 开源地图数据可视化库——mapnik
  • 人脸识别最新开发经验demo
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 通过git安装npm私有模块
  • 为什么要用IPython/Jupyter?
  • 栈实现走出迷宫(C++)
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • #ifdef 的技巧用法
  • #php的pecl工具#
  • %@ page import=%的用法
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (javascript)再说document.body.scrollTop的使用问题
  • (LeetCode) T14. Longest Common Prefix
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)PySpark3:SparkSQL编程
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)创业的注意事项
  • (转载)Linux网络编程入门
  • .NET Core WebAPI中封装Swagger配置
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 提取注释生成API文档 帮助文档