nurtas aidarbekov_true image2018

nurtas aidarbekov_true image2018Up主作为CV穷人代表,这一次想要触碰一下papers里最为活跃却又以“Huge”令穷人望而生畏的超级数据集:ImageNet中的ILSVRC2012.还记得依靠氪金“霸道总裁式”碾压一切“noise2image”的BigGAN吗?来不及时间解释了,快上车!##下载可怜穷人的BigGAN-4~8gpusversion>>gitcl…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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 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 来吧。
    下面我们来看看这样的设置下发生了什么?
经由代码文件
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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Loadrunner11激活成功教程完成添加License失败

    Loadrunner11激活成功教程完成添加License失败Loadrunner11激活成功教程成功后,用deletelicense.exe工具把License全删除了,启动 Loadrunner,进入目录CONFUGURATION—>loadrunnerlicense,添加license提示我“Licensesecurityviolation.Operationisnotallowed”,于是我猜想是不是我运行deletelicense.exe工

  • Opkg安装问题[通俗易懂]

    Opkg安装问题[通俗易懂]问题1:satisfy_dependencies_for:CannotsatisfythefollowingdependenciesforXXX问题报错如下:root@OpenWrt:/etc#opkginstallkmod-i2c-coreInstallingkmod-i2c-core(3.10.49-1)toroot…Downloadinghttp://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt

  • string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

    string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

  • pycharm如何缩进多行代码_pycharm统计代码行数

    pycharm如何缩进多行代码_pycharm统计代码行数方法一:在代码界面,点击鼠标右键,然后按住鼠标左键下拉选择就行了方法二:直接按下快捷键,alt+shift+insert,然后长按鼠标左键下拉即可进入多行编辑模式。…

  • DHT和一致性哈希算法总结

    DHT和一致性哈希算法总结 Hash算法比较重要的考量点有两个:1.单调性(新增或者减少映射节点时,尽量不影响原有映射关系)2.平衡性(尽量均匀分布) 分布式领域常见负载均衡算法:(1)取余法:%n如果有3个节点,Hash之后取模求余 Hash(x)%3,如果加一个节点,则Hash(x)%4。 这种方法带来的问题:1一个cache服务器mdown掉了(在实际应用中必…

  • Flume和Kafka的区别与联系「建议收藏」

    Flume和Kafka的区别与联系「建议收藏」目录区别点一:区别点二:同样是流式数据采集框架,flume一般用于日志采集,可以定制很多数据源,减少开发量,基本架构是一个flume进程agent(source、拦截器、选择器、channel<MemoryChannel、FileChannel>、sink),其中传递的是原子性的event数据;使用双层Flume架构可以实现一层数据采集,一层数据集合;Flu…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号