输出可视化图像的方法

一、添加工具

在tools文件夹下添加 inference.py 工具脚本,输出纯黑白掩码和原图叠加可视化图。

importosimportargparseimportnumpyasnpfromPILimportImagefrommmseg.apisimportinit_model,inference_modeldefparse_args():parser=argparse.ArgumentParser(description='批量推理并生成分割可视化结果')parser.add_argument('config',help='模型配置文件路径')parser.add_argument('checkpoint',help='训练好的权重文件路径')parser.add_argument('--input',required=True,help='输入图片路径,支持单张图片或文件夹')parser.add_argument('--output-dir',required=True,help='结果输出目录')parser.add_argument('--out-type',default='both',choices=['mask','show','both'],help='输出类型:mask=纯黑白掩码,show=原图叠加图,both=两种都输出,默认both')parser.add_argument('--mask-color',nargs=3,type=int,default=[0,255,0],help='叠加掩码颜色,默认绿色 R G B')parser.add_argument('--alpha',type=float,default=0.5,help='叠加透明度,默认0.5')parser.add_argument('--device',default='cuda:0',help='推理设备,默认cuda:0')args=parser.parse_args()returnargsdefget_image_list(input_path):"""获取所有待推理图片路径"""img_list=[]ifos.path.isfile(input_path):img_list.append(input_path)else:fornameinsorted(os.listdir(input_path)):ifname.lower().endswith(('.png','.jpg','.jpeg','.tif','.bmp')):img_list.append(os.path.join(input_path,name))returnimg_listdefmain():args=parse_args()os.makedirs(args.output_dir,exist_ok=True)# 初始化模型model=init_model(args.config,args.checkpoint,device=args.device)# 获取所有图片img_list=get_image_list(args.input)print(f'共找到{len(img_list)}张待推理图片')forimg_pathinimg_list:img_name=os.path.basename(img_path)print(f'正在处理:{img_name}')# 读取原图original_img=Image.open(img_path).convert('RGB')original_np=np.array(original_img)# 模型推理result=inference_model(model,img_path)pred_mask=result.pred_sem_seg.data[0].cpu().numpy().astype(np.uint8)# 1. 保存纯黑白掩码ifargs.out_typein['mask','both']:mask_save_path=os.path.join(args.output_dir,f'mask_{img_name}')Image.fromarray(pred_mask*255).save(mask_save_path)# 2. 保存原图叠加可视化图ifargs.out_typein['show','both']:mask_layer=np.zeros_like(original_np)mask_layer[pred_mask==1]=args.mask_color overlay_np=original_np.copy()overlay_np[pred_mask==1]=(original_np[pred_mask==1]*(1-args.alpha)+mask_layer[pred_mask==1]*args.alpha).astype(np.uint8)show_save_path=os.path.join(args.output_dir,f'show_{img_name}')Image.fromarray(overlay_np).save(show_save_path)print(f'处理完成,结果已保存至:{args.output_dir}')if__name__=='__main__':main()

输入图片

在data文件夹下新建一个paper_vis_dataset,用来存放需要需要处理的图片

data/└── paper_vis_dataset/✅ 新建:专门放你挑的8张图 ├── image/8张测试原图(4物候期×2张) └── mask_show/放对应的8张真值标签图,文件名和image里一一对应

image放原图,mask_show放标签可视化图片(模型预测时只输入原图,mask_show(真值叠加图)只是方便输出结果后对比)

命令

python tools/inference.py configs/my_projects/stage3_finetune_mlpgate.py work_dirs/stage3_finetune_mlpgate/best_mIoU_iter_40000.pth--inputdata/paper_vis_dataset/image --output-dir paper_vis_show --out-type show

我使用的模型是MLPGateFusion的stage 3的最好的40000次权重做的

python tools/inference.py\configs/my_projects/stage3_finetune_mlpgate.py\work_dirs/stage3_finetune_mlpgate/best_mIoU_iter_40000.pth\--inputdata/paper_vis_dataset/image\--output-dir paper_vis_show

最后输出结果在项目根目录下会出现一个paper_vis_show文件夹,里面会有两部分,
掩码图像和叠加效果图

原本是只需要掩码图像,但是AI给出的inference脚本会同时输出叠加效果图,就是绿色的图片,后续有时间,可对inference脚本进行简化。