打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
商汤LPCV冠军方案揭秘!效率优化的极致探索

摘要 · 看点

IEEE举办了低功耗计算机视觉挑战赛 (LOW-POWER COMPUTER VISION CHALLENGE, LPCV 2023),颁奖仪式本周在国际顶级体系结构学术会议ESWeek 2023上举行。

本次大赛共有近百个队伍报名参赛,商汤模型工具链联合团队(队名:ModelTC)包揽Rank1-14,以压倒性优势取得冠军,对其他团队保持了超过30%的得分优势。

比赛背景及评分标准 

1.1

硬件情况

硬件平台为NVIDIA Jetson Nano 2GB开发板,开启5W mode(不是默认的全功率模式)。

在此状态下,CPU为2*A57,最高约900MHz;GPU为128core Maxwell平台,最高640MHz,等效327GFlops@FP32;DRAM为64bit 1600MHz(3200MT/s),等效25.6GB/s。

1.2

评分标准

score=速度*精度。速度和精度需要同时高于官方的baseline(速度0.108,精度0.50127)。

冠军模型概况

2.1

纸面参数

447M MACs,30.45M Memory Access(即60.9MB的FP16),5.4M参数量。

2.2

测试数据

trtexec测试的裸模型速度6.4ms,LPCV平台测试6.72ms。

达到了41.7%的峰值GPU利用率,36.3%的DRAM IO使用率,基本上达到了理想状态(我们内部测试数据显示,对于CNN结构,NVIDIA GPU的典型峰值利用率是40%左右)。

模型结构说明

3.1

基础知识

对于端上的CV模型来说,访存瓶颈的情况更为常见,其中一些典型的情况是L2和内存发生数据交换,或者是需要开辟一块新的内存。

对于需要持有大尺寸feature/参数的情况下,这两个问题是不可避免的。由于推理的时候计算图是固定的,因此可以使用图论知识得出:“网络持有activation所占显存量”类似于在计算图上求一个割,而实际占用的显存量只需要加上这一个割前后的参数即可得出。

理论上“占有最大显存量的时刻”是activation最大割+前后参数,实际运行中可以通过计算顺序的优化来降低这一占用,即:实际显存开销≤activation最大割+前后参数。换言之,只要极限压缩activation最大割+前后参数,则对于推理时计算顺序的优化可以有更多的选择,更容易跑出硬件的峰值性能。

对于最大割的求解问题,由于分割网络是一个DAG,因此可以直接取负权求最小割,这个问题是可解的,通常是使用网络流算法来求最小割。而本次模型的网络较小,直接口算即可。

此外,对于channel不是8的整数倍,而输入较大的情况,可能会出现访存效率低、整体利用率低的情况。

使用torch.profile观察baseline,发现有两个巨大的开销:res18的最后一次downsample,和输入的一个conv/bn。

对于res18的最后一次downsample,这一层的输入为512*16*16,输出为512*16*16,参数为512*512*3*3,需要hold一份右边分支的输入,大小为256*32*32,总共需要11MB显存。由于baseline使用的PyTorch1.10进行推理,因此没有进行预先的显存分配,需要用empty进行临时分配,因此占用的时间很长(而本身计算反而没有占多少时间)。

输入的第一个conv/bn,同样也有较大的时间开销,原因也是两点:1. 数据不规整,局部性不好,L2-内存交换大 2. 需要新分配内存。

3.2

Encoder部分

  • 基于前面的基础分析,我们遵循”尽量减少最大割“的设计原则,去掉所有的connection,使用vgg-style的直筒网络

  • 降低input size,512→256,降低75%

  • 使用3x3 normal conv,使得计算量与访存量相匹配;去掉pooling

  • 设计6次降采样,stride=64

  • channel数量选择16/32/64/128/192/256

  • channel选择128则不吃pretrain,选择512则速度太慢

  • depth选择2/2/2/2/4/5

  • 将计算权重堆砌在后面,可以增加实际参数量,带来更好的性能与更好的计算局部性,更加efficiency

3.3

Decoder部分

  • 输出面积需要足够的大,因为小类的区域很小,如果输出面积小,那么训练无法提供有效的监督,会导致精度指标不佳,卡在baseline附近上不去

  • 同时输出面积需要尽量的小,因为输出层的计算局部性不佳,且channel不是8的倍数,时间开销很大

  • 实验证明,输入256的前提下,输出stride=4是一个较好的解,精度高于stride=2或stride=8

  • 上采样算子使用deconv(ConvTranspose2D),棋盘格效应在分割任务中影响不大

3.4

网络全貌

  • 前部直筒3x3 conv net,后部deconv,输出layer接分类器

  • 最大割在网络中部,hold的权重只有每个level的输出,都是必要的部分

训练超参

  • optimizer选择AdamW,20000 iteration,8GPU,每卡batch size16

  • 使用轻度augmentation,最后2000个iter进一步减轻

  • encoder部分的所有conv layer都使用重参数化

  • loss使用OHEM

推理部分

5.1

Runtime

  • 使用TensorRT,这是JetPack里面自带的工具,在测试设备上可以直接调用

  • 测试设备是Maxwell架构,不支持int8量化推理,fp16相对于fp32,在算力上也没有区别。但是,fp16可以降低内存IO,使用fp16是有速度收益的

  • 按照比赛要求,由于推理是同步的(sync mode),因此开启useSpinWait选项可以轻微提速

  • 转换指令:

trtexec --workspace=4096 --onnx=xxx.onnx --saveEngine=xxx.trt --best --useSpinWait --outpu tIOFormats=fp16:chw --inputIOFormats=fp16:chw --verbose

5.2

batch选择

由于设备宽度是128,我们的channel为16/32/64/128/192/256,大batch可以提高前部计算的利用率。但同时batch如果过大,会导致内存不足,发生swap交换。因此折中选择了batch=4。

5.3

后处理

模型输出尺寸小于GT,需要添加一个上采样的后处理。bilinear对于边界的处理更加smooth,这样会导致小类被大类“侵害”。因此我们使用了bicubic,获得更加清晰的类别边界。由于我们模型的输出尺寸是64x64,选择了多步后处理,每一步bicubic都只做长宽*2,能略微提高一些精度。

总结

6.1

score及排名

Solution榜上,我们ModelTC拿下Rank1-14,认证为冠军 + extra award

Team榜上,比第二名高出约30%

在国际顶级体系结构学术会议ESWeek2023上公布冠军,并举行颁奖仪式

获奖证书

开源代码

https://github.com/ModelTC/LPCV_2023_solution

关于我们

ModelTC团队

ModelTC团队致力干打造高效、智能的AI模型开发和部署工具,帮助企业和组织更轻松地实现AI愿景。

我们的团队由一群充满激情和创新精神的工程师和科学家组成,专注于解决AI开发中的各种挑战,包括模型训练、优化、部署等方面。我们的目标是通过提供强大的工具和技术支持,使得AI技术的应用变得更加广泛和普及化。

王意如

商汤科技

王意如,商汤科技算法研究员,毕业于北京航空航天大学;致力于探索低延迟模型从few shot到海量工业数据集的性能上限,擅长对算力进行高效的组织与运用,力求解决Deep Learning理论在落地时遇到的实际问题,多次在极低算力平台上完成整体方案的设计与部署。已有6篇论文在CVPR、ICCV等会议发表;担任CVPR、ICCV、ECCV、TKDE、TNNLS、Neural Networks等会议期刊的审稿人。

龚睿昊

商汤科技

龚睿昊,商汤科技模型工具链团队高级研究经理,北京航空航天大学博士;负责模型压缩和软硬件协同技术体系,通过算法和工具实现规模化工业落地,支持智慧城市、智能驾驶、AIOT、手机场景等大量业务模型的轻量化生产;致力于ML+System的综合效率提升,在ICLR、NeuIPS、CVPR、ICCV等期刊会议发表近20篇论文。

浦一凡

清华大学

浦一凡,清华大学在读博士生,研究兴趣包括计算机视觉、机器学习、高效神经网络等。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
手把手教TensorFlow(附代码)
快速训练残差网络 ResNet-101,完成图像分类与预测,精度高达 98% | 迁移学习实战
基于深度学习的花卉图像关键点检测
必看必会的模型推理加速技巧:融合BN和Conv层
计算机视觉大神整理的常见分类模型演变
群友原创:万字长文入门 Pytorch 深度学习框架
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服