0%

模型转换时打包归一化预处理操作

在部署模型时,对于输入数据的预处理是一个非常耗时的操作,其实可以将预处理一同打包到模型中,在转换为ONNX或者Tensorrt模型后这些操作就可以随着模型一起被加速执行。

以最简单的归一化操作为例

归一化Module如下:

1
2
3
4
5
6
7
8
9
class Normalize(torch.nn.Module):
def __init__(self):
super().__init__()
self.register_buffer('mean', torch.tensor([0.485, 0.456, 0.406], dtype=torch.float64).view(1, -1, 1, 1))
self.register_buffer('std', torch.tensor([0.229, 0.224, 0.225], dtype=torch.float64).view(1, -1, 1, 1))
self.register_buffer('norm', torch.tensor([255.0], dtype=torch.float64).view(1, 1, 1, 1))

def forward(self, images):
return (images / self.norm - self.mean) / self.std

之后修改模型的inti和forward函数即可

1
2
3
4
5
6
7
8
9
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
# ... other code
self.normalize = Normalize()

def forward(self, x):
x = self.normalize(x)
# ... other code