File size: 1,634 Bytes
119f8ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import onnx
from onnx import version_converter, helper

def convert_opset(input_model_path: str, output_model_path: str, target_opset: int):
    """
    使用 onnx.version_converter 安全地转换 ONNX 模型的 Opset 版本。

    Args:
        input_model_path (str): 输入 ONNX 模型文件路径。
        output_model_path (str): 输出转换后 ONNX 模型文件路径。
        target_opset (int): 目标 Opset 版本号。
    """
    try:
        # 1. 加载模型
        original_model = onnx.load(input_model_path)
        print(f"原始 Opset Import: {original_model.opset_import}")

        # 2. 使用 version_converter 进行转换
        # 它会尝试将算子适配到目标 Opset
        converted_model = version_converter.convert_version(original_model, target_opset)

        # 3. 检查转换后的模型
        onnx.checker.check_model(converted_model)
        print("ONNX Checker 检查转换后的模型通过。")

        # 4. 保存转换后的模型
        onnx.save(converted_model, output_model_path)
        print(f"模型已安全转换为 Opset {target_opset} 并保存到: {output_model_path}")
        print(f"转换后的 Opset Import: {converted_model.opset_import}")

    except ValueError as e:
         print(f"转换失败:模型包含无法转换到 Opset {target_opset} 的算子。错误: {e}")
    except Exception as e:
        print(f"处理模型时发生错误: {e}")

# --- 使用示例 ---
input_model = "F5_Transformer.onnx"
output_model_converted = "F5_Transformer_opset19.onnx"
target_version = 19

convert_opset(input_model, output_model_converted, target_version)