Segmentasi instance
Segmentasi instance menempatkan setiap instance objek dan mengembalikan mask per-piksel untuk masing-masing, bersama dengan kotak, kelas dan skor yang dikembalikan oleh detektor. Kunci task adalah segment.
Definisi
Segmentasi instance adalah deteksi ditambah bentuk. Setiap instance objek masih mendapatkan sebuah kotak, sebuah kelas, dan sebuah skor, dan juga mendapatkan mask biner yang menutupi piksel yang termasuk ke dalamnya. Mask dapat tumpang tindih, dan piksel yang tidak termasuk ke objek mana pun dibiarkan tidak ditetapkan, yang membedakan task dari segmentasi semantik dan segmentasi panoptik.
segment adalah kunci task kanonik, dan akhiran -seg dalam nama berkas checkpoint
memilihnya, sehingga task= tidak diperlukan saat memuat bobot yang dipublikasikan.
predict() mengisi result.masks bersama result.boxes. .data adalah
tumpukan (N, H, W) pada kanvas gambar asli, sejajar baris dengan kotak-kotak,
sehingga mask i milik kotak i. .xy mengubah setiap mask menjadi kontur terluar terbesar sebagai
array piksel (P, 2), dan .xyn memberikan kontur yang sama dalam keadaan normalisasi.
Model
Empat keluarga baik melatih maupun memprediksi mask: RF-DETR,
EdgeCrafter, D-FINE dan
RTMDet. RF-DETR membutuhkan tambahan sendiri,
pip install "libreyolo[rfdetr]"; ketiga lainnya berjalan pada paket dasar.
Mask R-CNN memprediksi, memvalidasi, dan mengekspor mask, tetapi
train()-nya menimbulkan NotImplementedError.
EoMT memprediksi dan memvalidasi mask dan juga tidak dapat melatih,
dan ekspornya lebih sempit lagi: export() hanya menerima task semantik, dan
menaikkan NotImplementedError untuk segment dan panoptic, karena
kontrak runtime query-mask yang kedua diperlukan belum didefinisikan. Gunakan EoMT untuk
mask instance di Python, bukan melalui grafik yang diekspor.
Grup terpisah mengekstrak segmentasi dari prompt daripada daftar kelas: klik, kotak atau frase memilih objek, dan model mengembalikan masknya. SAM, SAM 2, SAM 3, MobileSAM, EdgeTAM dan PicoSAM3 bekerja seperti ini , begitu juga dengan SenseNova-Vision, yang segmentasinya dirujuk: itu mengambil frase yang menamai satu objek. Mereka memuat melalui pabrik mereka sendiri dan tambahan, dan setiap halaman model membawa panggilan yang tepat.
Prediksi
Bobot diunduh dari Hugging Face saat penggunaan pertama dan disimpan dalam cache secara lokal.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Akhiran -seg pada nama berkas memilih head mask, sehingga tidak diperlukan task# argumen.model = LibreYOLO("LibreDFINEn-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape) # (N, H, W), satu mask per deteksiprint(result.boxes.xyxy.shape) # (N, 4), N baris yang samalibreyolo predict model=LibreDFINEn-seg.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDFINEn-seg.pt")result = model(SAMPLE_IMAGE) # .xy adalah daftar kontur (P, 2) dalam piksel, .xyn normalisasi yang sama.for name, contour in zip(result.boxes.cls, result.masks.xy): print(result.names[int(name)], contour.shape)from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTMDets-seg.pt")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)conf dan max_det membentuk output dengan cara yang sama seperti mereka melakukan deteksi, dan
topeng disaring bersama kotak yang mereka miliki. Lihat
prediksi untuk sumber, streaming, dan penanganan hasil.
Format dataset
Tata letaknya adalah tata letak deteksi: satu berkas label .txt per gambar, ditemukan dengan
menukar images dengan labels dalam jalur gambar dan mengubah ekstensi.
dataset/
data.yaml
images/
train/000001.jpg
val/000101.jpg
labels/
train/000001.txt
val/000101.txtYang berubah adalah barisnya. Sebuah segmen adalah indeks kelas diikuti oleh poligon datar:
<class_id> <x1> <y1> ... <xN> <yN>Setidaknya tiga titik, sehingga jumlah koordinat setelah indeks kelas genap
dan setidaknya enam, dan poligonnya harus tidak terdeformasi. Koordinatnya adalah
float dalam [0, 1] relatif terhadap lebar dan tinggi gambar asli. Sebuah baris deteksi lima
bidang juga diterima dalam dataset segmentasi dan dibaca sebagai
segmen persegi panjang, yang membuat dataset hanya kotak dapat dimuat tanpa
proses konversi.
YAML adalah YAML deteksi:
path: dataset
train: images/train
val: images/val
names:
0: person
1: bicycleJSON COCO asli juga berfungsi: tambahkan pemetaan annotations dari nama split ke
Berkas JSON, dan jalur split memberikan akar gambar.
Kereta
from libreyolo import LibreYOLO # Berlanjut dari bobot segmentasi yang diterbitkan, mask head termasuk.# data harus menunjuk ke dataset yang labelnya membawa poligon.model = LibreYOLO("LibreDFINEn-seg.pt")model.train(data="my-dataset.yaml", epochs=50, imgsz=640, batch=8, lr0=2e-4)libreyolo train model=LibreDFINEn-seg.pt data=my-dataset.yaml \ epochs=50 imgsz=640 batch=8 lr0=2e-4# Bobot deteksi tidak membawa mask head, jadi ini adalah transfer eksplisit# : head memulai tanpa pelatihan. Meminta task=segment adalah# apa yang memberinya wewenang.libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \ task=segment epochs=50 imgsz=640Pelatihan berlanjut dari -seg checkpoint yang diterbitkan secara default. Dimulai dari
bobot deteksi dimungkinkan tetapi merupakan transfer yang disengaja: bobot-bobot itu membawa
tidak ada mask head, jadi dimulai tanpa pelatihan, dan melewati task=segment itu apa
mengotorisasi pertukaran. Lihat pelatihan untuk dataset, augmentasi,
multi-GPU dan pencatat.
Validasi
val() mengembalikan kamus biasa dari kunci metrics/. Kotak dan mask adalah
dinilai secara terpisah, keduanya dengan evaluasi COCO, dan nomor mask adalah
utama.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"]) # maskprint(metrics["metrics/mAP50-95(M)"]) # mask, eksplisitprint(metrics["metrics/mAP50-95(B)"]) # kotaklibreyolo val model=LibreDFINEn-seg.pt data=my-dataset.yamlKunci tanpa akhiran memegang mask results: metrics/mAP50-95, metrics/mAP50,
metrics/mAP75, kemudian metrics/mAP_small, metrics/mAP_medium dan
metrics/mAP_large menurut area objek, dan metrics/AR1, metrics/AR10,
metrics/AR100, metrics/AR_small, metrics/AR_medium, metrics/AR_large
untuk rata-rata recall. metrics/AR_max_det dan metrics/max_det merekam
deteksi kap yang digunakan saat menjalankan.
Empat angka juga diterbitkan dengan akhiran eksplisit, (M) untuk mask dan
(B) untuk kotak, sehingga perbandingan tidak pernah bergantung pada nomor mana yang family
diputuskan untuk dipanggil sebagai utama: metrics/mAP50-95(M) dan metrics/mAP50-95(B),
metrics/mAP50(M) dan metrics/mAP50(B), metrics/precision(M) dan
metrics/precision(B), metrics/recall(M) dan metrics/recall(B). Ada
tidak ada metrics/precision atau metrics/recall tanpa akhiran pada task ini.
Baca kunci presisi dan recall dengan hati-hati. Mereka disimpan untuk kompatibilitas
mundur dan merupakan alias, bukan titik operasi: metrics/precision(M)
memiliki nilai yang sama dengan metrics/mAP50-95(M), dan metrics/recall(M) memiliki
nilai yang sama dengan mask AR pada 100 deteksi, dengan (B) berperilaku sama untuk kotak.
Memetakan sepasang dari mereka melaporkan satu angka dua kali.
Ekspor
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn-seg.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreDFINEn-seg.pt format=onnx imgsz=640from libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik mengarahkan berdasarkan sufiks berkas, jadi artefak yang diekspor dimuat# seperti checkpoint dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreDFINEn-seg.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)Artefak yang diekspor dimuat kembali melalui LibreYOLO() berdasarkan akhiran filenya, sehingga
berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan
Results yang sama. Cakupan segmentasi lebih sempit daripada cakupan deteksi pada
sama dengan family. Matriks di setiap halaman model dihasilkan dari set yang tervalidasi
dan menyebutkan alasan mengapa target tidak tersedia. Lihat
ekspor dan deploy untuk format, tambahan mereka dan batasan
mereka.