pytorch-classifier v1.1 更新日志
-
2022.11.8
- 修改processing.py的分配数据集逻辑,之前是先分出test_size的数据作为测试集,然后再从剩下的数据里面分val_size的数据作为验证集,这种分数据的方式,当我们的val_size=0.2和test_size=0.2,最后出来的数据集比例不是严格等于6:2:2,现在修改为等比例的划分,也就是现在的逻辑分割数据集后严格等于6:2:2.
- 参考yolov5,训练中的模型保存改为FP16保存.(在精度基本保持不变的情况下,模型相比FP32小一半)
- metrice.py和predict.py新增支持FP16推理.(在精度基本保持不变的情况下,速度更加快)
-
2022.11.9
- 支持albumentations库的数据增强.
- 训练过程新增R-Drop,具体在main.py中添加–rdrop参数即可.
-
2022.11.10
- 利用Pycm库进行修改metrice.py中的可视化内容.增加指标种类.
-
2022.11.11
- 支持EMA(Exponential Moving Average),具体在main.py中添加–ema参数即可.
- 修改早停法中的–patience机制,当–patience参数为0时,停止使用早停法.
- 知识蒸馏中增加了一些实验数据.
- 修复一些bug.
FP16推理实验:
实验环境:
System | CPU | GPU | RAM |
---|---|---|---|
Ubuntu | i9-12900KF | RTX-3090 | 32G |
训练mobilenetv2:
python main.py --model_name mobilenetv2 --config config/config.py --save_path runs/mobilenetv2 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
训练resnext50:
python main.py --model_name resnext50 --config config/config.py --save_path runs/resnext50 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
训练RepVGG-A0:
python main.py --model_name RepVGG-A0 --config config/config.py --save_path runs/RepVGG-A0 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
训练densenet121:
python main.py --model_name densenet121 --config config/config.py --save_path runs/densenet121 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
计算各个模型的指标:
python metrice.py --task val --save_path runs/mobilenetv2
python metrice.py --task val --save_path runs/resnext50
python metrice.py --task val --save_path runs/RepVGG-A0
python metrice.py --task val --save_path runs/densenet121
python metrice.py --task val --save_path runs/mobilenetv2 --half
python metrice.py --task val --save_path runs/resnext50 --half
python metrice.py --task val --save_path runs/RepVGG-A0 --half
python metrice.py --task val --save_path runs/densenet121 --half
计算各个模型的fps:
python metrice.py --task fps --save_path runs/mobilenetv2
python metrice.py --task fps --save_path runs/resnext50
python metrice.py --task fps --save_path runs/RepVGG-A0
python metrice.py --task fps --save_path runs/densenet121
python metrice.py --task fps --save_path runs/mobilenetv2 --half
python metrice.py --task fps --save_path runs/resnext50 --half
python metrice.py --task fps --save_path runs/RepVGG-A0 --half
python metrice.py --task fps --save_path runs/densenet121 --half
model | val accuracy(train stage) | val accuracy(test stage) | val accuracy half(test stage) | FP32 FPS(batch_size=64) | FP16 FPS(batch_size=64) |
---|---|---|---|---|---|
mobilenetv2 | 0.74284 | 0.74340 | 0.74396 | 52.43 | 92.80 |
resnext50 | 0.80966 | 0.80966 | 0.80966 | 19.48 | 30.28 |
RepVGG-A0 | 0.73666 | 0.73666 | 0.73666 | 54.74 | 98.87 |
densenet121 | 0.77035 | 0.77148 | 0.77035 | 18.87 | 32.75 |
R-Drop实验:
训练mobilenetv2:
python main.py --model_name mobilenetv2 --config config/config.py --save_path runs/mobilenetv2 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name mobilenetv2 --config config/config.py --save_path runs/mobilenetv2_rdrop --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --rdrop
训练resnext50:
python main.py --model_name resnext50 --config config/config.py --save_path runs/resnext50 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name resnext50 --config config/config.py --save_path runs/resnext50_rdrop --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --rdrop
训练ghostnet:
python main.py --model_name ghostnet --config config/config.py --save_path runs/ghostnet --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name ghostnet --config config/config.py --save_path runs/ghostnet_rdrop --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --rdrop
训练efficientnet_v2_s:
python main.py --model_name efficientnet_v2_s --config config/config.py --save_path runs/efficientnet_v2_s --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name efficientnet_v2_s --config config/config.py --save_path runs/efficientnet_v2_s_rdrop --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --rdrop
计算各个模型的指标:
python metrice.py --task val --save_path runs/mobilenetv2
python metrice.py --task val --save_path runs/mobilenetv2_rdrop
python metrice.py --task val --save_path runs/resnext50
python metrice.py --task val --save_path runs/resnext50_rdrop
python metrice.py --task val --save_path runs/ghostnet
python metrice.py --task val --save_path runs/ghostnet_rdrop
python metrice.py --task val --save_path runs/efficientnet_v2_s
python metrice.py --task val --save_path runs/efficientnet_v2_s_rdrop
python metrice.py --task test --save_path runs/mobilenetv2
python metrice.py --task test --save_path runs/mobilenetv2_rdrop
python metrice.py --task test --save_path runs/resnext50
python metrice.py --task test --save_path runs/resnext50_rdrop
python metrice.py --task test --save_path runs/ghostnet
python metrice.py --task test --save_path runs/ghostnet_rdrop
python metrice.py --task test --save_path runs/efficientnet_v2_s
python metrice.py --task test --save_path runs/efficientnet_v2_s_rdrop
model | val accuracy | val accuracy(r-drop) | test accuracy | test accuracy(r-drop) |
---|---|---|---|---|
mobilenetv2 | 0.74340 | 0.75126 | 0.73784 | 0.73741 |
resnext50 | 0.80966 | 0.81134 | 0.82437 | 0.82092 |
ghostnet | 0.77597 | 0.76698 | 0.76625 | 0.77012 |
efficientnet_v2_s | 0.84166 | 0.85289 | 0.84460 | 0.85837 |
EMA实验:
训练mobilenetv2:
python main.py --model_name mobilenetv2 --config config/config.py --save_path runs/mobilenetv2 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name mobilenetv2 --config config/config.py --save_path runs/mobilenetv2_ema --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --ema
训练resnext50:
python main.py --model_name resnext50 --config config/config.py --save_path runs/resnext50 --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name resnext50 --config config/config.py --save_path runs/resnext50_ema --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --ema
训练ghostnet:
python main.py --model_name ghostnet --config config/config.py --save_path runs/ghostnet --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name ghostnet --config config/config.py --save_path runs/ghostnet_ema --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --ema
训练efficientnet_v2_s:
python main.py --model_name efficientnet_v2_s --config config/config.py --save_path runs/efficientnet_v2_s --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd
python main.py --model_name efficientnet_v2_s --config config/config.py --save_path runs/efficientnet_v2_s_ema --lr 1e-4 --Augment AutoAugment --epoch 150 \
--pretrained --amp --warmup --imagenet_meanstd --ema
计算各个模型的指标:
python metrice.py --task val --save_path runs/mobilenetv2
python metrice.py --task val --save_path runs/mobilenetv2_ema
python metrice.py --task val --save_path runs/resnext50
python metrice.py --task val --save_path runs/resnext50_ema
python metrice.py --task val --save_path runs/ghostnet
python metrice.py --task val --save_path runs/ghostnet_ema
python metrice.py --task val --save_path runs/efficientnet_v2_s
python metrice.py --task val --save_path runs/efficientnet_v2_s_ema
python metrice.py --task test --save_path runs/mobilenetv2
python metrice.py --task test --save_path runs/mobilenetv2_ema
python metrice.py --task test --save_path runs/resnext50
python metrice.py --task test --save_path runs/resnext50_ema
python metrice.py --task test --save_path runs/ghostnet
python metrice.py --task test --save_path runs/ghostnet_ema
python metrice.py --task test --save_path runs/efficientnet_v2_s
python metrice.py --task test --save_path runs/efficientnet_v2_s_ema
model | val accuracy | val accuracy(ema) | test accuracy | test accuracy(ema) |
---|---|---|---|---|
mobilenetv2 | 0.74340 | 0.74958 | 0.73784 | 0.73870 |
resnext50 | 0.80966 | 0.81246 | 0.82437 | 0.82307 |
ghostnet | 0.77597 | 0.77765 | 0.76625 | 0.77142 |
efficientnet_v2_s | 0.84166 | 0.83998 | 0.84460 | 0.83986 |