问题描述
segment类kmodel输出结果,使用官方的后处理,不能得到期望的掩码。因此我想查找官方后处理的源码。
但是YOLO.py里面的postprocess()代码又有一层封装,使用了aidemo库的yolov8_seg_postprocess()函数,使得我仍然无法看到后处理的完整逻辑:
def postprocess(self,results):
with ScopedTiming("postprocess",self.debug_mode > 0):
if self.task_type=="classify":
scores=results[0][0]
max_score=np.max(scores)
res_idx=np.argmax(scores)
cls_res=(-1,0.0)
# 如果类别分数大于阈值,返回当前类别和分数
if max_score>self.conf_thresh:
cls_res=(res_idx,max_score)
return cls_res
elif self.task_type=="detect":
new_result=results[0][0].transpose()
if self.mode=="image":
det_res = aidemo.yolov8_det_postprocess(new_result.copy(),[self.rgb888p_size[1],self.rgb888p_size[0]],[self.model_input_size[1],self.model_input_size[0]],[self.rgb888p_size[1],self.rgb888p_size[0]],len(self.labels),self.conf_thresh,self.nms_thresh,self.max_boxes_num)
elif self.mode=="video":
det_res = aidemo.yolov8_det_postprocess(new_result.copy(),[self.rgb888p_size[1],self.rgb888p_size[0]],[self.model_input_size[1],self.model_input_size[0]],[self.display_size[1],self.display_size[0]],len(self.labels),self.conf_thresh,self.nms_thresh,self.max_boxes_num)
return det_res
elif self.task_type=="segment":
new_result=results[0][0].transpose()
if self.mode=="image":
seg_res = aidemo.yolov8_seg_postprocess(new_result.copy(),results[1][0],[self.rgb888p_size[1],self.rgb888p_size[0]],[self.model_input_size[1],self.model_input_size[0]],[self.rgb888p_size[1],self.rgb888p_size[0]],len(self.labels),self.conf_thresh,self.nms_thresh,self.mask_thresh,self.masks)
elif self.mode=="video":
seg_res = aidemo.yolov8_seg_postprocess(new_result.copy(),results[1][0],[self.rgb888p_size[1],self.rgb888p_size[0]],[self.model_input_size[1],self.model_input_size[0]],[self.display_size[1],self.display_size[0]],len(self.labels),self.conf_thresh,self.nms_thresh,self.mask_thresh,self.masks)
return seg_res
elif self.task_type=="obb":
new_result=results[0][0].transpose()
if self.mode=="image":
obb_res = aidemo.yolo_obb_postprocess(new_result.copy(),[self.rgb888p_size[1],self.rgb888p_size[0]],[self.model_input_size[1],self.model_input_size[0]],[self.rgb888p_size[1],self.rgb888p_size[0]],len(self.labels),self.conf_thresh,self.nms_thresh,self.max_boxes_num)
elif self.mode=="video":
obb_res = aidemo.yolo_obb_postprocess(new_result.copy(),[self.rgb888p_size[1],self.rgb888p_size[0]],[self.model_input_size[1],self.model_input_size[0]],[self.display_size[1],self.display_size[0]],len(self.labels),self.conf_thresh,self.nms_thresh,self.max_boxes_num)
return obb_res
现在我的目的是找到这段代码里aidemo.yolov8_seg_postprocess()的源码,以理解后处理的真实原理。但是我目前尝试过的方法,都不能找到源码。
复现步骤
1.上电进入开发板系统硬盘
2.进入sdcard/libs/YOLO.py
3.找到YOLO11的类,找到postprocess()函数,找到"video"和"segment"分支,里面有一个aidemo.yolov8_seg_postprocess(),现在想找其源代码
硬件板卡
庐山派K230
软件版本
CanMV_K230_LCKFB_micropython_v1.5-legacy-0-g413737f_nncase_v2.9.0 (1).img
其他信息
尝试过的方法:pip install YOLO, pip install aidemo(结果安装不了或找不到这个函数),尝试打开sdcard的"MicroPython"系统文件也无效,在网上也找不到aidemo库的代码