看看 Meta 的 Segment Anything 模型,它似乎接受低分辨率输入掩码以进一步细化其结果。
mask_input (np.ndarray, optional): A low resolution mask input to the model, typically coming from a previous prediction iteration. Has form 1xHxW, where for SAM, H=W=256.
但是,他们的文档没有提供任何有关如何将自定义灰度/二进制图转换为他们支持的格式的明确信息。
我不想重复使用他们的 logits,而是提供我自己的输入。谁能帮助我了解如何将自定义蒙版与 SAM 结合使用?如何实现灰度到SAM需要的logits之间的转换?
我尝试用不同的方法转换我的面具,类似于下面的方法 - 但最终都失败了。
def reference_mask_to_sam_mask(self, ref_mask: np.ndarray) -> np.ndarray:
# Normalize the mask to [0, 1]
ref_mask_norm = ref_mask / 255.0
# Add a small constant to avoid extreme values
epsilon = 1e-7
ref_mask_norm = np.clip(ref_mask_norm, epsilon, 1 - epsilon)
# Resize the mask to (256, 256)
ref_mask_resized = resize(
ref_mask_norm, (256, 256), mode="reflect", anti_aliasing=True
)
# Convert probabilities to logits
ref_mask_logits = logit(ref_mask_resized)
# Add an extra dimension to make the shape (1, 256, 256)
sam_mask = ref_mask_logits[np.newaxis, :, :]
return sam_mask
非常感谢! 💙🖖
那里似乎有一个类似的问题,并且似乎不可能或不需要解析您自己的掩码。您应该从先前的迭代中获取先前的蒙版,并添加一个框或标签来重新指定要分割的区域。
https://github.com/facebookresearch/segment-anything/issues/169