本文介绍了简化 onnx upsample 算子的方法。
实际部署中经常会涉及到 pytorch / tensorflow / darknet -> onnx 的模型转换过程。本身模型转换过程就比较麻烦(当然 pytorch export onnx 十分方便),成了后你经常又会发现 convert successed 的 onnx model 看起来面目全非,如下。这样一方面看起来不够清爽,另一方面算子细粒度太小,不利于部署。
这里先拿转换 onnx 时的 upsample 算子简洁化说起。
1、upsample 原理
upsample 是上采样,直观理解就是放大图像,采用各种插值算法来扩充 feature map。upsample 在分割网络、GAN 里比较常见,因为这些网络需要还原到特征图。目标检测网络常常会加入多尺度检测的特性,如在 Yolo 系列中最后的 yolo 分支往往就会考虑多尺度检测,这个时候就需要加入 upsample 算子来还原 feature map 的尺寸。
把 upsample 看成这样就好了,当 stride = 1 时:
当 stride = 2 时: