该存储库提供了使用分段任意模型 (SAM) [1] 的自动掩模生成 (AMG) 执行边缘检测的代码。由于论文中使用的代码目前尚未向公众开放,因此该实现基于论文中提供的描述。
左图取自 BSDS。中间是真实边缘。右侧的图像是应用边缘检测的结果。
该存储库旨在在 Docker 环境中运行。如果您不熟悉 Docker,请设置torch==1.11.0
的环境并相应安装 docker/requirements.txt 中列出的软件包。
请创建一个 Docker 镜像,如下所示:
docker build -t ${USER} /samed docker
如果可能,应避免以 root 身份执行。例如,参考docker文档正确设置-u
选项。
如果您不介意以 root 身份运行,可以按如下方式执行 Docker 容器:
docker run --rm -it --name samed_container
--gpus device=0
-v $PWD :/working
${USER} /samed bash
从官方网站下载 BSDS500 [2] 数据集。
如果您无法下载它,以下镜像存储库可能会有所帮助。
然后准备如下目录结构:
data/BSDS500/
├── groundTruth
│ └── test
│ ├── 100007.mat
│ ├── 100039.mat
│ ...
│
└── images
├── test
│ ├── 100007.jpg
│ ├── 100039.jpg
│ ...
│
├── train
└── val
从 EDTER 下载 NYUDv2 [3] 测试数据集。然后准备如下目录结构:
data/NYUDv2/
├── groundTruth
│ └── test
│ ├── img_5001.mat
│ ├── img_5002.mat
│ ...
│
└── images
├── test
│ ├── img_5001.png
│ ├── img_5002.png
│ ...
│
├── train
└── val
创建一个目录来下载模型,如下:
mkdir model
下载SAM模型如下:
wget -P model https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
在原始论文[1]中,边缘NMS使用Canny边缘NMS[4]。然而,在我们的环境中,它并没有产生论文中报告的边缘。因此,我们暂时使用OpenCV的Structured Forests [5]模型进行边缘NMS。
下载结构化森林模型如下:
wget -P model https://cdn.rawgit.com/opencv/opencv_extra/3.3.0/testdata/cv/ximgproc/model.yml.gz
要生成上面的图像,请执行以下操作:
python example.py
输出结果在output/example
中生成。
预测边缘如下:
python pipeline.py --dataset BSDS500 --data_split test
用于初始化SamAutomaticMaskAndProbabilityGenerator
的其他参数可以按如下方式传递。
-h, --help show this help message and exit
--dataset DATASET BSDS500 or NYUDv2
--data_split DATA_SPLIT
train, val, or test
--points_per_side POINTS_PER_SIDE
Number of points per side.
--points_per_batch POINTS_PER_BATCH
Number of points per batch
--pred_iou_thresh PRED_IOU_THRESH
Prediction IOU threshold
--stability_score_thresh STABILITY_SCORE_THRESH
Stability score threshold
--stability_score_offset STABILITY_SCORE_OFFSET
Stability score offset
--box_nms_thresh BOX_NMS_THRESH
NMS threshold for box suppression
--crop_n_layers CROP_N_LAYERS
Number of layers to crop
--crop_nms_thresh CROP_NMS_THRESH
NMS threshold for cropping
--crop_overlap_ratio CROP_OVERLAP_RATIO
Overlap ratio for cropping
--crop_n_points_downscale_factor CROP_N_POINTS_DOWNSCALE_FACTOR
Downscale factor for number of points in crop
--min_mask_region_area MIN_MASK_REGION_AREA
Minimum mask region area
--output_mode OUTPUT_MODE
Output mode of the mask generator
--nms_threshold NMS_THRESHOLD
NMS threshold
--bzp BZP boundary zero padding
--pred_iou_thresh_filtering
filter by pred_iou_thresh
--stability_score_thresh_filtering
filter by stability_score_thresh
--kernel_size KERNEL_SIZE
kernel size
有关边界零填充的更多详细信息,请参阅[6]。
输出结果在output_${dataset}/exp${exp_num}/${data_split}
中生成。
我们使用 py-bsds500 进行边缘检测。一些错误已被修复并移植到py-bsds500
目录。使用以下命令编译扩展模块:
cd py-bsds500
python setup.py build_ext --inplace
然后评估 ODS、OIS 和 AP,如下所示:
cd py-bsds500/
python evaluate_parallel.py ../data/BSDS500 ../output/BSDS500/exp ${exp} / test --max_dist 0.0075
python evaluate_parallel.py ../data/NYUDv2 ../output/NYUDv2/exp ${exp} / test --max_dist 0.011
请注意,根据之前的工作,BSDS500 的本地化容差设置为 0.0075,NYUDv2 的本地化容差设置为 0.011。
该存储库中的代码主要使用以下存储库中的代码。谢谢。
[1] 亚历山大·基里洛夫、埃里克·明顿、尼基拉·拉维、汉子·毛、克洛伊·罗兰、劳拉·古斯塔夫森、泰特·肖、斯宾塞·怀特海德、亚历山大·C·伯格、Wan-Yen Lo、Piotr Dollar、罗斯·吉尔希克。分割任何东西。 ICCV 2023。
[2] Pablo Arbelaez、Michael Maire、Charles C. Fowlkes 和 Jitendra Malik。轮廓检测和分层图像分割。 IEEE 传输。模式肛门。马赫。英特尔2011。
[3] 内森·西尔伯曼、德里克·霍伊姆、普什梅特·科利和罗布·弗格斯。室内分割并支持 RGBD 图像的推理。欧洲CV 2012。
[4] 约翰·F·坎尼。边缘检测的计算方法。 IEEE 传输。模式肛门。马赫。英特尔 1986 年。
[5] Piotr Dollar 和 C. Lawrence Zitnick。使用结构化森林进行快速边缘检测。 IEEE 传输。模式肛门。马赫。英特尔2015。
[6] 山木弘明、高濑佑介、神部弘之、中本凉介。使用 SCESAME 进行零样本边缘检测:用于分段任意模型估计的基于谱聚类的集成。 2024 年 WACV 研讨会。
以下是 SAM 和边缘检测的研究列表。如果您想添加新的研究,请告诉我。
可能我回复的比较慢,但是欢迎大家踊跃投稿。