图手术 Example

为模型添加前后处理

TracedModule 可以被反复的 trace,因此在加前后处理时,推荐以新写一个 Module 的形式给模型加前后处理。

当然也可以用图手术的方式添加前后处理,最终效果是一样的。

把一些常量吸收到卷积里

对于一些基于 anchor 的检测算法,经常会在卷积的输出后,对卷积结果乘 stride 或除 anchor_size,在推理部署时,可以将这些常量吸收到卷积里,基于 TracedModule 可以较容易的实现这些转换, 如下面的例子。

将一些 OP 转换为 fp16

对于一些计算量特别大的全连接层,会占用较多的存储资源,可以通过将其转换为 fp16 计算减少其占用的资源, 如下面的例子。

通过 InternalGraph 确定数据流向

在量化训练时,常常会对 concat 的输入做某些约束,通过 TracedModule 可以轻易的找到这些 concat 的输入是来自于哪个内置的 function 或 Module 的输出,如下面的例子。

Conv 和 BN 融合

在 推理 或 量化训练 时,常常需要将 Conv 和 Bn 融合到一起,基于 TracedModule 的 Graph 可以找到满足融合条件的 Conv 和 Bn,并以图手术的方式将其融合,如下面的例子。