按照yolov8-seg的指导案例,rdk_model_zoo/demos/Seg/YOLOv8-Seg/README_cn.md at main · D-Robotics/rdk_model_zoo,导出结果与最后输出结果不一致
也参考了论坛帖子https://developer.d-robotics.cc/forumDetail/266442473063437635中wu chao的回复,chao在这个帖子中提到了要注意以下关系 你好,需要根据bin模型的10个输出头顺序,调转后处理代码里面的索引顺序:
以下为顺序的关系(注:不是下列顺序,而是关系)
s_bbox = (1, 80, 80, 64)
m_bbox = (1, 40, 40, 64)
l_bbox = (1, 20, 20, 64)
s_cls = (1, 80, 80, 类别数量)
m_cls = (1, 40, 40, 类别数量)
l_cls = (1, 20, 20, 类别数量)
s_mcs = (1, 80, 80, 32)
m_mcs = (1, 40, 40, 32)
l_mcs = (1, 20, 20, 32)
mask = (1, 160, 160, 32)
回溯整个转换过程,发现与案例不一致的地方,主要体现在用户转换的branch与案例版本不匹配问题:
1,之前yolov8-seg转案例失败的问题,官方给的回复一直都是严格按照教程案例,但是未提到git的branch,需要求助官方当时转模型使用的ultralytics官方版本当时对应的branch是哪个分支? 当时的main分支已经目前的main分支,按照download模型使用的v8.2.0分支wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-seg.pt,ultralytics切换成v8.2.0时,按照示例提供的“约第51行,Detect类的forward”,v8.2.0版本是44行,“约第180行,Segment类的forward函数替换成以下内容”,在v8.2.0中是115行,整体行数偏差较大。按照目前最新的main分支,“Detect类的forward是67行”,“Segment类的forward”是201行,整体函数内部变更与示例代码对不上
2,按照案例导出的结构,案例导出的output结构是这个
Graph output:
output0: shape=[1, 80, 80, 32], dtype=FLOAT32
output1: shape=[1, 40, 40, 32], dtype=FLOAT32
371: shape=[1, 20, 20, 32], dtype=FLOAT32
379: shape=[1, 80, 80, 64], dtype=FLOAT32
387: shape=[1, 40, 40, 64], dtype=FLOAT32
395: shape=[1, 20, 20, 64], dtype=FLOAT32
403: shape=[1, 80, 80, 80], dtype=FLOAT32
411: shape=[1, 40, 40, 80], dtype=FLOAT32
419: shape=[1, 20, 20, 80], dtype=FLOAT32
347: shape=[1, 160, 160, 32], dtype=FLOAT32
而根据v8.2.0的branch分支导出的结果是以下结果,要删除的371/387/395节点与v8.2.0的branch分支不符,实际需要与branch对应的结果才能复现示例结果,需要官方提供转换成功案例对应ultralytics对应的branch才能匹配上,看了官方几个案例的回复,一直告知用户严格按照示例教程,但是由于branch分支不对应问题,会导致导出的bin文件与实际并不相符
Graph output:
output0: shape=[1, 80, 80, 64], dtype=FLOAT32
output1: shape=[1, 80, 80, 80], dtype=FLOAT32
360: shape=[1, 80, 80, 32], dtype=FLOAT32
368: shape=[1, 40, 40, 64], dtype=FLOAT32
376: shape=[1, 40, 40, 80], dtype=FLOAT32
384: shape=[1, 40, 40, 32], dtype=FLOAT32
392: shape=[1, 20, 20, 64], dtype=FLOAT32
400: shape=[1, 20, 20, 80], dtype=FLOAT32
408: shape=[1, 20, 20, 32], dtype=FLOAT32
419: shape=[1, 160, 160, 32], dtype=FLOAT32







