为 Paddle2ONNX 适配 releu6 算子
1 简介
在 PaddlePaddle2.6 中,relu6 算子在 PaddleInference 上发生了变化,删除掉了 threshold 这个 Attr,因此我们需要想办法自行适配它。
2 适配过程
原解析 relu6 算子的核心代码如下:
void Relu6Mapper::Opset7() {
auto input_info = GetInput("X");
auto output_info = GetOutput("Out");
float min = 0.0;
helper_->Clip(input_info[0].name, output_info[0].name, min, threshold_,
input_info[0].dtype);
}
如果仅需要适配 PaddlePaddle2.6,只需要改动为(同时还需要在类的构造函数中删除对 threshold 参数的读取):
void Relu6Mapper::Opset7() {
auto input_info = GetInput("X");
auto output_info = GetOutput("Out");
float min = 0.0;
helper_->Clip(input_info[0].name, output_info[0].name, min, 6, input_info[0].dtype);
}
考虑到要兼容 PaddlePaddle2.5 之前的用户,因此不能直接删除掉 threshold 这个参数,进一步修改如下:
void Relu6Mapper::Opset7() {
auto input_info = GetInput("X");
auto output_info = GetOutput("Out");
float threshold = 6.0;
if (HasAttr("threshold")) {
GetAttr("threshold", &threshold);
}
helper_->Clip(input_info[0].name, output_info[0].name, min, threshold, input_info[0].dtype);
}

浙公网安备 33010602011771号