首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nurtas aidarbekov_true image2018

nurtas aidarbekov_true image2018

作者头像
全栈程序员站长
发布2022-11-07 15:34:15
发布2022-11-07 15:34:15
43000
代码可运行
举报
运行总次数:0
代码可运行

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


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

代码语言:javascript
代码运行次数:0
运行
复制
来不及时间解释了,快上车!
## 下载可怜穷人的 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 tqdm if __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 而设计的Σ( ° △ °|||)︴
  • 其中, b a t c h _ s i z e _ o v e r a l l = n u m _ g p u × b a t c h _ s i z e _ p e r _ g p u batch\_size\_overall = num\_gpu \times batch\_size\_per\_gpu batch_size_overall=num_gpu×batch_size_per_gpu 这里的 batch_size 就是 overall 的;作者说,16GB 的单个 VRAM 支持 batch_size_per_gpu 可以是256,所以作者说原始的 BigGAN设置是: 2048 = 256 × 8 2048=256\times 8 2048=256×8
  • 本穷UP好不容易借到 4 张 1080ti,那就是假设是 8GB ✖ 4, 所以 128 × 4 = 512 128\times 4=512 128×4=512,想想还是算了,就按他给的 256 的一半 128 来吧。 下面我们来看看这样的设置下发生了什么?
代码语言:javascript
代码运行次数:0
运行
复制
经由代码文件
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主后来变成只有两张卡,那就再试试咯,把 b a t c h _ s i z e _ o v e r a l l batch\_size\_overall batch_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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184225.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月9日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备数据集及其预处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档