Move fp16 casting into onnx models.

This commit is contained in:
Daniel
2024-12-02 13:45:26 +01:00
parent 9cc63532d3
commit b44d4134d9
2 changed files with 23 additions and 9 deletions

View File

@ -43,5 +43,5 @@ mv /mmdeploy/work_dir/end2end.onnx /RapidPoseTriangulation/extras/mmdeploy/expor
``` ```
```bash ```bash
python3 /RapidPoseTriangulation/extras/mmdeploy/add_norm_step.py python3 /RapidPoseTriangulation/extras/mmdeploy/add_extra_steps.py
``` ```

View File

@ -1,6 +1,6 @@
import numpy as np import numpy as np
import onnx import onnx
from onnx import helper, numpy_helper from onnx import helper, numpy_helper, TensorProto
# ================================================================================================== # ==================================================================================================
@ -44,22 +44,35 @@ def add_steps_to_onnx(model_path):
# Define layer names, assuming the first input is the image tensor # Define layer names, assuming the first input is the image tensor
input_name = graph.input[0].name input_name = graph.input[0].name
mean_added_output = "mean_added_output"
normalized_output = "normalized_output" # Set input type to always be float32
graph.input[0].type.tensor_type.elem_type = TensorProto.FLOAT
# Create to cast the float32 if needed
cast_type = 10 if use_fp16 else 1
casted_output = "casted_output"
cast_node = helper.make_node(
"Cast",
inputs=[input_name],
outputs=[casted_output],
to=cast_type,
)
# Node to add mean # Node to add mean
mean_added_output = "mean_added_output"
mean_add_node = helper.make_node( mean_add_node = helper.make_node(
"Add", "Add",
inputs=[input_name, "norm_mean"], inputs=[casted_output, "norm_mean"],
outputs=[mean_added_output], outputs=[mean_added_output],
name="Mean_Addition", name="Mean_Addition",
) )
# Node to multiply by std # Node to multiply by std
std_mult_output = "std_mult_output"
std_mul_node = helper.make_node( std_mul_node = helper.make_node(
"Mul", "Mul",
inputs=[mean_added_output, "norm_std"], inputs=[mean_added_output, "norm_std"],
outputs=[normalized_output], outputs=[std_mult_output],
name="Std_Multiplication", name="Std_Multiplication",
) )
@ -67,11 +80,12 @@ def add_steps_to_onnx(model_path):
for node in graph.node: for node in graph.node:
for idx, input_name_in_node in enumerate(node.input): for idx, input_name_in_node in enumerate(node.input):
if input_name_in_node == input_name: if input_name_in_node == input_name:
node.input[idx] = normalized_output node.input[idx] = std_mult_output
# Add the new nodes to the graph # Add the new nodes to the graph
graph.node.insert(0, mean_add_node) graph.node.insert(0, cast_node)
graph.node.insert(1, std_mul_node) graph.node.insert(1, mean_add_node)
graph.node.insert(2, std_mul_node)
path = model_path.replace(".onnx", "_with-norm.onnx") path = model_path.replace(".onnx", "_with-norm.onnx")
onnx.save(model, path) onnx.save(model, path)