# Benchmark on CIFAR10 (50k+10k)
## Table of Contents
[TOC]
## Models
- GreenAINet (porting from gv856.py)
- [MobileNetV2](https://github.com/kuangliu/pytorch-cifar/blob/ab908327d44bf9b1d22cd333a4466e85083d3f21/models/mobilenetv2.py#L40)
- [ResNet18](https://github.com/kuangliu/pytorch-cifar/blob/ab908327d44bf9b1d22cd333a4466e85083d3f21/models/resnet.py#L100)
- [ResNet34](https://github.com/kuangliu/pytorch-cifar/blob/ab908327d44bf9b1d22cd333a4466e85083d3f21/models/resnet.py#L103)
- [VGG11](https://github.com/kuangliu/pytorch-cifar/blob/ab908327d44bf9b1d22cd333a4466e85083d3f21/models/vgg.py#L14)
This benchmark adopts MobileNetV2, ResNet18, ResNet34 and VGG11 from this [github repo](https://github.com/kuangliu/pytorch-cifar).
## Environment & Configuration
- HW/SW
- Python3.6
- Pytorch1.0
- Graphic card: GeForce GTX 1080Ti on spd7
- Training Config
- Use no Data Augmentation
- 50 epochs
- Loss function: [`MultiMarginLoss(p=2)`](https://pytorch.org/docs/stable/nn.html#multimarginloss)
- Optimize method: [`SGD`](https://pytorch.org/docs/stable/optim.html#torch.optim.SGD) with momentum 0.9
- L1 weight decay: $5\times 10^{-4} \times 0.15$
- L2 weight decay: $5\times 10^{-4} \times 0.85$
- Learning rate scheduler $$lr(t)=\frac{1}{\alpha(t+t_0)}$$ where $t_0=\frac{1}{\alpha\times lr(0)},\alpha=0.001$, $lr(0)$ is the initial learning rate.
- Initial learning rate (hard to determine manually)
- ResNet18, ResNet34, MobileNetV2, VGG11
- 0.1
- GreenAINet
- 0.005
## Comparison
| | num_learn_params | num_learn_params | avg_secs_epoch | best_val_acc |
| ----------- | ---------------: | ---------------: | -------------: | -----------: |
| MobileNetV2 | 2.28M | 12800 | 39.864 | 0.8176 |
| ResNet18 | 11.17M | 5120 | 32.268 | 0.8062 |
| ResNet34 | 21.28M | 5120 | 58.000 | 0.8223 |
| VGG11 | 9.23M | 5120 | 25.824 | 0.7853 |
| gv856 | 0 (batch0: 0.1M) | 2.27M | 221.08 | 0.8098 |
| gv972 | 0 (batch0: 0.34M)| 2.42M | 137.23 | 0.8271 |
| ResNet101 | 42.49M | 20480 | 244.11 | 0.8150 |
| VGG16 | 14.72M | **18.91M** | **51.15** | **0.7988** |
GAC 在 accuracy 上是跟其他 Deep CNN 實力相當的,最大的問題在於計算時間,一個 epoch 為 137 秒相當於 2 倍的 ResNet34。
## Architecture of ResNet34 & GreenAI(gv856.py)
- ResNet34: 深, 狹窄
- GreenAI: 淺, 寬


## Bottleneck Layer (ResNet)

## Benchmark (2019/07/16)
- L1 weight decay: $5\times 10^{-4} \times 0$
- L2 weight decay: $5\times 10^{-4} \times 1$
| | | num_learn_params | avg_secs_epoch | best_val_acc |
| -------- |------| ---------------: | --------------: | ------------: |
| gv972 |`p=2` | 2.76M | 137.23 | 0.8271 |
| gv972 |`p=1` | 2.76M | 138.84 | 0.8251 |
| gv856 |`p=2` | 2.37M | 221.08 | 0.8106 |
| gv856 |`p=1` | 2.37M | 219.36 | 0.8031 |
## Benchmark (2019/07/24 MTL data)
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | 80.002 | 0.8506 |
| ResNet18 | 22.586 | 0.8584 |
| ResNet34 | 36.689 | 0.8543 |
| MobileNetV2 | 26.841 | 0.8589 |
| VGG11 | 18.770 | 0.8559 |
## Benchmark (2019/08/13 MTL data - good/FM)
data directory: ~/alfos/benchmark/MTL_data/data/
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | 26.598 | 0.9838 |
| ResNet18 | | 0.9878 |
| ResNet34 | 12.321 | 0.9895 |
| MobileNetV2 | | |
| VGG11 | | |
gv972 confusion matrix
[[1979 9]
[ 27 280]]
ResNet34 confusion matrix
[[1985 3]
[ 20 287]]
data directory: ~/alfos/benchmark/MTL_data/data/data2
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | | 0.9160 |
| ResNet18 | | 0.9878 |
| ResNet34 | | 0.9895 |
| MobileNetV2 | | |
| VGG11 | | |
gv972
[[1149 25]
[ 144 1030]]
## Benchmark (2019/08/13 MTL data - good/FM/Scratch_Gold)
### data directory: ~/alfos/benchmark/MTL_data/data/data3
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | 18.665 | 0.9205 |
| ResNet18 | 10.977 | 0.9673 |
| ResNet34 | | |
| MobileNetV2 | | |
| VGG11 | | |
gv972
[[7003 215 319]
[ 25 16 9]
[ 35 7 51]]
Recall: [0.9291495289903144, 0.32, 0.5483870967741935]
Precision: [0.9915050261928359, 0.06722689075630252, 0.1345646437994723]
ResNet18
[[7358 35 144]
[ 29 13 8]
[ 31 0 62]]
Recall: [0.9762504975454425, 0.26, 0.6666666666666666]
Precision: [0.9919115664599623, 0.2708333333333333, 0.2897196261682243]
### data directory: ~/alfos/benchmark/MTL_data/data/data4
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | 33.168 | 0.9388 |
| ResNet18 | 12.316 | 0.9773 |
| ResNet34 | | |
| MobileNetV2 | | |
| VGG11 | | |
gv972
[[7107 118 271]
[ 38 18 6]
[ 34 3 85]]
Recall: [0.9481056563500534, 0.2903225806451613, 0.6967213114754098]
Precision: [0.9899707480150439, 0.12949640287769784, 0.23480662983425415]
ResNet18
[[7410 20 66]
[ 43 18 1]
[ 43 0 79]]
Recall: [0.9885272145144077, 0.2903225806451613, 0.6475409836065574]
Precision: [0.9885272145144077, 0.47368421052631576, 0.541095890410959]
### data directory: ~/alfos/benchmark/MTL_data/data/data5
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | 38.857 | 0.7880 |
| ResNet18 | 14.217 | 0.8675 |
| ResNet34 | | |
| MobileNetV2 | | |
| VGG11 | | |
gv972
[[5779 926 451]
[ 53 76 43]
[ 116 39 197]]
Recall: [0.9963666852990497, 0.0, 0.28125]
Precision: [0.9481382978723404, 0.0, 0.6226415094339622]
ResNet18
[[6745 51 360]
[ 95 18 59]
[ 148 14 190]]
Recall: [0.9425656791503634, 0.10465116279069768, 0.5397727272727273]
Precision: [0.9652261018889525, 0.21686746987951808, 0.31198686371100165]
## Benchmark (2019/08/20 MTL data)
source:
- training: `/data/spd/ash/FM_benchmarking_6000/training_files`
- testing: `/data/spd/ash/FM_benchmarking_6000/testing_files/image_partition`
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | | |
| ResNet18 | NA | 0.8516 |
| ResNet101 | NA | 0.8435 |
| VGG16 | NA | 0.8460 |
ResNet18
[[7612 233]
[1957 5888]]
Recall: [0.9702995538559592, 0.7505417463352454]
Precision: [0.7954854216741561, 0.9619343244567881]
ResNet101
[[7673 172]
[2275 5570]]
Recall: [0.9780752071383046, 0.710006373486297]
Precision: [0.7713108162444713, 0.970045280390108]
VGG16
[[7480 365]
[1915 5930]]
Recall: [0.9534735500318674, 0.7558954748247291]
Precision: [0.7961681745609367, 0.9420174741858618]
---
source FMSM
- training: `/data/spd/ash/FMSM_benchmarking_3000/training_files`
- testing: `/data/spd/ash/FMSM_benchmarking_3000/testing_files/image_partition`
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | | |
| ResNet18 | NA | 0.7566 |
| ResNet101 | NA | 0.7628 |
| VGG16 | NA | 0.7642 |
ResNet18
[[10236 1463]
[ 3914 7785]]
Recall: [0.8749465766304813, 0.665441490725703]
Precision: [0.7233922261484099, 0.8418036332179931]
ResNet101
[[10631 1068]
[ 4338 7361]]
Recall: [0.908710146166339, 0.6291990768441748]
Precision: [0.7102010822366224, 0.8732945782417844]
VGG16
[[10541 1158]
[ 4123 7576]]
Recall: [0.9010171809556372, 0.647576715958629]
Precision: [0.718835242771413, 0.8674147011678498]
---
data8 - source SMScratch
- training: `/data/spd/ash/SMScratch_benchmarking_1200/training_files`
- testing: `/data/spd/ash/SMScratch_benchmarking_1200/testing_files/image_partition`
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | | |
| ResNet18 | NA | 0.7237 |
| ResNet101 | NA | 0.7519 |
| VGG16 | NA | 0.7403 |
ResNet18
[[8826 1261]
[3929 6250]]
Recall: [0.8749876078120353, 0.6140092346988899]
Precision: [0.6919639357114857, 0.8321129010784183]
ResNet101
[[8470 1617]
[3402 6777]]
Recall: [0.8396946564885496, 0.6657824933687002]
Precision: [0.7134433962264151, 0.8073624017155111]
VGG16
[[9170 917]
[4169 6010]]
Recall: [0.9090909090909091, 0.5904312800864525]
Precision: [0.6874578304220706, 0.8676194600837304]
---
data9 - source Scratch_Gold
- training: `/data/spd/ash/Scratch_Gold_benchmarking_2500/training_files`
- testing: `/data/spd/ash/Scratch_Gold_benchmarking_2500/testing_files/image_partition`
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | | |
| ResNet18 | NA | 0.8393 |
| ResNet101 | NA | 0.8511 |
| VGG16 | NA | 0.8445 |
ResNet18
[[5959 535]
[1247 5247]]
Recall: [0.9176162611641515, 0.8079765937788728]
Precision: [0.8269497640854844, 0.9074714631615358]
ResNet101
[[6229 265]
[1593 4901]]
Recall: [0.9591931013242994, 0.7546966430551278]
Precision: [0.7963436461263104, 0.948703058459156]
VGG16
[[6086 408]
[1372 5122]]
Recall: [0.93717277486911, 0.7887280566676933]
Precision: [0.8160364709037276, 0.9262206148282097]
---
data10 - source all 4 class
- training: `/data/spd/ash/all_benchmarking_None/training_files`
- testing: `/data/spd/ash/all_benchmarking_None/testing_files/image_partition`
| | avg_secs_epoch | best_val_acc |
| ----------- | --------------:| ------------:|
| gv972 | | |
| ResNet18 | NA | 0.6114 |
| ResNet101 | NA | 0.5814 |
| VGG16 | NA | 0.6122 |
ResNet18
[[24253 923 1087 5390 4456]
[ 1830 5019 946 30 12]
[ 1303 498 4678 8 7]
[ 3784 84 45 6216 1512]
[ 2362 11 6 3017 4833]]
Recall: [0.6716608047855105, 0.6404236314916422, 0.7203572528487835, 0.533974744437763, 0.4724802033434353]
Precision: [0.723279255636407, 0.768018362662586, 0.6918071576456669, 0.4239819930427665, 0.4466728280961183]
ResNet101
[[19814 1162 1418 6012 7703]
[ 1561 5258 924 59 35]
[ 1011 500 4949 17 17]
[ 1945 36 51 6149 3460]
[ 1396 6 11 1812 7004]]
Recall: [0.5487274640671301, 0.6709199948960062, 0.7620880813058207, 0.5282192251524783, 0.684719913970085]
Precision: [0.7701636413106853, 0.7552427463372594, 0.6730586155310757, 0.43768239732365294, 0.3844338328118997]
VGG16
[[23568 1119 1615 5186 4621]
[ 1624 5341 821 35 16]
[ 938 466 5072 6 12]
[ 2790 123 75 6543 2110]
[ 2186 36 51 1971 5985]]
Recall: [0.6526904649810297, 0.6815107821870614, 0.7810286418232214, 0.5620651146808694, 0.5851011829113305]
Precision: [0.7576673310615315, 0.7538461538461538, 0.6643961226093791, 0.4761662178880722, 0.4696327683615819]