初始化超参数影响报告 - yubo105139/paper GitHub Wiki

第一波调参

初始化参数影响实验设计

  • 原始模型

    • base_line_1204 基于best_model原始数据集及训练参数复现。
  • 调整学习率

    • lr10e-4: 初始化参数中学习率由10e-5 调整到10e-4

    • lr10e-3: 由于lr10e-4最终未达到完全收敛,将初始化参数中学习率由10e-5 调整到10e-3

  • 调整模型初始化参数

    • weight_init_kaiming_normal:卷积网络权重初始化由默认的kaiming_uniform调整为kaiming_normal。

    • weight_init_xavier_uniform:由于kaiming_normal最终较于原模型收敛的loss值较高,将卷积网络权重初始化由默认的kaiming_uniform调整为xavier_uniform。

  • 调整优化策略

    • warmup10000:初始化参数中warmup_iter由-1调整至10000

      warmup先用小学习率训练,然后每个step增大一点点,直到达到预先设置的学习率时采用最初设置的学习率进行训练,之后的训练过程学习率再根据训练设置学习策略进行衰减,这样有助于使模型收敛速度变快,效果更佳。

训练状态

1.baseline_1204

image-20210705142705041

3.warmup10000

image-20210705144235517

4.l_r 10e-4

image-20210709095211069

5.l_r 10e-3

image-20210709095452672

6.weight init kaiming_normal

image-20210709150204718

7.weight init Xazvier_uniform

image-20210712103626961

模型训练状态比较:

模型 total_loss最终收敛值 psnr表现
base_line 0.58左右 上升后平缓上升
lr10e-4 0.28左右 急速上升后下降
lr10e-3 0.18左右 急速上升后下降
warmup10000 0.60左右 上升后平缓上升
kaiming_normal 2.4左右 上升后平缓上升
Xavier_uniform 0.50左右 上升后平缓上升

增强图ocr测试结果

模型(iter_num) test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
baseline_1204(200k) 222142 99968 184412 38943 44111 47415 636991
baseline_1204(756k) 224425 100031 184689 39084 44227 47679 640135
lr10e-4(50k) 244 1014 308 160 238 148 2112
lr10e-4(200k) 338 1365 370 150 589 210 3022
lr10e-4(600k) 231062 94273 176092 37862 43706 46517 629512
lr10e-4(756k) 230282 93962 175415 37608 43721 46542 627530
lr10e-3(50k) 229940 91259 174137 36604 43735 45103 620778
lr10e-3(100k) 229657 89825 172363 36657 43791 45286 617579
lr10e-3(600k) 224473 88640 169342 35889 43521 44811 606676
lr10e-3(756k) 224041 88163 168923 35640 43621 44327 604715
warmup(600k) 222790 99936 187732 39349 44212 47912 641931
warmup(756k) 223304 100380 187228 39596 44223 47787 642518
kaiming_normal(756k) 375 1519 417 209 881 223 3624
Xavier_uniform(756k) 216355 95005 182878 38173 43792 47141 623344

分析:

  1. 模型的total_loss越小并不代表增强图的ocr检出越多。以上模型中lr10e-3(600k),lr10e-3(756k) 两个total_loss最小,但是其总的检出不如OR。

  2. lr10e-3(50k),lr10e-3(100k)处loss大在0.2~0.24左右,其增强图超越了OR但不如best_model。

  3. lr10e-4 的第50k 以及200k iter的增强图像都处于很糊的状态,在之后的iter处才生成了较清晰的图,而base_line 在200k 就生成了较清晰的增强图, 按理说学习率越大应该越早收敛,可以认为这次学习率的增大,模型的收敛方向发生变化。

  4. lr10e-4的最后的两个model其检出结果都高于OR,但不如best_model

  5. warmup的训练状态以及检出结果都和baseline 差不多。可能由于本身预设的学习率较小,本身训练的iter值较大,使得设置的10000的warmup值在模型的训练过程中影响不大。

  6. kaiming_normal的模型在相同iter下最终的total_loss2.4远大于baseline0.58, 最终的增强图也处于一种很糊糊的状态,最终的检测字符数很低。

  7. Xavier_uniform的模型在相同iter下最终的total_loss0.50略低于baseline0.58, 最终的增强图检出大于OR但逊于best_model。大致可以认为相较于标准分布,使用均匀分布初始化模型收敛更快。

一些生成的增强图效果

原图,best_model, lr10e-3(756k)的增强图

image-20210712180821625

image-20210712181336360

kaiming_normal(756k), Xavier_uniform(756k)生成的增强图

image-20210712181546971

image-20210712181632677

lr10e-4模型第50k,200k,756k个模型生成的增强图

image-20210712181846981

训练的进一步的分析测试

loss相关

关于loss和检出方向不一致的问题。

当调整算法以尝试改进模型时,损失函数应该要能反映模型是否在改进。“损失”应该是能有助于我们了解预测值与实际值之间的差异。 如果无法反映,那么模型就失去了优化方向。

训练完成时各个模型的各个loss值状态

(s为收敛,d为还在下降,s/d 为无法区分是否收敛)

l_total l_gradient l_ocr l_percep l_pix l_seg
默认权重 - 0.001 0.1 0.1 1.0 1
base_line(lr_10e-5) 0.58(d) 3.0e-3(d) 0.01(d) 0.42(d) 0.155(d) 2.6e-5(s/d)
lr_10e-4 0.27(d) 2.84e-3(d) (2~4)e-3(s) 0.15(d) 0.120(d) 1.8e-5(d)
lr_10e-3 0.17(s) 2.46e-3(s) (2~4)e-3(s) 0.08(s) 0.092(s) 1.4e-5(s)
kaiming_normal 2.4(d) 9.8e-3(d) 0.60(d) 1.10(s/d) 0.70(d) 4.0e-5(s/d)
Xavier_uniform 0.50(d) 3.2e-3(s) (2~4)e-3(s) 0.32(d) 0.150(d) 2.2e-5(s)

total_loss主要由l_percep和l_pix影响,loss间的数量级差异较大。lr_10e-3 的loss状态图可以看到,200k出l_percep陡降,total_loss也陡降。

loss降不下去模型无法快速收敛的原因?

猜测可能与loss的梯度量级不同有关,需要根据loss的梯度量级调整loss的权重比。

Gradient domination的问题。 这个问题产生的原因是不同任务的loss的梯度相差过大, 导致梯度小的loss在训练过程中被梯度大的loss所带走。不同的loss, 他们的梯度在训练过程中变化情况也是不一样的;而且不同的loss, 在梯度值相同的时候, 它们在task上的表现也是不同的

关于多任务的loss权重。如果A和B单独训练, 他们在收敛的时候的梯度分别记为 Grad_a, Grad_b, 那么我们只需要在两个任务一起训练的时候, 分别用各自梯度的倒数对两个任务做平衡, 然后统一乘一个scalar就可以了。

多个loss如何平衡?

当loss的数量级相差较大时怎么进行loss的权重设置。

1.经验设置,在验证集上进行调节找最优。

2.将不同loss的权重当做网络参数进行学习。 GradNorm以及https://arxiv.org/abs/1705.07115

3.当做超参数的搜索问题,使用 grid search 使验证集的 loss最小。

不同的loss会出现互相矛盾的现象,不同的loss组合和权重设定影响很大。需要定性地分析不同损失函数部分在最终结果里起到什么作用。

训练过程问题

提到的添加heatmap分支,两个分支一起训练,会收敛到不是很理想的地方,模型难以发挥其效果,在实验中,分别冻结分支,训练另一个分支到收敛,之后再将整个网络解冻一起训练到收敛。

loss relate ref:

神经网络中,设计loss function有哪些技巧?

深度学习的多个loss如何平衡?

小图的增强ocr测试

1806_best_model:使用best_model对1806数据集进行增强

1806_lr3_756k:使用lr3_756k对1806数据集进行增强

测试小图 检出字符总数 实际字符总数 检出字符正确字符总数 识别率 召回率 总图数 错图数
1204_OR 4773 4816 4496 0.942 0.934 1204 189
1204_GT 4813 4816 4518 0.939 0.938 1204 181
1204_best_model 4794 4816 4413 0.921 0.916 1204 211
1204_lr3_756k 4815 4816 4723 0.981 0.981 1204 74
1806_OR 7134 7224 6667 0.935 0.923 1806 309
1806_GT 7224 7224 7224 1.0 1.0 1806 0
1806_best_model 7215 7224 6618 0.917 0.916 1806 321
1806_lr3_756k 7175 7224 6576 0.917 0.910 1806 337

在训练数据集上,完全收敛后的模型(1204_lr3_756k)识别率上得到了很大的提升, 但是在测试数据集上(1806_lr3_756k)识别率下降,说明过拟合。

数据标注的目的是提高识别,为何识别上不去?

lr_10e3(756k)分析检出的原因,识别的原因

pipline1(原图上检测、识别):

pipline2(baseline,增强图上检测、识别):

pipline3(增强图上检测,得到bbox原图上识别):

pipline4(原图上检测得到bbox,原图上crop后对小图增强、识别):

best_model使用不同pipline在不同测试集上的检出结果。

pipline test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
1 198391 97004 182864 37865 43771 46914 606809
2 227294 100814 186943 39536 44277 47496 646360
3 227946 101659 187679 39522 43875 47793 648474
4 197692 96265 183252 37488 44007 46431 605134

测pipline1原图检出一定要注释掉import enhance ,并在predict_det.py 文件下添加 import pycuda.autoinit 否则使用不同的enhance模型会对检出结果有影响。

lr_10e3(756k)使用不同pipline在不同测试集上的检出结果。

pipline test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
1 198391 97004 182864 37865 43771 46914 606809
2 225495 88216 170078 35806 43849 44722 608166
3 233908 95718 180103 38023 43698 46853 638303
4 187378 88499 174366 35477 43522 43893 573135

结论:

pipline3表现最好,pipline4最差,增强利于检出不利于识别。

通过测试大量中间模型,寻找loss和检出的关系。

total_loss 、psnr和检出的关系

模型(iter_num) loss psnr test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
OR - 199571 97042 183013 38104 43881 46583 608194
best_model(200k) - 227336 100888 185281 39356 44174 47643 644678
baseline1204(2k,111epoch) 1.351 6.2007 11111 22928 28789 8597 19840 11250 102515
baseline1204(4k,222epoch) 1.236 6.4545 35160 45649 109779 20194 38314 26782 275878
baseline1204(10k,555epoch) 1.155 6.8861 165298 74492 160270 31092 43872 39870 514894
baseline1204(20k) 0.963 7.7075 180467 95872 184535 38318 44130 47614 590936
baseline1204(30k) 0.882 8.3008 191934 98425 187515 39309 43962 47988 609133
baseline1204(50k) 0.795 8.9425 201063 99425 187626 39128 44074 47747 608063
baseline1204(100k) 0.653 9.7742 220364 100163 185752 38644 44045 47675 636643
baseline1204(200k) 0.657 9.9889 222142 99968 184412 38943 44111 47415 636991
baseline1204(300k) 0.608 10.0284 222661 99753 184637 38967 44195 47523 637736
baseline1204(400k) 0.617 10.0600 224403 99324 184327 39137 44278 47757 639226
baseline1204(500k) 0.604 10.0900 224105 100305 184110 38983 44320 47568 639391
baseline1204(600k) 0.560 10.1151 224224 99723 184926 38798 44262 47673 639606
baseline1204(756k) 0.586 10.1489 224425 100031 184689 39084 44227 47679 640135
lr10e-3(2k,111epoch) 0.574 10.2129 217331 95871 180249 37879 44149 46843 622322
lr10e-3(4k,222epoch) 0.449 10.5570 228947 96938 180250 38061 44367 47779 636342
lr10e-3(6k) 0.513 10.3971 230841 93182 176343 37955 43996 46257 628574
lr10e-3(8k) 0.362 10.5544 231876 94200 176375 37238 44093 46787 630569
lr10e-3(10k) 0.290 10.5150 231233 93914 176223 37193 44105 46709 629377
lr10e-3(16k) 0.264 10.4540 233241 94121 176519 37025 43975 46870 631751
lr10e-3(20k) 0.253 10.4405 231706 92419 175309 37021 44004 45963 626422
lr10e-3(26k) 0.642 10.0869 229253 89496 174581 36479 43831 45939 619579
lr10e-3(30k) 0.248 10.4279 230519 91258 174220 37117 43951 46313 623378
lr10e-3(40k) 0.223 10.3569 228526 90878 173854 36988 43899 45704 619849
lr10e-3(50k) 0.230 10.3260 229940 91259 174137 36604 43735 45103 620778
lr10e-3(100k) 0.195 10.2464 229657 89825 172363 36657 43791 45286 617579
lr10e-3(200k) 0.170 10.0614 226156 88996 171092 36065 43714 45073 611096
lr10e-3(300k) 0.171 10.0358 224615 87740 170335 35965 43747 44769 607171
lr10e-3(600k) 0.169 10.0080 224473 88640 169342 35889 43521 44811 606676
lr10e-3(756k) 0.174 9.9977 224041 88163 168923 35640 43621 44327 604715
关系图(点为baseline1204, 三角为lr10e-3)
total_loss 和检出的关系 image-20210722114048945
psnr和total_loss的关系 image-20210722113605623
psnr和检出的关系(移除了psnr<9 的点) image-20210722113312192
  • 多组实验的total_loss 表现都是在0.18左右达到收敛,但是total_loss 在0.6左右检出值最优
  • 相同的psnr值,检出数相差可以很大,推论:psnr和检出没什么干系。

对比每个loss组成和检出的关系

模型(iter_num) loss l_pix l_per l_grad l_seg l_ocr 总共识别字符数
默认权重 - 1 0.1 0.001 1 0.1
baseline1204(2k,111epoch) 1.351 2.9165e-01 9.3406e-01 3.4648e-03 4.8700e-04 1.2110e-01 102515
baseline1204(4k,222epoch) 1.236 2.7110e-01 8.0909e-01 3.5889e-03 3.2826e-04 1.5150e-01 275878
baseline1204(10k,555epoch) 1.155 2.3637e-01 7.5331e-01 3.5802e-03 9.2775e-05 1.6143e-01 514894
baseline1204(20k) 0.963 2.2273e-01 6.6270e-01 3.7540e-03 5.9486e-05 7.4145e-02 590936
baseline1204(30k) 0.882 1.8938e-01 6.1364e-01 3.5402e-03 3.0466e-05 7.5153e-02 609133
baseline1204(50k) 0.795 1.8443e-01 5.6089e-01 3.5417e-03 3.5417e-03 4.6343e-02 608063
baseline1204(100k) 0.653 1.6972e-01 4.6261e-01 3.3870e-03 2.6466e-05 1.7121e-02 636643
baseline1204(200k) 0.657 1.6192e-01 4.3615e-01 3.0386e-03 3.6951e-05 5.5690e-02 636991
baseline1204(300k) 0.608 1.5288e-01 4.4025e-01 3.0458e-03 2.5142e-05 1.2240e-02 637736
baseline1204(400k) 0.617 1.6464e-01 4.3723e-01 3.1304e-03 4.2757e-05 1.2002e-02 639226
baseline1204(500k) 0.604 1.5041e-01 4.3033e-01 2.9661e-03 2.1230e-05 2.0188e-02 639391
baseline1204(600k) 0.560 1.4367e-01 4.0717e-01 2.8991e-03 1.8555e-05 5.5190e-03 639606
baseline1204(756k) 0.586 1.5300e-01 4.1619e-01 2.9868e-03 2.9853e-05 1.3538e-02 640135
lr10e-3(2k,111epoch) 0.574 1.4767e-01 3.9756e-01 3.1523e-03 2.3951e-05 2.5522e-02 622322
lr10e-3(4k,222epoch) 0.449 1.2961e-01 2.8770e-01 3.0113e-03 2.1443e-05 2.8300e-02 636342
lr10e-3(6k) 0.513 1.3636e-01 3.3041e-01 2.9646e-03 3.7195e-05 4.3096e-02 628574
lr10e-3(8k) 0.362 1.2607e-01 2.2903e-01 2.9155e-03 2.6014e-05 3.5500e-03 630569
lr10e-3(10k) 0.290 1.1317e-01 1.7239e-01 2.7615e-03 1.6480e-05 1.4499e-03 629377
lr10e-3(16k) 0.264 1.0889e-01 1.5007e-01 2.6420e-03 1.4535e-05 2.3820e-03 631751
lr10e-3(20k) 0.253 1.0554e-01 1.4288e-01 2.6647e-03 1.3967e-05 1.7751e-03 626422
lr10e-3(26k) 0.642 1.4032e-01 4.0103e-01 3.1131e-03 2.8016e-05 9.7438e-02 619579
lr10e-3(30k) 0.248 1.0662e-01 1.3617e-01 2.7521e-03 1.5284e-05 1.9468e-03 623378
lr10e-3(40k) 0.223 1.0372e-01 1.1567e-01 2.6794e-03 1.4630e-05 1.2809e-03 619849
lr10e-3(50k) 0.230 9.7411e-02 1.1919e-01 2.5340e-03 1.2232e-05 1.1173e-02 620778
lr10e-3(100k) 0.195 9.5331e-02 9.6108e-02 2.5372e-03 1.1723e-05 1.1236e-03 617579
lr10e-3(200k) 0.170 8.9296e-02 7.7286e-02 2.4087e-03 9.7356e-06 9.5730e-04 611096
lr10e-3(300k) 0.171 9.1674e-02 7.5246e-02 2.4609e-03 1.2222e-05 1.0662e-03 607171
lr10e-3(600k) 0.169 9.0441e-02 7.5284e-02 2.4490e-03 1.0392e-05 1.0678e-03 606676
lr10e-3(756k) 0.174 9.5658e-02 7.5309e-02 2.5890e-03 1.2271e-05 8.4880e-04 604715

对上表数据作图:

各个loss和检出的关系(点为baseline1204, 三角为lr10e-3;去除检出小于300000)
l_pix 和检出字符 image-20210726110650694
l_per和检出字符 image-20210726110425091
l_grad和检出字符 image-20210726110813971
l_seg和检出字符 image-20210726111738257
l_ocr和检出字符 image-20210726112320916

l_pix,l_per,l_grad 表现趋势一致。

l_seg在较大时检出数也可以很大, l_seg的影响不大。

l_ocr在loss跨度很大的范围可以得到相当的检出结果。

中间模型生成的增强图

增强图baseline1204(2k 、4k、 10k iter)

image-20210716090204532

增强图lr10e-3(2k 、4k、 10k iter)

image-20210716090347654

增强图lr10e-3(16k 、20k、 26k iter)

image-20210721103736125

增强图lr10e-3(30k 、40k、50k iter)

image-20210721104213971

增强图lr10e-3(100k 、600k、756k iter)

image-20210721104535843

lr3_756模型的增强效果

训练集中的数据测试

image-20210713103618732 image-20210713103739632 image-20210713104120233
image-20210713104902384 image-20210713105034247 image-20210713105203432

测试集小图增强测试

左边的图为原图和gt,右边的图为best_model增强 和lr3_756增强

image-20210713113011541

image-20210713113205855

image-20210713113306600

image-20210713113345543

image-20210713113919585

image-20210713114332874

测试集上有的原图学习到了去噪,因为该图在训练集出现过。

第二波调参

第一波训练总结

baseline1204

baseline1806

学习率为10-4

学习率为10-3

warm_up_10000

weight_init_kaiming_normal

weight_init_Xavier_uniform

目的:

初始化参数的影响,模型训练过慢,模型尚未收敛的原因。

结论:

  • 学习率为10e-3 可以在3000个epoch左右达到收敛,说明默认的学习率10-5过小,训练12500个epoch还未达到收敛,训练速度慢与其有关;

  • 增强图检出字符数和模型的total_loss不一致,并非total_loss越小检出越多的关系。

  • 使用均匀分布做初始化收敛更快;

  • 各个loss的作用以及权重设置需要进行确认和调整;

第二波训练

在baseline默认设置上,控制变量调节:

学习率为10-3, decay为10-4

学习率为10-3, decay为10-3

初始化为Xavier_uniform, 学习率为10-4

初始化为Xavier_uniform, 学习率为10-3

初始化为Xavier_uniform, 学习率为10-3, decay为10-5

学习率为10-3,loss权重全设置为1

学习率为10-3,移除率l_per ,其他loss权重设置为1

学习率为10-3,只留l_pix, l_seg 权重为1

学习率为10-3,decay为10-3, 只留l_pix, l_seg 权重为1

目的:

  • 学习率为10-3时,衰减权重怎样设置

  • 初始化为Xavier_uniform,不同学习率的调节,与kaiming_uniform对比

  • 不同loss的影响

学习率lr3加衰减实验
学习率为10-3 image-20210728113742098
学习率为10-3, decay为10-4 image-20210728152036201
学习率为10-3, decay为10-3 image-20210728152222230

结论:

  • lr为10-3 ,decay设置为0,10e-4,10e-3 其学习率的变化都一样。在100k iter处由10-3 衰减到2.5*10-4 ,然后在200k iter处衰减到6.25*10-5 直到训练结束。
  • 训练表中衰减率不一样但学习率的变化却一样。进一步学习发现,此处的adam优化器中的设置的decay与平常的学习率衰减权重有所不一样。具体参考:优化器和学习率的衰减权重
  • 该训练中的学习率主要与其调度策略的参数设置有关。
初始化为Xavier_uniform实验
学习率为10-4 image-20210728153308930
学习率为10-3 image-20210728153353344
学习率为10-3, decay为10-5 image-20210728153436969

多组模型进行测试,验证训练收敛后的模型增强图的检出字符数:

模型(iter_num) test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
lr3(11812epoch) 224041 88163 168923 35640 43621 44327 604715
lr3_decay10-4(11812epoch) 226226 86283 168807 35736 43451 44400 604903
lr3_decay10-3(11812epoch) 235891 91524 171588 37068 43803 46766 626,640
Xavier_uniform_lr3(11812epoch) 217267 83844 168285 35263 43560 43557 591776

增强图图像对比,从左到右lr3, lr3_decay10-4,lr3_decay10-3,Xavier_uniform_lr3:

image-20210729180149626

结论:

  • 对比Xavier_uniform和kaiming_uniform的训练状态, Xavier_uniform收敛速度稍快。

  • 使用10-3的lr时total_loss最终都在0.18左右收敛。

  • 多个收敛后的模型检出结果对比,收敛模型生成的增强图效果基本一致,检出字符数表现也都不太好。

loss实验

loss实验
1.loss权重全设置为1 image-20210728155100428
2.移除l_per ,其他loss权重设置为1 image-20210728155313310
3.lr 10-3 只保留l_pix和l_seg 权重都为1 image-20210726162741660
4.学习率为10-3,只留l_pix, l_seg 权重为1,decay为10-3 image-20210728161210796
5.学习率为10-3,只保留l_pix image-20210810095540338
6.学习率为10-3,只保留l_per image-20210810095732304
7.只保留了l_pix和l_ocr image-20210816091208956
8.只保留了l_pix和l_ocr和l_seg image-20210816091407070
9.只保留了l_ocr image-20210816101707968
10.只保留l_ocr和l_seg image-20210830110833255
只保留了l_pix,l_ocr和l_seg,l_per image-20210830095613191

第三波训练

1.训练代码修改

增强模型训练代码整理。训练代码位置:BasicText

  • c++扩展包导致的环境依赖问题。只需要在本机重新编译,不再需要打包train环境。
  • torch_ocr子模块拉取问题
  • 添加多种学习率调度策略,添加学习率曲线
  • 添加对验证集计算loss,以及绘制loss曲线
  • 同时使用torch.utils.tensorboard和TensorboardX的问题
  • 验证loss和训练loss分离

各个模型在验证集上的loss状况。使用latest_model测

目的:已训练好的模型在验证集上的各个数值表现和检出字符数的关系。

psnr l_total l_grad l_ocr l_per l_pix l_seg 总共检出字符数
best_model(200k) 11.1412 8.4104 3.0599 0.8560 4.3231 0.1642 0.0074 644678
baseline_lr5(756k) (0.001,0.1,0.1,1,1) 11.0515 8.3087 3.0830 0.8630 4.1906 0.1647 0.0073 640135
baseline_lr4(756k) (0.001,0.1,0.1,1,1) 10.5058 8.9707 3.0787 2.2659 3.4798 0.1397 0.0067 627530
baseline_lr3(756k)(0.001,0.1,0.1,1,1) 10.3005 8.3141 3.0056 1.7952 3.3781 0.1257 0.0085 604621
权重全为1 10.2191 8.7827 2.9275 2.3206 3.3823 0.1426 0.0098 603384
rm_per,其他为1 9.8202 10.2339 3.0862 2.3903 4.6230 0.1137 0.0206 508350
只留l_pix和l_seg 权重都为1 9.7627 9.2014 3.0056 2.1260 3.9465 0.1015 0.0219 556912
只保留l_pix 9.7388 13.6995 3.0174 2.2051 3.9016 0.1021 4.4732 558832
只保留l_per 7.4538 18.7989 6.8874 7.7824 3.6795 0.3767 0.0729 547455
增加实验
只保留l_ocr 2.2175 50.5127 10.7321 1.6902 35.4916 2.5507 0.0431 18810
只保留l_ocr和l_seg 2.0994 46.5192 9.9674 1.7863 32.2077 2.5492 0.0087 -
只保留了l_pix和l_ocr 10.0543 10.8565 2.8794 2.8243 4.9785 0.1087 0.0656 540485
只保留了l_pix,l_ocr和l_seg 9.9689 10.5867 2.9328 2.4721 5.0538 0.1110 0.0171 551644
只保留了l_pix,l_ocr和l_seg,l_per 10.3309 8.5965 3.0681 1.8299 3.5582 0.1323 0.0081
模型 test_257 test_250 test_295 test_96 test_93 test_97 总共检出字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
baseline_lr3(0.001,0.1,0.1,1,1) 224153 88078 168766 35717 43559 44348 604621
权重全为1 221770 85939 171715 35318 43381 45261 603384
rm_per,其他为1 173902 71466 154204 27907 41249 39622 508350
只留l_pix和l_seg 权重都为1 196350 80302 163523 31995 42440 42002 556912
只保留l_pix 197922 79278 164472 33010 42456 41694 558832
只保留l_per 183861 82317 163369 32955 43554 41399 547455
只保留l_ocr 2404 3240 3663 1441 3404 4658 18810
只保留l_ocr和l_seg 307 744 481 119 145 33 1829
只保留l_pix,l_ocr 194648 73753 159893 30326 41304 40561 540485
只保留了l_pix,l_ocr和l_seg 200929 74892 161442 30927 42475 40979 551644
只保留了l_pix,l_ocr和l_seg,l_per 219006 82327 167834 34863 43042 44159 591231
  • 训练集上loss收敛后的模型(加粗的这些模型)生成的增强图,检出字符数都下降了。

  • 由best_model在验证集上的表现, 可以看到psnr以及l_ocr和l_seg的重要性,psnr的值相较与其他模型最高,两个loss的值相较与其他模型最小,其他loss与其他模型相比差异不大。根据该表现,增加了最后四组 保留l_ocr和l_seg的实验。

  • 根据最后几组实验(添加了验证集的loss), 可以看到在100k个iter也就是1500多个epoch左右,验证集上的loss都达到了一个低点,而训练集loss整个训练过程一直处于不断收敛的状态。说明模型在训练集上的过拟合。

验证集上表现的有效性测试

目的:是否验证集上的表现能成为一个模型终止训练的标志?即在验证集上表现最好时,模型的泛化能力最好,增强效果最好,检出结果最好?

实验1

取验证集上状态最优的模型,生成增强图,对比与收敛后增强图的效果,测量其检出字符数。

模型 psnr l_total l_grad l_ocr l_per l_pix l_seg 总共检出字符数
best_model(200k) 11.1412 8.4104 3.0599 0.8560 4.3231 0.1642 0.0074 644678
baseline_lr5(756k) (0.001,0.1,0.1,1,1) 11.0515 8.3087 3.0830 0.8630 4.1906 0.1647 0.0073 640135
baseline_lr3(756k)(0.001,0.1,0.1,1,1) 10.3005 8.3141 3.0056 1.7952 3.3781 0.1257 0.0085 604621
只保留了l_pix和l_ocr(100k) 10.9461 9.4164 2.6504 0.5489 6.0678 0.1102 0.0391 614931
只保留了l_pix和l_ocr(50k) 11.0824 9.8436 2.7324 0.4820 6.4682 0.1192 0.0418 621063
只保留了l_pix,l_ocr和l_seg(60k) 11.0541 9.5679 2.7056 0.5059 6.2356 0.1143 0.0066 616638
只保留了l_pix,l_ocr和l_seg(70k) 11.0480 9.3509 2.6819 0.4952 6.0570 0.1103 0.0065 624172
只保留了l_pix,l_ocr和l_seg(80k) 11.0112 9.1931 2.6686 0.5080 5.9016 0.1082 0.0067 620525
模型 test_257 test_250 test_295 test_96 test_93 test_97 总共检出字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
只保留了l_pix和l_ocr(100k) 215831 92619 179457 37609 43322 46093 614931
只保留了l_pix和l_ocr(50k) 220432 93217 180158 37425 43371 46460 621063
只保留了l_pix,l_ocr和l_seg(60k) 218340 92401 179420 37114 43828 45535 616,638
只保留了l_pix,l_ocr和l_seg(70k) 225769 93005 179191 37054 43389 45764 624172
只保留了l_pix,l_ocr和l_seg(80k) 222395 92241 178992 37141 43621 46135 620525

(以上为根据tensorboard图状态,粗略取了大致位置的模型进行的测试,选取依据:psnr较大,l_total 较小)

  • 相较于最终收敛的模型, 验证集上各指标表现好的模型,其检出字符数确实要多。
  • 根据“只保留了l_pix,l_ocr和l_seg(70k)” 与bestmodel的对比, psnr 稍低,各个loss都较bestmodel低, 但l_per 较高, 结果检出稍差。据此,添加训练保留l_pix,l_ocr,l_seg,l_per, 只去除l_grad.
实验2

实验过程:

遍历所有训练得到的模型, 生成验证集的统计值,写入表。 读取验证统计表,排序得到最优值,对前几个最优模型进行检出测评。

  • psnr值最大的前3个模型
  • l_total值最小的前3个模型
  • l_total/psnr 值最小的前3个模型
模型 psnr l_total l_grad l_ocr l_per l_pix l_seg 总共检出字符数
best_model(200k) 11.1412 8.4104 3.0599 0.8560 4.3231 0.1642 0.0074 644678
baseline_lr5(756k) (0.001,0.1,0.1,1,1) 11.0515 8.3087 3.0830 0.8630 4.1906 0.1647 0.0073 640135
baseline_lr3(756k)(0.001,0.1,0.1,1,1) 10.3005 8.3141 3.0056 1.7952 3.3781 0.1257 0.0085 604621
warm_up_10000_66k 11.5609 9.0874 3.1268 0.6518 5.1349 0.1658 0.0081 635213
warm_up_10000_62k 11.552 9.157 3.1355 0.6599 5.1872 0.1662 0.0082 633706
warm_up_10000_52k 11.5417 9.3486 3.1702 0.6547 5.3496 0.166 0.0082 633072
baseline1204_lr3_decay10-4_90k 10.6091 7.0767 2.9156 0.9895 3.0439 0.1228 0.0049 620317
baseline1204_lr3_decay10-4_84k 10.6041 7.0948 2.9269 1.0019 3.0392 0.1219 0.0048 621000
baseline1204_lr3_decay10-4_74k 10.6198 7.1287 2.908 1.0394 3.0541 0.1222 0.0049 618380
loss_weight_all1_bak_14k 10.4449 7.0944 2.8749 0.8655 3.1934 0.1552 0.0054 630184
baseline1806_origin_748k 13.7143 7.1715 2.7027 0.759 3.5845 0.1239 0.0014 623056
baseline1806_origin_744k 13.7135 7.1721 2.7027 0.7583 3.5858 0.124 0.0014 623060
baseline1806_origin_754k 13.7127 7.1689 2.702 0.7588 3.5828 0.1239 0.0014 623437
baseline1806_origin_772k 13.7111 7.1651 2.6996 0.7635 3.5771 0.1236 0.0013 624468
baseline1806_origin_latest 13.7097 7.1652 2.7002 0.7645 3.5754 0.1237 0.0014 623676
baseline1806_origin_770k 13.7116 7.1662 2.7008 0.7635 3.5768 0.1237 0.0014 624184

根据该方法筛选的模型其增强图相比于原图都有提升,但是都未能超过best_model。

此处决定再复现下之前于波得到的模型,看能否得到原始模型越往后训,相较于best_model检出字符越多的结论。

模型 test_257 test_250 test_295 test_96 test_93 test_97 总共检出字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
psnr最大(1204dataset) warm_up_10000_66k 211158 100640 191287 39743 44122 48263 635213
warm_up_10000_62k 209506 100564 191390 39809 44145 48292 633706
warm_up_10000_52k 208255 100598 191817 40274 44017 48111 633072
l_total最小 baseline1204_lr3_decay10-4_90k - - - - - -
loss_weight_all1_bak_14k 234719 91507 176546 37364 43795 46253 630184
baseline1204_lr3_decay10-4_84k - - - - - -
l_total/psnr最小 baseline1204_lr3_decay10-4_90k 231747 89390 171832 37118 43706 46524 620317
baseline1204_lr3_decay10-4_84k 229358 90685 172711 37387 43772 47087 621000
baseline1204_lr3_decay10-4_74k 230302 89845 171894 37174 43709 45456 618380
psnr最大(1806) baseline1806_origin_748k 215220 97300 180895 38653 44110 46878 623056
baseline1806_origin_744k 215147 97347 180775 38847 44153 46791 623060
baseline1806_origin_754k 215607 97218 181301 38621 44043 46647 623437
l_total/psnr最小(1806) baseline1806_origin_772k 216102 97242 181562 38623 44191 46748 624468
baseline1806_origin_latest 215852 97495 180889 38538 44045 46857 623676
baseline1806_origin_770k 215934 97056 181537 38699 44143 46815 624184

再一次对baseline进行复现

目的:

原始baseline越往后训练,相较于best_model,模型的检出字符越多的结论是否正确?

分别在40的服务器上和普通机器上用同样的设置做了复现.

训练状态
v100 image-20210827094227010
2070Ti image-20210830105754757
  • 相较与之前的baseline复现实验 , 使用的验证集不一样,本次复现实验使用的验证集质量更优. 之前的复现结果验证集上的psnr值在持续上升. 此处,其结果表现为过拟合.

进一步对生成的模型做检出测试, 与之前的复现结果进行对比.

字符数格式: 第一次复现结果/tesla_v100复现结果/2070 复现结果

模型(iter_num) test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
baseline1204(4k) 35160/58758/45367 45649/49506/48516 109779/117646/114712 20194/21907/21234 38314/40372/39917 26782/29276/28751 275878/317465/298497
baseline1204(10k) 165298/169557/166362 74492/80055/78868 160270/167492/165686 31092/32861/32729 43872/44091/43905 39870/41323/41189 514894/535379/528739
baseline1204(30k) 191934/207722/194060 98425/100199/98614 187515/187854/187443 39309/40059/39329 43962/43881/44159 47988/47726/48163 609133/627441/611768
baseline1204(50k) 201063/213047/205614 99425/99663/99409 187626/189096/189841 39128/39647/39680 44074/43891/43879 47747/48054/48035 608063/633398/626458
baseline1204(100k) 220364/214980/209842 100163/99067/100171 185752/185511/188777 38644/38684/39133 44045/44013/44218 47675/47856/48178 636643/630111/630319
baseline1204(200k) 222142/217262/211591 99968/98525/100176 184412/184567/188945 38943/39141/39081 44111/44052/44043 47415/47743/47951 636991/631290/631787
baseline1204(400k) 224403/218266/211953 99324/98602/100077 184327/184182/187861 39137/38527/39791 44278/44055/44115 47757/47389/47939 639226/631021/631736
baseline1204(600k) 224105/220817/214178 100305/97346/99244 184110/184319/187761 38983/38820/39616 44320/43957/44198 47568/47577/47676 639391/632836/632673
baseline1204(700k) 224224/220819/214931 99723/97413/99047 184926/184621/187521 38798/38980/39582 44262/43984/44220 47673/47273/47681 639606/633090/632982
baseline1204(800k) 224425/220995/215788 100031/97513/98531 184689/184461/187239 39084/38788/39341 44227/44197/44201 47679/47365/47376 640135/633319/632476
baseline1204(900k) -/220885/216573 -/98180/98692 -/184893/187291 -/38774/39319 -/44050/44147 -/47399/47454 -/634181/633476
baseline1204(1000k) -/221143/216247 -/97526/98399 -/184789/187107 -/38684/39336 -/44072/43981 -/47543/47338 -/633757/632408
baseline1204(1136k) -/221807/216970 -/97623/97937 -/185473/186746 -/38722/39538 -/44164/44036 -/47677/47362 -/635466/632589

结论:

几次复现的实验结果可以看到,检出字符数都未能超过best_model.

原始baseline越往后训练,并没有呈现明显的检出越來越多的趋势.

在两个不同的机器上使用同样的设置复现.可以看到表现基本一致,不管是训练状态的变化趋势还是检出结果,差异都不大.

代码复核

再次验证是否使用的训练代码不同而导致的复现结果不同.

使用余波之前使用的代码及配置, 训练了模型, 进行测试.

image

模型(iter_num) test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
review_model(50万iter) 196010 96004 182691 38588 44111 47125 604529
review_model(52万iter) 195791 95915 182459 38617 44138 47136 604056
review_model(60万iter) 195351 95684 182370 38479 44098 47098 603080
review_model(80万iter) 196354 96664 183031 38604 44012 47280 605945
review_model(100万iter) 196649 96556 182292 38318 43751 47173 604739
review_model(110万iter) 195909 96626 182343 38421 43780 47035 604114
2x_model(60万iter) 203578 96279 183754 38668 43986 47319 613584
re_model(60万iter) 235390 100503 188331 39535 44174 48232 656165

从复现结果看, 往后训练并没有呈现明显的检出越來越多的趋势.

该波复核使用的训练数据集有差异, 需重新复核.

代码复核2

训练状态:

image 实验结果:

模型(iter_num) test_257 test_250 test_295 test_96 test_93 test_97 总共识别字符数
OR 199571 97042 183013 38104 43881 46583 608194
best_model(200k) 227336 100888 185281 39356 44174 47643 644678
review_model(50万iter) 223053 98953 184346 39292 44186 47856 637686
review_model(52万iter) 222907 98678 184629 39170 44165 47750 637299
review_model(60万iter) 223093 98852 183633 39095 44242 47617 636532
review_model(80万iter) 223548 98752 184334 39191 44200 47598 637513
review_model(100万iter) 224387 99140 183333 39348 44122 47373 637703
review_model(108万iter) 225268 98681 183766 39643 44277 47336 638971

余波的结果:

image

该版本和我这边的代码最早的复现配置差异在于loss权重的设置, 该 版本的代码 segloss 权重为10, 之前的复现设置的segloss权重为1.

从复现结果看, 往后训练并没有呈现明显的检出越來越多的趋势. 之后的结果也没有超过bestmodel的.

进一步对比代码, 基本判断 该代码版本和我之前实验的版本一致, 而检出越來越多的训练可能只是一次偶然结果.

增强模型训练超参数影响实验总结

以下结论基于最早的人工标注的1k数据集训练.

  • 模型收敛速度问题

    较少的训练集需要较长的时间收敛, 主要原因是由于学习率设置过小导致, 学习率为10e-3 可以在3000个epoch左右达到收敛,说明默认的学习率10-5过小,训练12500个epoch还未达到收敛,训练速度慢与其有关 . 此外实验表明使用Xavier均匀分布进行初始化模型收敛更快。

  • 模型收敛后增强效果

    多个收敛后的模型检出结果对比,收敛模型生成的增强图视觉效果基本一致,与人工标注图特别像.

  • best_model对小图增强的识别效果

    在1k数据集上,其增强后识别率提高了, 但在其他小图数据集上增强后识别效果下降.

  • pipline的验证结果

    增强利于检出不利于识别,即在增强图上检测得到bbox,原图上切图进行识别效果最好.(在项目enocr_trtzy_final上,以及PaddleOCR2Pytorch上都测试过)

  • 在训练集上出现过的一些噪声图,在测试集上表现的去噪效果很好.(增大训练集可能有很好的效果)

  • loss和检出方向不一致的问题

    多次对不同训练收敛后的模型进行测试, 测得的检出效果很差, 并非total_loss越小检出越多.

    • loss和检出的关系

      • 多组实验的total_loss 表现都是在0.18左右达到收敛,但是total_loss 在0.6左右检出值最优
      • 相同的psnr值,检出数相差可以很大,推论:psnr和检出没什么干系。
    • 每个loss组成和检出的关系

      没发现什么关系,都未呈现单调性(即某个loss值越小检出越多.)

    • 几个loss的影响

      多组针对loss的消融实验在训练8000k iter的last_model上的测试. 在保留当前所有的loss 的时候,检出表现最好.

    • 验证集上的表现和检出的关系

      通过遍历所有训练得到的模型, 对每个模型生成验证集上的统计表. 取psnr值最大或l_total较小的模型进行测试, 这样筛选得到的模型,其增强图相比于原图都有提升(原图在608194, 增强后都在6200或6300左右),但是都未能超过best_model。

  • 原始baseline越往后训练,模型的检出字符并不能越多

    多台机器上的多次复现实验,最终检出差异都不大,且并没有呈现越往后train,检出越來越多的趋势.最后经过与余波的代码,数据集,配置对比然后进行的实验也没有表现出越train检出越多的结果.

变更训练数据集的相关实验

1.只使用人工标注的数据

  • 使用更大量的标注数据进行训练
    • 5785张 issue132实验四 实验(1) 默认设置(未超过bestmodel,最高检出为40k 处的608255, 其他模型检出都只有40w+)
    • 5785张 issue132实验四 实验(2) grad loss权重变为0.01(未超过bestmodel,最优检出为10k处624911,越往后越差 )
    • 23329张 issue158 默认设置(增强后的总的检出均优于原图,但都差于bestmodel,大部分检出量在62w,63w)

2.合成数据.多种添加噪声的方法,如kernelGAN, BSRGAN,Real_ESRGAN. 生成HR-LR对进行训练.

issue126

  • 以txt2img 生成的图为HR图添加噪声
    • Real_ESRGAN降质txt2img做过了(训练集大小53940)检出在20000+, 远低于原图检出.
  • 以人工标注好图为HR 图添加噪声
    • Real-ESRGAN 降质(训练集大小5785), 相较于原图有一定提升,最优在622586
    • BSRGAN降质(训练集大小5785),稍优于原图,最优检出为619515

3.人工标注和合成数据混合

  • BSRGAN和Real-SRGAN及数据组制作的数据集进行1:1:1进行混合作为训练集, 总17355张.issue131(grad loss 设0.1, 有超bestmodel))

  • 多种比例混合issue132

    • 实验三.实验(3) 人工标注图: BSRGAN降质: Real-ESRGAN降质合计28925张,比例为1:2:2, 总图27849张(grad loss 设1, 都超bestmodel,最优在80k,657933)

    • 实验五 人工标注图: BSRGAN降质图:Real-ESRGAN降质图,比例为1:1:2,基数为5785张;总图合计23140(grad loss 设0.001, 有多个模型超bestmodel,最优在282k,646383)

    • 实验六 人工标注图:BSRGAN降质图:Real-ESRGAN降质图,比例为1:2:1,总图合计23140(grad loss 设0.001, 有超bestmodel)

    • 实验七,实验(2) 人工标注图:BSRGAN降质图:Real-ESRGAN降质图,比例为1:3:3,总图为40495张(grad loss 设0.001, 有超bestmodel)(grad loss 设1, 大量超bestmodel, 最优在40k, 663033)

  • 加kernelGAN继续混合issue142

    • 人工标注图:BSRGAN降质图:Real-ESRGAN降质图 : kernelGAN降质图,大致比例为1:1:1:1. 检出优于原图,低于bestmodel.

    • 人工标注图:BSRGAN降质图:Real-ESRGAN降质图 : kernelGAN降质图,比例为1:3:3:3. 检出结果远低于原图,500000左右.

数据集变更实验的总结

纯人工标注的数据训练增强效果 没有人工+降质数据训练增强效果好;目前人工标注图:BSRGAN降质图:Real-ESRGAN降质图,比例为1:3:3效果最佳

⚠️ **GitHub.com Fallback** ⚠️