ECNUSR / PureConvSR-AIM2022

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

README for submit(English)

PureConvSR won the third place in the Mobile AI & AIM: Real-Time Image Super-Resolution Challenge (website / report).

This is the code written during the competition. We deliberately open-sourced all the records of our attempts to the readers to show the birth process of PureConvSR. The latest and more standardized code can be found in ETDS, which is an optimized version of PureConvSR.

介绍

主要代码改自SR_Mobile_Quantization,针对比赛高频率修改模型的特点,做出一些修改。

开发者注意事项

注意代码符合规范:

pylint -j 16 --rcfile=.pylintrc common/ trials/ *.py | head -n 500

实验

详细情况请见实验表格

1. baseline

python train.py --trial baseline
python train_qat.py --trial baseline --qat_path experiments/baseline/best_status
python convert.py --name baseline

PSNR: 30.0991 | QAT_PSNR: 30.0574

2. baseline_typo_trans

将“重复”、“Add”这两个算子用Cat替代;

cp experiments/baseline experiments/baseline_typo_trans -r
cp tb_logger/baseline tb_logger/baseline_typo_trans -r
python train_qat.py --trial baseline_typo_trans --qat_path experiments/baseline_typo_trans/best_status
python convert.py --name baseline_typo_trans

PSNR: 30.0991 | QAT_PSNR: 29.8804

3. trial1

在【baseline_typo_trans】基础上,将四个3x3卷积,换成1x1卷积和3x3卷积交替;通道数改为32;其余保持一致

python train.py --trial trial1
python train_qat.py --trial trial1 --qat_path experiments/trial1/best_status
python convert.py --name trial1

PSNR: 30.0872 | QAT_PSNR: 30.0259

3. trial2

在【trial2】基础上,将batch size改为32,增加量化训练的轮数;其余保持一致

python train.py --trial trial2
python train_qat.py --trial trial2 --qat_path experiments/trial2/best_status
python convert.py --name trial2

PSNR: 30.0937 | QAT_PSNR: 30.0173

3. trial3

在trial1的基础上,有两个算子我写成一层了,恢复回去,原则上两个等价

python train.py --trial trial3
python train_qat.py --trial trial3 --qat_path experiments/trial3/best_status
python convert.py --name trial3

PSNR: 30.0714 | QAT_PSNR: 29.9898

4. trial4

在trial1的基础上,赋值不是准确的0和1,而是偏移一丢丢。且qat训练的时候减小lr

cp experiments/trial1 experiments/trial4 -r
cp tb_logger/trial1 tb_logger/trial4 -r
python train_qat.py --trial trial4 --qat_path experiments/trial4/best_status
python convert.py --name trial4

PSNR: 30.0872 | QAT_PSNR: 30.0173

5. trial5

在trial1的基础上,添加EMA策略

cp experiments/trial1 experiments/trial5 -r
cp tb_logger/trial1 tb_logger/trial5 -r
python train_qat.py --trial trial5 --qat_path experiments/trial5/best_status
python convert.py --name trial5

PSNR: 30.0872 | QAT_PSNR: 30.0340

6. trial6

在trial5的基础上,增加一个1x1卷积

python train.py --trial trial6
python train_qat.py --trial trial6 --qat_path experiments/trial6/best_status
python convert.py --name trial6

PSNR: 30.0956 | QAT_PSNR: 30.0397

7. trial7

在trial5的基础上,1x3改回3x3卷积,通道数目改回28

python train.py --trial trial7
python train_qat.py --trial trial7 --qat_path experiments/trial7/best_status
python convert.py --name trial7

PSNR: 30.1632 | QAT_PSNR: 30.1139

8. trial8

在trial5的基础上,中间的两组3x3+1x1改回2x2+2x2卷积

python train.py --trial trial8
python train_qat.py --trial trial8 --qat_path experiments/trial8/best_status
python convert.py --name trial8

PSNR: 30.0999 | QAT_PSNR: 30.0232

9. trial9

在trial5的基础上,取消1x1卷积,多了一个3x3卷积,通道数下降到28

python train.py --trial trial9
python train_qat.py --trial trial9 --qat_path experiments/trial9/best_status
python convert.py --name trial9

PSNR: 30.0941 | QAT_PSNR: 30.0397

10. trial10

在trial5的基础上,1x1卷积变3x3卷积,通道数上升至48

python train.py --trial trial10
python train_qat.py --trial trial10 --qat_path experiments/trial10/best_status
python convert.py --name trial10

PSNR: 30.3244 | QAT_PSNR: 30.2501

11. trial11

只有一个卷积和一个pixelshuffle

python train.py --trial trial11
python train_qat.py --trial trial11 --qat_path experiments/trial11/best_status
python convert.py --name trial11

PSNR: 28.1597 | QAT_PSNR: 28.0257

12. trial12

在trial5的基础上,把10替换成trial11的权重

python train.py --trial trial12
python train_qat.py --trial trial12 --qat_path experiments/trial12/best_status
python convert.py --name trial12

PSNR: 30.1213 | QAT_PSNR: 30.0592

13. trial13

在trial9的基础上,优化掉cat算子

python train_qat.py --trial trial13 --qat_path experiments/trial9/best_status
python remove_clip_fintune.py --trial trial13 --qat_path experiments/trial13_qat/best_status
python convert.py --name trial13 --clip

PSNR: 30.0941 | QAT_PSNR: 30.0022

14. trial14

在trial13的基础上,层数少了一层,通道数多了一点点(看来还是层数更靠谱)

python train.py --trial trial14
python train_qat.py --trial trial14 --qat_path experiments/trial14/best_status
python remove_clip_fintune.py --trial trial14 --qat_path experiments/trial14_qat/best_status
python convert.py --name trial14 --clip

PSNR: 29.9880 | QAT_PSNR: 29.9001

15. trial15

3x28(其实是3x31)的对比实验,消融的是 cat -> conv

python train.py --trial trial14
python train_qat.py --trial trial14 --qat_path experiments/trial14/best_status
python remove_clip_fintune.py --trial trial14 --qat_path experiments/trial14_qat/best_status
python convert.py --name trial14 --clip

PSNR: 30.0483 | QAT_PSNR: 29.8979

16. trial16

5x24,通道小了,层数多了,可是参数多了(运行速度可能变慢,提交一下试试),可以效果没有变好

python train.py --trial trial16
python train_qat.py --trial trial16 --qat_path experiments/trial16/best_status
python remove_clip_fintune.py --trial trial16 --qat_path experiments/trial16_qat/best_status
python convert.py --name trial16 --clip

PSNR: 30.1062 | QAT_PSNR: 30.0057

17. trial17

3x45

python train.py --trial trial17
python train_qat.py --trial trial17 --qat_path experiments/trial17/best_status
python remove_clip_fintune.py --trial trial17 --qat_path experiments/trial17_qat/best_status
python convert.py --name trial17 --clip

PSNR: 30.2608 | QAT_PSNR: 30.1648

18. trial18

6x24,可能层数多,残差的结果损失越多

python train.py --trial trial18
python train_qat.py --trial trial18 --qat_path experiments/trial18/best_status
python remove_clip_fintune.py --trial trial18 --qat_path experiments/trial18_qat/best_status
python convert.py --name trial18 --clip

PSNR: 30.1369 | QAT_PSNR: 30.0109

19. trial19

3x61

python train.py --trial trial19
python train_qat.py --trial trial19 --qat_path experiments/trial19/best_status
python remove_clip_fintune.py --trial trial19 --qat_path experiments/trial19_qat/best_status
python convert.py --name trial19 --clip

PSNR: 30.3237 | QAT_PSNR: 30.2237

20. trial20

3x37

python train.py --trial trial20
python train_qat.py --trial trial20 --qat_path experiments/trial20/best_status
python remove_clip_fintune.py --trial trial20 --qat_path experiments/trial20_qat/best_status
python convert.py --name trial20 --clip

PSNR: 30.1832 | QAT_PSNR: 30.1008

21. trial21

4x48

python train_qat.py --trial trial21 --qat_path experiments/trial10/best_status
python remove_clip_fintune.py --trial trial21 --qat_path experiments/trial21_qat/best_status
python convert.py --name trial21 --clip

PSNR: 30.3244 | QAT_PSNR: 30.1851

23. trial23

3x28,31 rep

python train.py --trial trial23
python train_qat.py --trial trial23 --qat_path experiments/trial23/best_status
python remove_clip_fintune.py --trial trial23 --qat_path experiments/trial23_qat/best_status
python convert.py --name trial23 --clip

PSNR: 30.1070 | QAT_PSNR: 30.0150

24. trial24

3x29,32 rep

python train.py --trial trial24
python train_qat.py --trial trial24 --qat_path experiments/trial24/best_status
python remove_clip_fintune.py --trial trial24 --qat_path experiments/trial24_qat/best_status
python convert.py --name trial24 --clip

PSNR: 30.1395 | QAT_PSNR: 30.0487

About


Languages

Language:PureBasic 72.6%Language:Python 27.4%