Closed aaafdsf closed 3 months ago
output_name是主分支输出的节点名字,我也试过辅助分支的输出,输出结果是一致的。
import onnx_graphsurgeon as gs import numpy as np import onnx
def get_ncnn_graph(graph,class_num=80,output_name="output0"):
# Concat_1278时DualDDetection输出的的第二个输出,这个输出时main branch的输出
# 不同于之前的YOLO,该部分已经包含了ancher的映射和处理,直接解析就好了
origin_output = [node for node in graph.nodes if node.name == output_name][0]
print(origin_output.outputs)
graph.outputs = [origin_output.outputs[0]]
graph.cleanup().toposort()
# onnx.save(gs.export_onnx(graph),"./last_1.onnx")
return graph
if name == "main":
onnx_path = "./mm/yolov9-c.onnx"
graph = gs.import_onnx(onnx.load(onnx_path))
graph = get_ncnn_graph(graph,class_num=80,output_name="output0")
# 保存图结构
# onnx.save(gs.export_onnx(graph),"./runs/train/exp/weights/last_ncnn.onnx")
onnx.save(gs.export_onnx(graph),"./mm/last_ncnn.onnx")
其中yolov9-c.onnx是官方yolov9-c.pt转换来的,转换命令:python export.py --weights yolov9-c.pt --include onnx --simplify
运行get_ncnn_onnx.py后报错
Traceback (most recent call last):
File "get_ncnn_onnx.py", line 44, in
“output0”不是节点名字,是节点output的名字,你得找节点名字,而不是节点输出输出的名字,用netron看一下,谁的输出是“output0”
------------------ 原始邮件 ------------------ 发件人: aaafdsf @.> 发送时间: 2024年3月30日 20:22 收件人: DataXujing/YOLOv9 @.> 抄送: 徐静 @.>, Comment @.> 主题: Re: [DataXujing/YOLOv9] 关于get_ncnn_graph中的class_num是类数量,output_name (Issue #4)
import onnx_graphsurgeon as gs import numpy as np import onnx
def get_ncnn_graph(graph,class_num=80,output_name="output0"):
origin_output = [node for node in graph.nodes if node.name == output_name][0]
print(origin_output.outputs)
graph.outputs = [origin_output.outputs[0]] graph.cleanup().toposort() # onnx.save(gs.export_onnx(graph),"./last_1.onnx") return graph
if name == "main":
onnx_path = "./mm/yolov9-c.onnx"
graph = gs.import_onnx(onnx.load(onnx_path))
graph = get_ncnn_graph(graph,class_num=80,output_name="output0") # 保存图结构 # onnx.save(gs.export_onnx(graph),"./runs/train/exp/weights/last_ncnn.onnx") onnx.save(gs.export_onnx(graph),"./mm/last_ncnn.onnx")
其中yolov9-c.onnx是官方yolov9-c.pt转换来的,转换命令:python export.py --weights yolov9-c.pt --include onnx --simplify
运行get_ncnn_onnx.py后报错 Traceback (most recent call last): File "get_ncnn_onnx.py", line 44, in graph = get_ncnn_graph(graph,class_num=80,output_name="output0") File "get_ncnn_onnx.py", line 28, in get_ncnn_graph origin_output = [node for node in graph.nodes if node.name == output_name][0] IndexError: list index out of range
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
已成功转换,感谢指导
新问题,成功转换后,再onnx2ncnn.exe last_ncnn.onnx yolov9-c.param yolov9-c.bin出现下面报错 Unknown data type 0 Unknown data type 0 Unknown data type 0 Unknown data type 0 Unknown data type 0 Unknown data type 0
是不是yolov9-c.pt转yolov9-c.onnx时的转换命令有问题:python export.py --weights yolov9-c.pt --include onnx --simplify 备注:yolov9-c.pt是官方的模型
问这个问题是因为,后面推理的时候,加载param模型时会报错
def get_ncnn_graph(graph,class_num=1,output_name="Concat_1186"):
class_num是类数量,output_name=“output0”还是1747
INPUTS images name:images OUTPUTS output0 name:output0 1747 name:1747