• ImageNet 数据集简介和数据预处理


    本文主要涉及 ImageNet 数据集的简要介绍以及手把手教你从下载、预处理以及使用的全教程,欢迎交流。


     

     

     

    什么是 ImageNet?

    ImageNet 是一个计算机视觉系统识别项目,是目前世界上最大的图像识别数据库。此项目由斯坦福大学李飞飞等教授于 2009 年发起,当时在 CVPR2009 上发表了一篇名为「ImageNet:A Large-Scale Hierarchical Image Database」的论文,之后从 2010 至 2017 年举行了基于 ImageNet 数据集的比赛。

     

    ImageNet 通过类似于 WordNet 层次结构组织图像数据。什么是 WordNet?WordNet 根据词条的意义将它们分组,每一个具有相同意义的字条组称为一个 synset,即同义词集合,WordNet 为每一个 synset 提供了简短概要的定义,并记录不同 synset 之间的语义关系。而 ImageNet 是一个基于 WordNet 主干结构的大规模图片库,ImageNet 旨在用平均 500 到 1000 张清晰分辨率的图片来说明 WordNet 中大多数同义词集合。

     

    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. 下载数据和我的数据预处理项目代码,将数据压缩包放置到下载好的项目指定目录下
    2. 解压数据和按类别整理数据

     

    关于下载数据,目前 ImageNet 官网已停止免费下载数据,但我已经将 ILSVRC2012 数据集整理到百度云,链接如下:

    下载好数据和 devkit 后,便可开始数据预处理,详细代码可见我的 github repo:ImageNet_Pretrained,项目 clone 到本地之后,将上面下载好的四个压缩文件放置于 /database 目录下。

     

    至于解压数据,请在 /database 目录下打开命令行,首先执行以下四条命令分别解压四个文件:

    # mkdir train && cp ILSVRC2012_img_train.tar.gz train && cd train && tar -xvf *.gz && rm -rf *.gz && cd ..
    # mkdir val && cp ILSVRC2012_img_val.tar.gz val && cd val && tar -xvf *.gz && rm -rf *.gz && cd ..
    # mkdir test && cp ILSVRC2012_img_test.tar.gz test && cd test && tar -xvf *.gz && rm -rf *.gz && cd ..
    # tar -xvf ILSVRC2012_devkit_t12.tar

    按上述步骤解压完后,在 /database 目录下将得到以下目录结构:

    # --- /database
    #            |--- ILSVRC2012_devkit_t12/
    #            |--- test/
    #            |--- train/
    #            |       |--- n01440764.tar
    #            |       |--- n01443537.tar
    #            |       |--- ...
    #            |--- val/
    #            |       |--- ILSVRC2012_val_00000001.JPEG
    #            |       |--- ILSVRC2012_val_00000002.JPEG
    #            |       |--- ...
    #            |--- ILSVRC2012_devkit_t12.tar
    #            |--- ILSVRC2012_img_test.tar.gz
    #            |--- ILSVRC2012_img_train.tar.gz
    #            |--- ILSVRC2012_img_val.tar.gz

    可见在 train/ 目录下还有待解压的文件,而 val/ 下的图片也需要进一步按类别建立文件夹管理:

    # python3 preprocess_ilsvrc2012.py

    之所以要处理成按类别建文件夹的形式,是因为后续使用 Pytorch 的 ImageFolder 加载数据时,ImageFolder 默认假设所有的文件按文件夹保存,每个文件夹下储存同一个类别的图片,文件夹名为类别名。


    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,输入到网络最后取平均预测结果;

    测试时:

    Ref:

    <https://www.jiqizhixin.com/graph/technologies/f3400606-ef61-441c-8bc3-dd5663313fb9>

  • 相关阅读:
    js最全的十种跨域解决方案
    最常用的~正则表达式相关js函数知识简洁分享【新手推荐】
    HTTP请求 响应状态码
    堆和栈的区别【以java为例潜入分析】
    练习110 编写一个将输入复制到输出的程序,并将其中的制表符替换成\t,把回退符替换成\b,把反斜杠替换成\\,这样可以将制表符和回退符以可见的方式显示出来
    练习111 你准备如何测试单词计数程序? 如果程序中存在某种错误,那么什么样的输入最可能发现这类错误?
    练习114 编写一个程序, 打印输入中各个字符出现频度的直方图。
    The C programming language Test
    进驻首日..感谢师父的教导
    练习112:编写一个程序,以每行一个单词的形式打印其输入。
  • 原文地址:https://www.cnblogs.com/hmlovetech/p/14409886.html
Copyright © 2020-2023  润新知