此儲存庫提供了使用分段任意模型 (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 和邊緣檢測的研究清單。如果您想添加新的研究,請告訴我。
可能我回的比較慢,但歡迎大家踴躍投稿。