diff --git a/commad.txt b/commad.txt deleted file mode 100644 index 6f31bef..0000000 --- a/commad.txt +++ /dev/null @@ -1,19 +0,0 @@ -python main.py --model_name efficientnet_v2_l --config config/config.py --batch_size 32 --Augment AutoAugment --save_path runs/efficientnet_v2_l --device 0 \ - --pretrained --amp --warmup --ema --imagenet_meanstd - -python main.py --model_name resnext50 --config config/config.py --batch_size 128 --Augment AutoAugment --save_path runs/resnext50 --device 1 \ - --pretrained --amp --warmup --ema --imagenet_meanstd - -python metrice.py --task fps --save_path runs/efficientnet_v2_l --batch_size 1 --device 0 -python metrice.py --task fps --save_path runs/efficientnet_v2_l --batch_size 1 --device 0 --half - -python metrice.py --task fps --save_path runs/resnext50 --batch_size 32 --device 0 -python metrice.py --task fps --save_path runs/resnext50 --batch_size 32 --device 0 --half - -python export.py --save_path runs/efficientnet_v2_l --export onnx --simplify --batch_size 1 -python metrice.py --task fps --save_path runs/efficientnet_v2_l --batch_size 1 --device 0 --model_type onnx - -python export.py --save_path runs/resnext50 --export onnx --simplify --batch_size 1 -python metrice.py --task fps --save_path runs/resnext50 --batch_size 1 --device 0 --model_type onnx - -python predict.py --source dataset/test/0000 --save_path runs/resnext50 --half --device 0 \ No newline at end of file diff --git a/v1.1-update_log.md b/v1.1-update_log.md deleted file mode 100644 index eca0026..0000000 --- a/v1.1-update_log.md +++ /dev/null @@ -1,200 +0,0 @@ -# pytorch-classifier v1.1 更新日志 - -- **2022.11.8** - 1. 修改processing.py的分配数据集逻辑,之前是先分出test_size的数据作为测试集,然后再从剩下的数据里面分val_size的数据作为验证集,这种分数据的方式,当我们的val_size=0.2和test_size=0.2,最后出来的数据集比例不是严格等于6:2:2,现在修改为等比例的划分,也就是现在的逻辑分割数据集后严格等于6:2:2. - 2. 参考yolov5,训练中的模型保存改为FP16保存.(在精度基本保持不变的情况下,模型相比FP32小一半) - 3. metrice.py和predict.py新增支持FP16推理.(在精度基本保持不变的情况下,速度更加快) - -- **2022.11.9** - 1. 支持[albumentations库](https://github.com/albumentations-team/albumentations)的数据增强. - 2. 训练过程新增[R-Drop](https://github.com/dropreg/R-Drop),具体在main.py中添加--rdrop参数即可. - -- **2022.11.10** - 1. 利用Pycm库进行修改metrice.py中的可视化内容.增加指标种类. - -- **2022.11.11** - 1. 支持EMA(Exponential Moving Average),具体在main.py中添加--ema参数即可. - 2. 修改早停法中的--patience机制,当--patience参数为0时,停止使用早停法. - 3. 知识蒸馏中增加了一些实验数据. - 4. 修复一些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 | diff --git a/v1.2-update_log.md b/v1.2-update_log.md deleted file mode 100644 index 4c1eff3..0000000 --- a/v1.2-update_log.md +++ /dev/null @@ -1,82 +0,0 @@ -# pytorch-classifier v1.2 更新日志 - -1. 新增export.py,支持导出(onnx, torchscript, tensorrt)模型. -2. metrice.py支持onnx,torchscript,tensorrt的推理. - - 此处在predict.py中暂不支持onnx,torchscript,tensorrt的推理的推理,原因是因为predict.py中的热力图可视化没办法在onnx、torchscript、tensorrt中实现,后续单独推理部分会额外写一部分代码. - 在metrice.py中,onnx和torchscript和tensorrt的推理也不支持tsne的可视化,那么我在metrice.py中添加onnx,torchscript,tensorrt的推理的目的是为了测试fps和精度. - 所以简单来说,使用metrice.py最好还是直接用torch模型,torchscript和onnx和tensorrt的推理的推理模型后续会写一个单独的推理代码. -3. main.py,metrice.py,predict.py,export.py中增加--device参数,可以指定设备. -4. 优化程序和修复一些bug. - ---- -#### 训练命令: - python main.py --model_name efficientnet_v2_s --config config/config.py --batch_size 128 --Augment AutoAugment --save_path runs/efficientnet_v2_s --device 0 \ - --pretrained --amp --warmup --ema --imagenet_meanstd - -#### GPU 推理速度测试 sh脚本: - batch_size=1 # 1 2 4 8 16 32 64 - python metrice.py --task fps --save_path runs/efficientnet_v2_s --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --half --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --model_type torchscript --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --half --model_type torchscript --batch_size $batch_size - python export.py --save_path runs/efficientnet_v2_s --export onnx --simplify --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --model_type onnx --batch_size $batch_size - python export.py --save_path runs/efficientnet_v2_s --export onnx --simplify --half --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --model_type onnx --batch_size $batch_size - python export.py --save_path runs/efficientnet_v2_s --export tensorrt --simplify --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --model_type tensorrt --batch_size $batch_size - python export.py --save_path runs/efficientnet_v2_s --export tensorrt --simplify --half --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --model_type tensorrt --half --batch_size $batch_size - -#### CPU 推理速度测试 sh脚本: - python export.py --save_path runs/efficientnet_v2_s --export onnx --simplify --dynamic --device cpu - batch_size=1 - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type torchscript --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type onnx --batch_size $batch_size - batch_size=2 - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type torchscript --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type onnx --batch_size $batch_size - batch_size=4 - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type torchscript --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type onnx --batch_size $batch_size - batch_size=8 - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type torchscript --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type onnx --batch_size $batch_size - batch_size=16 - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type torchscript --batch_size $batch_size - python metrice.py --task fps --save_path runs/efficientnet_v2_s --device cpu --model_type onnx --batch_size $batch_size - -### 各导出模型在cpu和gpu上的fps实验: - -实验环境: - -| System | CPU | GPU | RAM | Model | -| :----: | :----: | :----: | :----: | :----: | -| Ubuntu20.04 | i7-12700KF | RTX-3090 | 32G DDR5 6400 | efficientnet_v2_s | - - -#### GPU -| model | Torch FP32 FPS | Torch FP16 FPS | TorchScript FP32 FPS| TorchScript FP16 FPS | ONNX FP32 FPS | ONNX FP16 FPS | TensorRT FP32 FPS | TensorRT FP16 FPS | -| :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | -| batch-size 1 | 93.77 | 105.65 | 233.21 | 260.07 | 177.41 | 308.52 | 311.60 | 789.19 | -| batch-size 2 | 94.32 | 108.35 | 208.53 | 253.83 | 166.23 | 258.98 | 275.93 | 713.71 | -| batch-size 4 | 95.98 | 108.31 | 171.99 | 255.05 | 130.43 | 190.03 | 212.75 | 573.88 | -| batch-size 8 | 94.03 | 85.76 | 118.79 | 210.58 | 87.65 | 122.31 | 147.36 | 416.71 | -| batch-size 16 | 61.93 | 76.25 | 75.45 | 125.05 | 50.33 | 69.01 | 87.25 | 260.94 | -| batch-size 32 | 34.56 | 58.11 | 41.93 | 72.29 | 26.91 | 34.46 | 48.54 | 151.35 | -| batch-size 64 | 18.64 | 31.57 | 23.15 | 38.90 | 12.67 | 15.90 | 26.19 | 85.47 | - -#### CPU -| model | Torch FP32 FPS | Torch FP16 FPS | TorchScript FP32 FPS| TorchScript FP16 FPS | ONNX FP32 FPS | ONNX FP16 FPS | TensorRT FP32 FPS | TensorRT FP16 FPS | -| :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | -| batch-size 1 | 27.91 | Not Support | 46.10 | Not Support | 79.27 | Not Support | Not Support | Not Support | -| batch-size 2 | 25.26 | Not Support | 24.98 | Not Support | 45.62 | Not Support | Not Support | Not Support | -| batch-size 4 | 14.02 | Not Support | 13.84 | Not Support | 23.90 | Not Support | Not Support | Not Support | -| batch-size 8 | 7.53 | Not Support | 7.35 | Not Support | 12.01 | Not Support | Not Support | Not Support | -| batch-size 16 | 3.07 | Not Support | 3.64 | Not Support | 5.72 | Not Support | Not Support | Not Support | diff --git a/v1.3-update_log.md b/v1.3-update_log.md deleted file mode 100644 index ba3c993..0000000 --- a/v1.3-update_log.md +++ /dev/null @@ -1,6 +0,0 @@ -# pytorch-classifier v1.3 更新日志 - -1. 增加[repghost](https://arxiv.org/abs/2211.06088)模型. -2. 推理阶段把模型中的conv和bn进行fuse. -3. 发现mnasnet0_5有点问题,暂停使用. -4. torch.no_grad()更换成torch.inference_mode(). \ No newline at end of file