Up主作为CV穷人代表,这一次想要触碰一下 papers 里最为活跃却又以 “Huge” 令穷人望而生畏的超级数据集: ImageNet 中的 ILSVRC2012.


还记得依靠氪金 “霸道总裁式” 碾压一切 “noise 2 image” 的 BigGAN 吗?

来不及时间解释了,快上车!
## 下载可怜穷人的 BigGAN-4~8 gpus version
>> git clone https://github.com/ajbrock/BigGAN-PyTorch.git
准备数据集及其预处理

资源

http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_test.tar
http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_val.tar
http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_train.tar
http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_devkit_t12.tar
http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_bbox_train_v2.tar

这一步是重点,讲述了UP主如何下载整个数据集。

  • 首先是通过迅雷下载一些辅助信息(BBox等)和较小的测试集与验证集数据(建议租一个一天会员)(直接复制上面的几个链接);
  • 但是到了训练集的 137 个 GB 的时候就不行了,因为用的是内网,强行被限制了网速,所以只好找到一个热心网友的网盘上分享的资源,每个类别对应一个压缩包,共1000个,
## 原来的资源找不到了,这里有个也是一样的
https://pan.baidu.com/s/1hsDmdNI

下载完后就是解压了,花了几个小时,写了个脚本(对1000个 .tar 压缩包进行解压缩),

import tarfile
import os
from tqdm import tqdmif __name__ == '__main__':src_pth = 'xxxxxx/ILSVRC2012_img_train'des_pth = 'xxxxxx/SuperDatasets/Image-Net/ILSVRC2012_img_train'for i in tqdm(range(1000)):dir_name = '%04d' % (i+1)if os.path.exists(os.path.join(des_pth, dir_name)) is not True:os.mkdir(os.path.join(des_pth, dir_name))tar_file = os.path.join(src_pth, dir_name+'.tar')dir_file = os.path.join(des_pth, dir_name)tar_fh = tarfile.open(tar_file)for f_name in tar_fh.getnames():tar_fh.extract(f_name, path=dir_file)# 解压到指定文件夹

最后得到


好吧确实有点感动♪(^∀^●)ノ


这里的每个子文件夹下都是同一个类别的图像,1000个类别的中英文信息参照这位老哥的博客:imagenet数据集类别标签和对应的英文中文对照表
但实际上我们并不在意具体每一类别指的是什么,只要用0,1,2,…去指代即可。


训练阶段我们只需要在工程目录下新建 data 目录,里边再新建 ImageNet 目录,里边再新建 I128 目录,即 data/ImageNet/I128 。这之后将 train 的1000个子目录移动过去。


Anyway,收集完数据后,下面就是预处理了。

  • 执行python make_hdf5.py --dataset I128 --batch_size 128 --data_root data
    hdf5 是为了将数据处理成更利于快速 I /O 的格式,类似于在上一篇博客 EDVR-lmdb ;但与 lmdb 不同的是,lmdb 纯碎是存储一个巨大的 dict,而 hdf5 还附带了控制 batch 的功能,简直就是专门为 dataset 而设计的Σ( ° △ °|||)︴
  • 其中,batch_size_overall=num_gpu×batch_size_per_gpubatch\_size\_overall = num\_gpu \times batch\_size\_per\_gpubatch_size_overall=num_gpu×batch_size_per_gpu
    这里的 batch_size 就是 overall 的;作者说,16GB 的单个 VRAM 支持 batch_size_per_gpu 可以是256,所以作者说原始的 BigGAN设置是:
    2048=256×82048=256\times 82048=256×8
  • 本穷UP好不容易借到 4 张 1080ti,那就是假设是 8GB ✖ 4, 所以
    128×4=512128\times 4=512128×4=512,想想还是算了,就按他给的 256 的一半 128 来吧。
    下面我们来看看这样的设置下发生了什么?
经由代码文件
make_hdf5.py, utils.py, datasets.py
我们可以推断出数据集应该这样准备:
'''
/data/ImageNet├I128   # ImageNet 128x128│ ├dog│ │ ├xxx.jpg│ │ ├xxy.jpg│ │ ...│ │ └zzz.jpg│ ├cat│ │ ├xxx.jpg│ │ ...│ │ ├xxy.jpg│ │ ...│ │ └zzz.jpg│ ...│ └class_n│   ├xxx.jpg│   ...│   ├xxy.jpg│   ...│   └zzz.jpg├I256   # ImageNet 256x256...└XXXX
'''

完了后我们应该会得到一个:data/ImageNet/ILSVRC128.hdf5

TIP

我们发现代码里并没有一定要求1000个类别的图像都参与训练,所以我们可以只取其中的一部分类别。那就前 25 类吧,刚好到猫头鹰先生那里,一共也有 32500 张图像。处理就很快了,一分钟不到,生成文件大小是 1.4 GB。


  • 执行python calculate_inception_moments.py --dataset I128_hdf5 --data_root data
    这里是为了使用 torchvision.models.inception 的预训练模型去计算 IS 分数(μ\muμ 和 σ\sigmaσ)

开始训练

python train.py \
--dataset I128_hdf5 \  # which Dataset to train on, out of I128, I256, C10, C100;
--parallel --shuffle  --num_workers 8 --batch_size 128 \ # for data loader settings
--num_G_accumulations 2 --num_D_accumulations 2 \
--num_D_steps 1 --G_lr 1e-4 --D_lr 4e-4 --D_B2 0.999 --G_B2 0.999 \
--G_attn 64 --D_attn 64 \
--G_nl relu --D_nl relu \
--SN_eps 1e-8 --BN_eps 1e-5 --adam_eps 1e-8 \
--G_ortho 0.0 \
--G_init xavier --D_init xavier \
--ema --use_ema --ema_start 2000 --G_eval_mode \
--test_every 2000 --save_every 1000 --num_best_copies 5 --num_save_copies 2 --seed 0 \
--name_suffix SAGAN_ema \
UP主的成功设置

UP主后来变成只有两张卡,那就再试试咯,把 batch_size_overallbatch\_size\_overallbatch_size_overall 设置成32,最终暂且在两张卡上跑了起来。

CUDA_VISIBLE_DEVICES=0,1 python train.py --dataset I128_hdf5 --parallel --shuffle  --num_workers 8 --batch_size 32 --num_G_accumulations 1 --num_D_accumulations 1 --num_D_steps 1 --G_lr 1e-4 --D_lr 4e-4 --D_B2 0.999 --G_B2 0.999 --G_attn 64 --D_attn 64 --G_nl relu --D_nl relu --SN_eps 1e-8 --BN_eps 1e-5 --adam_eps 1e-8 --G_ortho 0.0 --G_init xavier --D_init xavier --ema --use_ema --ema_start 2000 --G_eval_mode --test_every 2000 --save_every 1000 --num_best_copies 5 --num_save_copies 2 --seed 0 --name_suffix SAGAN_ema

Hello! ImageNet ILSVRC 2012!相关推荐

  1. ImageNet的top-1终于上了90%,网友质疑:用额外数据集还不公开,让人怎么信服?...

    转载自:机器之心 近日,谷歌大脑研究科学家.AutoML 鼻祖 Quoc Le 发文表示,他们提出了一种新的半监督学习方法,可以将模型在 ImageNet 上的 top-1 准确率提升到 90.2%, ...

  2. ​ImageNet的top-1终于上了90%,网友质疑:用额外数据集还不公开,让人怎么信服?...

    来源:机器之心本文约3000字,建议阅读10+分钟Quoc Le:"我原本以为 ImageNet 的 top-1 准确率 85% 就到头了,现在看来,这个上限难以预测." 近日,谷 ...

  3. ImageNet的top-1终于上了90%?

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  4. 旷视提双边分支网络BBN:攻坚长尾分布的现实世界任务 | CVPR 2020 Oral

    作者 | 旷视研究院 出品 | AI科技大本营(ID:rgznai100) 导读:本文是旷视 CVPR 2020 论文系列解读文章,也是 CVPR 2020 Oral展示论文之一,它揭示了再平衡方法解 ...

  5. YOLOv4 论文翻译

    整理:我爱计算机视觉 本文源自知乎,已获作者授权转载,请勿二次转载. https://zhuanlan.zhihu.com/p/136183555 本文是YOLO系列的一个继承篇,由俄罗斯开发者Ale ...

  6. GhostNet : 轻量级网络模型,性能超越MobileNetV3(CVRP2020, 华为诺亚)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 原文链接:https://arxiv.org/pdf/1911.11907.pdf 代码:https: ...

  7. NeurIPS 2021 | 华为诺亚Oral论文:基于频域的二值神经网络训练方法

    ©作者 | 机器之心编辑部 来源 | 机器之心 常规符号函数的梯度几乎处处为零,不能用于反向传播.为此,来自华为诺亚方舟实验室等机构的研究者提出一种在频域中估计原始符号函数梯度的新方法. 二值神经网络 ...

  8. CVPR 2020 Oral | 旷视研究院提出双边分支网络BBN:攻坚长尾分布的现实世界任务...

    IEEE 国际计算机视觉与模式识别会议 CVPR 2020 (IEEE Conference on Computer Vision and Pattern Recognition) 将于 6 月 14 ...

  9. yolov4论文_YOLOv4论文详细解读

    大家好,本次分享的是YOLOv4的那篇论文我将主要从这几个部分对该论文进行详细的解读首先来看论文的主要内容YOLOv4这篇论文主要是介绍如何使用一些通用的新方法达到了最先进的实验结果,他们在COCO数 ...

最新文章

  1. 自动红眼移除算法 附c++完整代码
  2. 深入理解SET NAMES和mysql(i)_set_charset的区别
  3. Dreamweaver——模板与库
  4. rejection from Cambridge Machine Learning and Machine Intelligence MPhil
  5. 并行程序设计模式--Master-Worker模式
  6. docker下的mysql my.ini_docker部署mysql启动失败
  7. Http Post 二进制通信
  8. Stm32:地址空间划分
  9. Kap for Mac(轻量级屏幕录像机)免费版
  10. 【元胞自动机】基于matlab元胞自动机四车道交通流【含Matlab源码 039期】
  11. linux中的代码比对工具meld
  12. SpringCloud第一章 Euraka服务注册与发现组件
  13. CreatePipe 函数
  14. php screw 密钥,php-screw php代码加密工具用法(整理)
  15. 让电脑自动开机、关机以及取消开机密码
  16. 程序员的快乐到底是什么?
  17. ubuntu14.04使用reaver跑pin码
  18. 恢复删除的环境变量-卷影复制
  19. 监听除某元素之外点击事件
  20. 蓝桥杯 STEMA 考试 C++ 编程题模拟题

热门文章

  1. 关于矿井地面电力综合自动化系统的研究与产品选型
  2. 安卓移动端系统运维终端工具—JuiceSSH
  3. 自动化检测发现漏洞---AWVS
  4. 相似度算法之欧几里得距离
  5. C++有符号与无符号
  6. Lazada出单之后卖家发货操作流程发货异议解答
  7. 【cuda安装教程】GTX1050Ti+win10+cuda9.0+cudnn7.4.1安装过程记录
  8. 一张判断你是用左脑还是右脑的图
  9. python socket tcp6_python所遇到的坑
  10. 这五年,“IT学子成长指导”专栏与你同行