SegFormer医学影像微调时如何正确准备数据集生成语义分割图
问题原因与修复方案
你报错的核心原因是get_semantic_bitmap的入参要求和你传入的内容完全不匹配:
- 这个方法是专门给Segments标注平台导出的结构化标注数据做格式转换用的,第二个入参要求传入带类别、标注几何信息的可迭代标注对象,不是直接传PIL格式的掩码图片,你直接塞单张PNG掩码进去,自然会触发"PNG对象不可迭代"的类型错误。
- 你的场景是单病灶二值分割,完全没必要用这个工具,直接把本地的二值掩码转成SegFormer要求的整数ID格式就行,操作步骤如下:
- 把PIL格式的标签转成numpy数组,你的标签是mode=1的二值图,像素值只有0和255两种,直接把非0像素映射成病灶类别ID 1,0保留为背景ID 0,就得到了标准的语义分割掩码
- 预处理阶段直接把转换好的整数掩码和原图一起送入SegFormer的图像处理器即可,不需要额外做位图转换,参考代码如下:
import numpy as np def preprocess_example(example): image = example["image"] # 二值PIL掩码转整数语义标签 raw_mask = np.array(example["label"]) seg_mask = np.where(raw_mask > 0, 1, 0).astype(np.uint8) # 调用你加载的SegFormer特征提取器/图像处理器完成预处理 processed_inputs = feature_extractor( images=image, segmentation_maps=seg_mask, return_tensors="pt" ) return processed_inputs
补充说明:如果后续要扩展成多病灶分割,只需要给每个病灶类别分配唯一的整数ID,保证掩码中每个像素的取值对应该像素所属类别的ID即可,全程不需要依赖segments-ai的转换工具,那个工具只适配Segments平台导出的特定格式标注,不适用于本地自制的掩码数据集。
内容的提问来源于stack exchange,提问作者Sergio Hernandez
相关产品推荐
相关产品推荐

