Skip to content

一个通用的图像分类模板,天池/CVPR AliProducts挑战赛 3/688

License

Notifications You must be signed in to change notification settings

misads/AliProducts

Repository files navigation

CVPR 2020 AliProducts Challenge

一个通用的图像分类模板,天池/CVPR AliProducts Challenge 3/688🍟

队伍:薯片分类器!

preview

支持的功能

  • Backbone

    • ResNet(101)
    • ResNeXt(101)
    • ResNeSt(101, 200)
    • Res2Net(101)
    • iResNet(101, 152, 200)
    • EffiCientNet(B-5, B-7)
  • 优化器

    • Adam
    • SGD
    • Ranger(RAdam+Look Ahead)
  • Scheduler

    • Cos
    • 自定义scheduler
  • Input Pipeline

    • 裁剪和切割
    • 随机翻折和旋转
    • 随机放大
    • 随机色相
    • 随机饱和度
    • 随机亮度
    • Norm_input
  • 其他tricks

    • label smooth
    • model ensemble
    • TTA

环境需求

python >= 3.6
torch >= 1.0
tensorboardX >= 1.6
utils-misc >= 0.0.5
mscv >= 0.0.3
opencv-python==4.2.0.34  # opencv>=4.4需要编译,建议安装4.2版本
opencv-python-headless==4.2.0.34
albumentations>=0.5.1 

都是很好装的库,不需要编译。

使用方法

训练和验证模型

① 生成输入图片和标签对应的train.txt和val.txt

  新建一个datasets文件夹,制作文件列表train.txt和val.txt并把它们放在datasets目录下,train.txt和val.txt需要满足这样的格式:每行是一个样本的图像绝对路径和标签,用空格隔开。如下所示:

# datasets/train.txt
/home/xhy/datasets/aliproducts/train/img_11739.jpg 24
/home/xhy/datasets/aliproducts/train/img_15551.jpg 31
/home/xhy/datasets/aliproducts/train/img_19451.jpg 39
/home/xhy/datasets/aliproducts/train/img_16965.jpg 34
/home/xhy/datasets/aliproducts/train/img_1271.jpg 3
/home/xhy/datasets/aliproducts/train/img_6502.jpg 13
/home/xhy/datasets/aliproducts/train/img_3148.jpg 7

  生成好train.txt和val.txt后目录结构是这样的:

AliProducts
    └── datasets
          ├── train.txt      
          └── val.txt    

② 训练模型

CUDA_VISIBLE_DEVICES=0 python train.py --tag resnest --model ResNeSt101 --optimizer sgd --scheduler 2x -b 24 --lr 0.0001  # --tag用于区分每次实验,可以是任意字符串

  scheduler 2x一共训练24个epochs,具体可参考scheduler/__init__.py。训练的中途可以在验证集上验证,添加--val_freq 10参数可以指定10个epoch验证一次,添加--save_freq 10参数可以指定10个epoch保存一次checkpoint。

③ 验证训练的模型

CUDA_VISIBLE_DEVICES=0 python eval.py --model ResNeSt101 -b 24 --load checkpoints/resnest/20_ResNeSt101.pt

  验证的结果会保存在results/<tag>目录下,如果不指定--tag,默认的tagcache

④ 恢复中断的训练

CUDA_VISIBLE_DEVICES=0 python train.py --tag resnest_resume --model ResNeSt101 --epochs 20 -b 24 --lr 0.0001 --load checkpoints/resnest/20_ResNeSt101.pt --resume

  --load的作用是载入网络权重;--resume参数会同时加载优化器参数和epoch信息(继续之前的训练),可以根据需要添加。

⑤ 在测试集上测试

CUDA_VISIBLE_DEVICES=0 python submit.py --model ResNeSt101 --load checkpoints/resnest/20_ResNeSt101.pt

记录和查看日志

  所有运行的命令和运行命令的时间戳会自动记录在run_log.txt中。

  不同实验的详细日志和Tensorboard日志文件会记录在logs/<tag>文件夹中,checkpoint文件会保存在checkpoints/<tag>文件夹中。如下所示:

AliProducts
    ├── run_log.txt    # 运行的历史命令
    ├── logs
    │     └── <tag>
    │           ├── log.txt  
    │           └── [Tensorboard files]
    └── checkpoints
          └── <tag>
                ├── 1_Model.pt
                └── 2_Model.pt
          

参数说明

--tag参数是一次操作(traineval)的标签,日志会保存在logs/标签目录下,保存的模型会保存在checkpoints/标签目录下。

--model是使用的模型,所有可用的模型定义在network/__init__.py中。

--epochs是训练的代数。

-b参数是batch_size,可以根据显存的大小调整。

--lr是初始学习率。

--load是加载预训练模型。

--resume配合--load使用,会恢复上次训练的epoch和优化器。

--gpu指定gpu id,目前只支持单卡训练。

--debug以debug模式运行,debug模式下每个epoch只会训练前几个batch。

另外还可以通过参数调整优化器、学习率衰减、验证和保存模型的频率等,详细请查看options/options.py

清除不需要的实验记录

  运行 python clear.py --tag <your_tag> 可以清除不需要的实验记录,注意这是不可恢复的,如果你不确定你在做什么,请不要使用这条命令。

如何添加自定义的模型:

如何添加新的模型:

① 复制`network`目录下的`ResNeSt`文件夹,改成另外一个名字(比如MyNet)。

② 仿照`ResNeSt`的model.py,修改自己的网络结构、损失函数和优化过程。

③ 在network/__init__.py中import你的Model并且在models = {}中添加它。
    from MyNet.Model import Model as MyNet
    models = {
        'default': Default,
        'MyNet': MyNet,
    }

④ 运行 python train.py --model MyNet 看能否正常训练

About

一个通用的图像分类模板,天池/CVPR AliProducts挑战赛 3/688

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages