Skip to content

利用ghost轻量化网络

yubo105139 edited this page Dec 5, 2024 · 1 revision

ghost轻量化enhence模块

轻量化改进方案

  • 将当前的UNet_Seg_SR模型中的卷积块使用ghost_module模块进行替代。

  • 其中classlayer, tail 层处的卷积,以及1*1的卷积不进行替换。

代码位置:https://gitlab.bbwh.loc/zhaosilu/basictext/-/tree/ghost

模型复杂度对比

对conv替换成ghost的模型进行轻量化理论指标的对比。

# 替换前
## ptflops 计算结果
Computational complexity:       0.65 GMac
Number of parameters:           146.83 k

## torchstat 计算结果
Total params: 146,826
Total memory: 4.65MB
Total MAdd: 303.08MMAdd
Total Flops: 152.68MFlops
Total MemR+W: 9.99MB

# 替换ghost后
Computational complexity:       0.39 GMac	#
Number of parameters:           81.15 k 

Total params: 81,150
Total memory: 12.72MB
Total MAdd: 170.27MMAdd
Total Flops: 86.29MFlops
Total MemR+W: 27.88MB

替换后的模型参数量减少近一半,乘加运算次数也减少一半,内存访问消耗增加。

模型训练过程

训练参数设置为baseline的默认训练设置,其中num_block=30,num_feat=8,total_iter=400000。

loss曲线状态:

image-20210621092510621

模型测试结果

检出字符数

test_257 test_250 test_295 test_96 test_93 test_97 test_2w
OR(use_angle_cls) 199571 97042 183013 38104 43881 46583 9525603
train1k(1204张)(baseline) 227336 100888 185281 39356 44174 47643 10097302
13.91% 3.96% 1.24% 3.29% 0.67% 2.28% 6.00%
train1k(1204张)(Ghost_378k) 197249 95532 186870 38083 44056 46960 -
-1.16% -1.44% 2.11% -0.06% 0.40% 0.81%
train1k(1204张)(Ghost_200k) 196701 95763 187007 38139 43880 47215 -
-1.44% -1.32% 2.18% 0.09% -0.002% 1.36%

推导时间

原模型测试集上平均每张图的推理时间为:

test250: 212.53ms

test295:250.04ms

改进后的ghost模型, 推理时间:

test250: 408.00ms

test295: 481.28ms

结论:

1.改进后模型的ocr测试相比OR,多个数据集出现检出字符数减少,其精度无法比拟baseline。

2.ghost改进后的模型,理论指标FLOPs相较于原始模型减少近一半,但是实际的模型推理时间改进后的模型却是原始模型的近两倍。

分析:

根据shufflenetV2的论文,模型的运行时间不能仅仅使用FLOPs来衡量,还需要考虑MAC (memory access cost)内存访问的时间成本,以及模型的并行度。根据其提出的四个高效网络设计原则对当前模型进行分析,考虑模型推理变慢原因如下:

  • 支路对GPU并行运算来说是不友好的,改进后网络结构支路变多,降低了模型的并行化程度。

  • 改进的网络结构添加了大量的ReLU操作以及网络本身包含大量的shortcut操作,这些Element-wise操作FLOPs较小但是内存访问时间成本却较大。

Clone this wiki locally