SAM3 用于遥感图像分割
此 Notebook 演示了如何使用 Segment Anything Model 3 (SAM3) 和 samgeo3 模块来分割遥感图像。
安装
首先,确保已安装所需的依赖项:
# %pip install "segment-geospatial[samgeo3]"
导入库
import leafmap
from samgeo import SamGeo3, download_file
下载示例数据
下载一张覆盖加州大学伯克利分校的示例卫星图像用于测试:
url = "https://content/Wuhan.tif"
image_path = download_file(url)
m = leafmap.Map()
m.add_raster(image_path, layer_name="卫星图像")
m

申请 SAM3 访问权限
要使用 SAM3,您需要通过填写 Hugging Face 上的此表单来申请访问权限:https://huggingface.co/facebook/sam3
获得访问权限后,请取消注释以下代码块并运行它。
from huggingface_hub import login
login()

点击蓝色链接部分,转到下面这张图



初始化 SAM3
初始化 SAM3 时,您可以选择后端,可选 “meta” 或 “transformers”。
sam3 = SamGeo3(backend="meta", device=None, checkpoint_path=None, load_from_HF=True)
此处可以能会报错,我用Google colab来进行了尝试:

设置图像
您可以通过传递图像路径或图像 URL 来设置图像。
sam3.set_image(image_path)
使用文本提示生成掩膜
sam3.generate_masks(prompt="building")
显示结果
sam3.show_anns()
注释
sam3.show_masks()
通过边界框生成掩膜
# 以 [xmin, ymin, xmax, ymax] 格式定义边界框
boxes = [[-122.2597, 37.8709, -122.2587, 37.8717]]
# 可选:指定哪些边界框是正向/负向提示
box_labels = [True] # True=包含, False=排除
# 生成掩膜
sam3.generate_masks_by_boxes(boxes, box_labels, box_crs="EPSG:4326")
sam3.show_boxes(boxes, box_labels, box_crs="EPSG:4326")
边界框
显示结果
sam3.show_anns()
保存掩膜
将生成的掩膜保存到文件。如果输入是 GeoTIFF,输出将是具有相同地理参考的 GeoTIFF。否则,将保存为 PNG。
# 保存掩膜,每个对象具有唯一值
# 由于输入图像是 GeoTIFF,输出也将是 GeoTIFF
sam3.save_masks(output="building_masks.tif", unique=True)
# 保存为二值掩膜(所有前景像素值为 255)
sam3.save_masks(output="building_masks_binary.tif", unique=False)
保存带置信度分数的掩膜
您也可以保存每个掩膜的置信度分数。分数表示模型对每个预测掩膜的置信度。
# 保存掩膜和置信度分数
# 分数图像中的每个像素将具有其掩膜的置信度值
sam3.save_masks(
output="building_masks_with_scores.tif",
save_scores="building_scores.tif",
unique=True,
)
sam3.show_masks(cmap="coolwarm")
分数
可视化置信度分数
让我们可视化置信度分数,看看哪些掩膜的置信度更高:
m.add_raster("building_masks.tif", layer_name="建筑物掩膜", visible=False)
m.add_raster(
"building_scores.tif",
layer_name="建筑物分数",
cmap="coolwarm",
opacity=0.8,
nodata=0,
)
m
6526

被折叠的 条评论
为什么被折叠?



