يوفر هذا المستودع رمزًا لتنفيذ اكتشاف الحافة باستخدام إنشاء القناع التلقائي (AMG) لنموذج أي شيء للقطعة (SAM) [1]. نظرًا لأن الكود المستخدم في الورقة غير متاح حاليًا للجمهور، فإن هذا التنفيذ يعتمد على الأوصاف المقدمة في الورقة.
الصورة على اليسار مأخوذة من BSDS. الوسط هو حافة الحقيقة الأرضية. الصورة الموجودة على اليمين هي نتيجة تطبيق اكتشاف الحواف.
تم تصميم هذا المستودع ليتم تشغيله في بيئة Docker. إذا لم تكن على دراية بـ Docker، فيرجى إعداد بيئة باستخدام torch==1.11.0
وتثبيت الحزم المدرجة في docker/requirements.txt وفقًا لذلك.
الرجاء إنشاء صورة Docker على النحو التالي:
docker build -t ${USER} /samed docker
يجب تجنب التنفيذ كجذر إن أمكن. على سبيل المثال، ارجع إلى مستند عامل الإرساء لتعيين الخيار -u
بشكل صحيح.
إذا كنت لا تمانع في التشغيل كجذر، فيمكنك تنفيذ حاوية 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
قم بتنزيل مجموعة بيانات اختبار NYUDv2 [3] من EDTER. ثم قم بإعداد بنية الدليل التالية:
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]، تم استخدام Canny edge NMS [4] لحافة NMS. ومع ذلك، في بيئتنا، لم تنتج الحواف المذكورة في الورقة. لذلك، استخدمنا مؤقتًا نموذج OpenCV’s 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
لاحظ أنه بعد الأعمال السابقة، تم ضبط تسامح الترجمة على 0.0075 لـ BSDS500 و0.011 لـ NYUDv2.
يستخدم الكود الموجود في هذا المستودع بشكل أساسي الكود من المستودعات التالية. شكرًا لك.
[1] ألكسندر كيريلوف، إريك مينتون، نيكيلا رافي، هانزي ماو، كلوي رولاند، لورا جوستافسون، تيتي شياو، سبنسر وايتهيد، ألكسندر سي بيرج، وان ين لو، بيوتر دولار، روس جيرشيك. شريحة أي شيء. الاتفاقية الدولية للتغير المناخي 2023.
[2] بابلو أربيلايز، ومايكل ماير، وتشارلز سي. فولكس، وجيتندرا مالك. كشف الكفاف وتجزئة الصورة الهرمية. IEEE ترانس. نمط الشرج. ماخ. إنتل 2011.
[3] ناثان سيلبرمان، ديريك هويم، بوشميت كوهلي، وروب فيرغوس. التجزئة الداخلية ودعم الاستدلال من صور RGBD. إي سي سي في 2012.
[4] جون إف كاني. نهج حسابي للكشف عن الحافة. IEEE ترانس. نمط الشرج. ماخ. إنتل 1986.
[5] بيوتر دولار وسي. لورانس زيتنيك. الكشف السريع عن الحواف باستخدام الغابات المنظمة. IEEE ترانس. نمط الشرج. ماخ. إنتل 2015.
[6] هيرواكي ياماغيوا، يوسوكي تاكاسي، هيرويوكي كامبي، وريوسوكي ناكاموتو. اكتشاف الحواف بدون لقطة باستخدام SCESAME: مجموعة قائمة على المجموعات الطيفية لتقدير نموذج أي شيء للقطاعات. ورشة عمل WACV 2024.
فيما يلي قائمة بالدراسات حول SAM واكتشاف الحواف. يرجى إعلامي إذا كنت ترغب في إضافة بحث جديد.
قد أكون بطيئا في الرد، ولكن الجميع مدعوون للمساهمة.