-
Notifications
You must be signed in to change notification settings - Fork 0
利用ghost轻量化网络
-
将当前的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曲线状态:
检出字符数
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较小但是内存访问时间成本却较大。