พื้นที่เก็บข้อมูลนี้จัดเตรียมโค้ดสำหรับดำเนินการตรวจจับขอบโดยใช้ Automatic Mask Generation (AMG) ของ Segment Anything Model (SAM) [1] เนื่องจากรหัสที่ใช้ในรายงานยังไม่เปิดเผยต่อสาธารณะในปัจจุบัน การใช้งานนี้จึงขึ้นอยู่กับคำอธิบายที่ให้ไว้ในรายงาน
ภาพด้านซ้ายนำมาจาก BSDS ตรงกลางคือขอบความจริงภาคพื้นดิน ภาพทางด้านขวาเป็นผลจากการใช้การตรวจจับขอบ
พื้นที่เก็บข้อมูลนี้มีวัตถุประสงค์เพื่อให้ทำงานในสภาพแวดล้อมนักเทียบท่า หากคุณไม่คุ้นเคยกับ 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] ถูกนำมาใช้สำหรับ edge NMS อย่างไรก็ตาม ในสภาพแวดล้อมของเรา มันไม่ได้สร้างขอบรายงานในรายงาน ดังนั้นเราจึงใช้โมเดล Structured Forests [5] ของ OpenCV สำหรับ Edge 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) Piotr Dollar และ C. Lawrence Zitnick การตรวจจับขอบอย่างรวดเร็วโดยใช้ฟอเรสต์ที่มีโครงสร้าง IEEE ทรานส์ รูปแบบก้น มัค อินเทล 2015
[6] ฮิโรอากิ ยามากิวะ, ยูสุเกะ ทาคาเสะ, ฮิโรยูกิ คัมเบ และเรียวสุเกะ นากาโมโตะ การตรวจจับขอบแบบ Zero-Shot ด้วย SCESAME: ชุดที่อิงการจัดกลุ่มสเปกตรัมสำหรับการประมาณค่าโมเดลแบบแบ่งส่วน การประชุมเชิงปฏิบัติการ WACV 2024
ต่อไปนี้คือรายการการศึกษาเกี่ยวกับ SAM และการตรวจจับขอบ โปรดแจ้งให้เราทราบหากคุณต้องการเพิ่มงานวิจัยใหม่
อาจจะตอบช้าไปบ้างแต่ก็ยินดีช่วยเหลือทุกท่านครับ