이 저장소는 SAM(Segment Anything Model) [1]의 AMG(자동 마스크 생성)를 사용하여 가장자리 감지를 수행하기 위한 코드를 제공합니다. 논문에 사용된 코드는 현재 대중에게 제공되지 않으므로 이 구현은 논문에 제공된 설명을 기반으로 합니다.
왼쪽 이미지는 BSDS에서 가져온 것입니다. 중간은 기준 진실 가장자리입니다. 오른쪽 이미지는 Edge 감지를 적용한 결과입니다.
이 저장소는 Docker 환경에서 실행되도록 만들어졌습니다. Docker에 익숙하지 않은 경우 torch==1.11.0
으로 환경을 설정하고 그에 따라 docker/requirements.txt에 나열된 패키지를 설치하십시오.
다음과 같이 Docker 이미지를 생성해 주세요.
docker build -t ${USER} /samed docker
가능하면 루트로 실행하는 것을 피해야 합니다. 예를 들어 -u
옵션을 올바르게 설정하려면 docker 문서를 참조하세요.
루트로 실행해도 괜찮다면 다음과 같이 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]에서는 Edge NMS를 위해 Canny edge NMS[4]가 사용되었습니다. 그러나 우리 환경에서는 논문에 보고된 가장자리를 생성하지 못했습니다. 따라서 우리는 Edge NMS에 OpenCV의 Structured Forests [5] 모델을 일시적으로 사용했습니다.
다음과 같이 구조적 포리스트 모델을 다운로드합니다.
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] Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexander C. Berg, Wan-Yen Lo, Piotr Dollar, Ross Girshick. 무엇이든 분류하세요. ICCV 2023.
[2] Pablo Arbelaez, Michael Maire, Charless C. Fowlkes 및 Jitendra Malik. 윤곽선 감지 및 계층적 이미지 분할. IEEE 트랜스. 패턴 애널. 마하. 인텔 2011.
[3] Nathan Silberman, Derek Hoiem, Pushmeet Kohli 및 Rob Fergus. 실내 분할 및 RGBD 이미지의 추론을 지원합니다. ECCV 2012.
[4] 존 F. 캐니. 가장자리 감지에 대한 계산적 접근 방식입니다. IEEE 트랜스. 패턴 애널. 마하. 인텔 1986.
[5] 피오트르 달러와 C. 로렌스 지트닉. 구조화된 포리스트를 사용한 빠른 에지 감지. IEEE 트랜스. 패턴 애널. 마하. 인텔 2015.
[6] 야마기와 히로아키, 타카세 유스케, 캄베 히로유키, 나카모토 료스케. SCESAME을 사용한 제로 샷 에지 감지: 세그먼트 무엇이든 모델 추정을 위한 스펙트럼 클러스터링 기반 앙상블. WACV 워크숍 2024.
다음은 SAM 및 가장자리 감지에 대한 연구 목록입니다. 새로운 연구를 추가하고 싶다면 알려주시기 바랍니다.
답변이 느릴 수도 있지만 모두가 기여해 주실 수 있습니다.