AI部署之路 | 模型选型、本地部署、服务器部署、模型转换全栈打通!( 二 )


知道模型的重要性了,关于怎么收集数据怎么训练这里姑且先不谈了 。涉及到部署的话,模型就不能只看精度了,了解些部署的算法工程师在设计模型的时候通常也会注意这一点,实用好用(好训练好部署,比如、V7)才是重点 。
实际应用中的模型,往往有以下一些要求:
模型的设计需要考虑计算量、参数量、访存量、内存占用等等条件 。可以参考这篇:深度学习模型大小与模型推理速度的探讨,内容很详实!
相关参考:
自己造模型
有了想法,有了目标,有了使用场景,那就训练一个模型吧!
如何设计模型
关于设计模型的思路,大部分人会直接参考上找开源的模型结构,这个没问题,根据场景选对就行:
如果自己对模型优化也有特定了解的话,可以针对特定平台设计一些对硬件友好的结构(这里举个例子,比如重参数化的),一般来说大公司会有专门的高性能计算工程师和算法工程师对齐,当然小公司的话,都要干了555 。
模型结构
根据经验和理论知识来设计模型的结构(比如dcn系列、比如senet中的se模块、yolo中的fcos模块);根据任务来设计模型;NAS搜索模型;
有很多优秀的模型块结构,属于即插即用的那种,这里收集一些常见的:
训练框架
训练框架这里指的不是或者,而是类似于mmlab中各种任务框架,比如、这种的 。
你如果想自己训练一个检测模型,大概是要自己基于去重新实现一些方法:数据处理、模型搭建、训练优化器、debug可视化等等 。比较烦而且浪费时间,如果有这些已经完善的轮子你自己使用,个人觉着是比较舒服的,但是当然有优劣:
一些大的轮子可以参考:
一些小的轮子可以参考:
我个人之前使用的是,但是官方貌似不怎么维护了,因为我打算增加一些新功能,但是没有时间搞 。后来发现.0出来了,之前那会使用过.0版本,感觉封装的太深了,训练的模型导出很费劲儿就没怎么用 。后来2.0简单看了看上手稍微简单了些,打算切到mmlab系列,主要原因还是支持比较丰富,各种pr很多,有的模型不需要你移植就已经有人移过去了,省去很多造轮子的时间 。
后面我也会比较下和.0这俩框架 。
导出模型
自己的模型在训练完毕后,如果不是直接在训练框架中推理(好处就是模型精度和你eval的时候一致,而且不需要花时间转模型的格式,坏处就是模型运行速度不能保证,而且环境比较依赖解释器),大部分是要导出的 。
导出的格式有很多,我也不一一列了,可以参考模型的介绍:
导出模型也就是模型转换,只不过因为是自己训练的,一般会从自己训练框架为起点进行转换,可以避免一些中间转换格式 。
比如我经常使用,如果训练完模型后,需要转为的模型,正常来说可能会->ONNX-> 。但是这样会经过ONNX这个中间模型结构,可能会对最终模型精度产生不确定性,我可能也会直接从转为:
因为支持比较好,所以能这样搞,支持不好的,可能还要走ONNX这个路子 。
nas搜索
nas就是搜索一个在你平台上一个速度最优的模型结构,目前我只了解过DAMO相关的一个搜索,还未深度尝试:
别人的模型
直接拿现成模型来用的情况也很多见:
不知道大家有没有这种情况,在网上寻找他人训练好的合适的模型的时候,有一种探索的感觉,类似于开盲盒,一般会看模型在某个平台的速度或者某个任务的精度,以及模型本身的一些特点啥的,我比较喜欢中的MODEL CARD介绍模型的方法,详细介绍了该模型的输入输出,训练集,特点,模型性能啥的: