1.优化策略-激活函数替换
- convolution+batchnormalization融合
现如今我们转换onnx格式时会发现 Conv + BN + Activation 的模型结构转换为onnx时会只剩下Conv + Activation的结构,发现BN层并未在onnx结构中显示出来,如下图所示。
究其原因是因为如下图,其中在装换得时候就根据已经训练完成得参数进行数学计算推导得出新得W,B,将其融合与卷积得参数中,就可减少Memory(内存访问)操作,从而提高效率。
但由于最近很多模型会有很多种类的激活函数,比如GELU、Swish、Mish等等,这些激活函数往往由于计算复杂很难被优化加速,经过笔者大量实验验证,替换为简单的RELU激活函数并不会在精度上造成太多的精度损失,反而由于该激活函数只是做一个截取>0的值、内部没有计算,从而会使得模型推理时速度更快。
2.优化策略-onnx-simplifier
过往我们在进行onnx导出操作时会发现一个onnx格式模型中的计算算子增多了,如在进行onnx导出中,torch.fla