このリポジトリは、Segment Anything Model (SAM) [1] の自動マスク生成 (AMG) を使用してエッジ検出を実行するためのコードを提供します。論文で使用されているコードは現在公開されていないため、この実装は論文に記載されている説明に基づいています。
左の画像は BSDS から取得したものです。中央がグラウンドトゥルースエッジです。右側の画像は、エッジ検出を適用した結果です。
このリポジトリは、Docker 環境で実行することを目的としています。 Docker に詳しくない場合は、 torch==1.11.0
で環境をセットアップし、docker/requirements.txt にリストされているパッケージを適宜インストールしてください。
以下のようにDockerイメージを作成してください。
docker build -t ${USER} /samed docker
root としての実行は可能な限り避けてください。たとえば、 -u
オプションを適切に設定するには、docker ドキュメントを参照してください。
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] が使用されていました。ただし、私たちの環境では、論文で報告されているエッジは生成されませんでした。したがって、エッジ 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] アレクサンダー・キリロフ、エリック・ミンタン、ニキーラ・ラヴィ、ハンジ・マオ、クロエ・ロランド、ローラ・グスタフソン、テテ・シャオ、スペンサー・ホワイトヘッド、アレクサンダー・C・バーグ、ワン・イェン・ロー、ピョートル・ダラー、ロス・ガーシック。何でもセグメント化します。 ICCV 2023。
[2] パブロ・アルベラエス、マイケル・メア、チャールズ・C・フォークス、ジテンドラ・マリク。輪郭検出と階層的画像セグメンテーション。 IEEEトランス。パターンアナル。マッハ。インテル 2011。
[3] ネイサン・シルバーマン、デレク・ホイエム、プッシュミート・コーリ、ロブ・ファーガス。屋内セグメンテーションと RGBD 画像からの推論をサポートします。 ECCV 2012。
[4] ジョン・F・キャニー。エッジ検出への計算的アプローチ。 IEEEトランス。パターンアナル。マッハ。インテル 1986 年。
[5] ピョートル・ダラーとC・ローレンス・ジトニック。構造化フォレストを使用した高速エッジ検出。 IEEEトランス。パターンアナル。マッハ。インテル 2015。
[6]山際宏明、高瀬祐介、神部裕之、中本良輔。 SCESAME を使用したゼロショット エッジ検出: セグメント何でもモデル推定のためのスペクトル クラスタリング ベースのアンサンブル。 WACVワークショップ2024。
以下は、SAM とエッジ検出に関する研究のリストです。新しい研究を追加したい場合はお知らせください。
返事が遅くなるかもしれませんが、皆さんもぜひご協力ください。