加速器队伍
黄显钧
个人名义参赛
中国-广东广州
[email protected]
加速器队伍队长:黄显钧,现任某科技公司的高级工程师,技术栈涉足嵌入式全栈开发,AI 开发等领域,对技术充满热情,自驱力强,喜欢研究前沿的技术并将其应用于实际生产中。信奉的一句话是:实践出真知。
第一步是选定好基础模型,然后在基础模型上使用不同的方案进行调优。根据经验调优方案是使用不同的输入尺度进行测试,最终效果明显。
关键词
VGG,图片预处理尺寸范围,模型输入尺寸
我的经验是进行模型加速的流程第一步是选择不同模型在加速后的表现情况,表现好的模型才去进行下一步调优,因为如果一个模型加速之后表现不好,或者因其网络结构、算子不兼容的原因无法加速的话,我再怎么调优都是徒劳的,所以第一步是选择加速之后表现好的模型。
比赛页面提的官方 demo:https://github.com/sophon-ai-algo/contest-demos/tree/main/SOPHGO-CCF-Contest 提供了4个开源的模型权重:CANNet、CSRNet、MCNN、VGG。我先对每个权重进行转换 TPU 的 bmodel 。
下表是每个模型直接转 FP32 bmodel的测试结果一览表,所有模型均未进行调优:
模型名称 |
最大图片尺寸 |
最小图片尺寸 |
模型输入尺寸 |
推理平均速度(秒) |
A榜得分 |
CSRNet |
2048x2048 |
576x768 |
576x768 |
2 |
3.4 |
CANNet |
2048x2048 |
576x768 |
576x768 |
初始权重文件损坏 |
x |
MCNN |
2048x2048 |
576x768 |
576x768 |
1.2 |
-6.74 |
VGG |
2048x2048 |
576x768 |
576x768 |
1.5 |
63 |
表1:直接转 FP32 bmodel的测试结果一览表
从上表可以看出转 bmodel FP32之后的推理结果成绩最高的是 VGG 模型权重,故我就选定了 VGG 作为我的初始模型去进行调优。
我采用的模型VGG 比较常用的有2种结构,分别是VGG16和VGG19。我使用的 VGG 指的是 VGG16,其结构包含16个子网络层,每个子网络层由13层卷积层+3层全连接层组成。下图是从 VGG 论文展示VGG网络图,共有6中不同结构,其中 D列为我这次使用的VGG16的结构。
我可以看到,每个子网络层的结构基本一致,都是由3 x 3卷积外加max pool 层。
图1:VGG 网络结构展示图
从图1看到,VGG的优点就是结构比较简单,而且随着网络的加深,效果也会逐步提升,不会到过拟合或者梯度爆炸的情况。
同时,使用了小的卷积 ——3 x 3卷积 ,而不是 7 x 7的卷积,这样的计算量会大大的减少,而且 3 x 3的卷积更有利于保持图像的信息。
VGG的结构让网络更加深的同时,让特征图更加宽。卷积专注于扩大通道数,max pool 层专注于缩小图片的宽高,使得模型对不同宽高的图片具有更强的泛化性。
VGG在测试的时候,将模型的3个全连接层替换为3个卷积模块,使得测试的时候得到的模型结构的输入不再局限于接受固定的大小的图片,而是可以接收任意高度或宽度的输入,这使得模型的易用性大大增强,同时也对不同图片的识别更加有利。
确定好了网络结构,下一步是寻找优化方案。
我刚开始也是比较迷茫,于是乎我去研究官方提供demo的整体流程,在研究的过程中我发现数据预处理的过程中,会将图片大小进行缩放。从经验来看,对图片的缩放有助于提高速度,一个好的缩放比例能够保证图片缩小的情况下,精度还是会和之前持平,但是如果调整的不好的话精度有可能会下降明显,所以我就尝试着修改图片预处理时的图片大小。
除了图片尺寸,不同的 batch size 也可以加快模型的推理,因此我也测试了不一样的 batch size 对模型的变化,我在转换模型的时候,将原本的 batch size 1 换成 8,发现 batch size 变化之后,速度反而加倍了,根据以往提测的经验,分数和速度挂钩,若速度慢了,分数也会有一定的下降,而且这次翻倍了,分数应该不理想,故放弃修改 batch size 的调优方案。
我测试了很多组不同的输入大小,主要是从数据预处理的图片最大尺寸和最小尺寸,外加对模型的输入尺寸做调整,下面是我的记录表:
模型名称 |
最大图片尺寸 |
最小图片尺寸 |
模型输入尺寸 |
推理平均速度(秒) |
A榜得分(只保留整数部分) |
VGG |
2048x2048 |
576x768 |
576x768 |
1.5 |
63 |
VGG |
960x960 |
152x152 |
152x152 |
0.4 |
183 |
VGG |
680x680 |
132x132 |
132x132 |
0.2 |
186 |
VGG |
960x960 |
136x136 |
136x136 |
0.4 |
太慢没测 |
VGG |
816x816 |
128x128 |
128x128 |
0.25 |
185 |
VGG |
816x816 |
136x136 |
136x136 |
0.2 |
192 |
VGG |
780x780 |
144x144 |
144x144 |
0.2 |
193 |
VGG |
720x720 |
144x144 |
144x144 |
0.2 |
189 |
VGG |
720x720 |
136x136 |
136x136 |
0.2 |
187 |
VGG |
640x640 |
144x144 |
144x144 |
0.15 |
186 |
VGG-bs8 |
780x780 |
144x144 |
144x144 |
0.4 |
太慢没测 |
表2:图片尺寸优化测试结果一览表
从表2可以看出,最佳的成绩预处理设置图片最大尺寸780x780,最小尺寸是144x144,模型的输入尺寸设置为144x144是效果最好的,故选择该方案最为最佳方案。
从A榜的表现来看,我最终选择了 VGG模型,图片预处理将最大图片尺寸设置为 780x780,最小图片尺寸为 144x144,模型输入尺寸设置为 144x144,AB榜最佳的结果如下表所示:
榜单 |
模型名称 |
最大图片尺寸 |
最小图片尺寸 |
模型输入尺寸 |
推理平均速度(秒) |
最高得分(只保留整数部分) |
A榜 |
VGG |
780x780 |
144x144 |
144x144 |
0.2 |
193 |
B榜 |
VGG |
780x780 |
144x144 |
144x144 |
0.2 |
247 |
表3:AB榜单的最佳成绩一览表
时间飞逝,比赛结束了,很荣幸能够参与本次大赛。本次大赛让我对 TPU 有了进一步的了解,对模型加速的理解更加深刻了。
感谢我自己的自驱力,让我不断进步,让我不满足于当下自己的技术水平,更加发奋学习新的技术,同时不断的发现问题和解决问题,让我的经验得到进一步的积累,从而使我在多数情况下能够快速解决问题。
另外,我还要感谢我家人的支持,倘若没有家人的支持,我就不能全心全意、全程专注地参与本次大赛,也不会获得我现在的成绩,是他们的支持,让我能够沉浸在技术的学习中去,不断突破自己。
最后,要感谢平台方、举办方举办了这个比赛,这个比赛让我的模型加速技术能力得到进一步的提升,让我的经验变得更加丰富。
[1] Karen Simonyan, Andrew Zisserman(2014年)。 Very Deep Convolutional Networks for Large-Scale Image Recognition。 https://arxiv.org/abs/1409.1556。