Apa yang berikutnya
Jalur deteksi dan segmentasi merupakan inti yang telah divalidasi. Halaman ini mendokumentasikan head task baru dan teknik pelatihan yang sedang kami bangun di atasnya: klasifikasi, bounding box berorientasi, pose, dan fine-tuning yang hemat parameter.
Ringkasan
LibreYOLO adalah framework multi-task: satu family model dapat menggunakan head yang berbeda. Selain jalur deteksi dan segmentasi yang telah divalidasi, beberapa task baru sedang ditambahkan untuk dua family unggulan, YOLO9 dan RF-DETR. Semuanya terhubung ke factory LibreYOLO(...) dan container Results yang sama, sehingga hanya menjadi tambahan kecil setelah memahami API inti.
- Klasifikasi untuk YOLO9 dan RF-DETR. Label seluruh gambar dengan probabilitas top-1 / top-5.
- Bounding box berorientasi (OBB) untuk YOLO9 dan RF-DETR. Kotak yang dirotasi untuk gambar udara dan dokumen.
- Keypoint / pose untuk YOLO9 dan RF-DETR. Keypoint orang COCO-17.
- Deteksi objek kecil dengan YOLO9-P2, varian YOLOv9 dengan skala stride 4 untuk objek berukuran 4-16 piksel pada gambar udara dan drone, termasuk checkpoint pratinjau riset VisDrone.
- Fine-tuning LoRA / DoRA untuk RF-DETR. Adaptasikan backbone transformer dengan sebagian kecil memori.
Baca ini terlebih dahulu
Semua yang ada di halaman ini bersifat eksperimental dan sebagian masih dikembangkan di branch fitur. API, nilai default, dan format label dapat berubah sebelum dipromosikan ke inti yang telah divalidasi. Bagian Stabilitas mencatat status setiap fitur secara tepat.
Memilih Task
Setiap family menggunakan deteksi secara default. Pilih task lain melalui salah satu dari tiga cara berikut, yang ditentukan menurut urutan prioritas ini:
| Prioritas | Mekanisme | Contoh |
|---|---|---|
| 1 | Argumen eksplisit | task="obb" |
| 2 | Metadata checkpoint | task yang dicatat di dalam berkas .pt terlatih |
| 3 | Sufiks nama berkas | -cls, -obb, -pose |
| 4 | Default family | detect |
Karena factory publik LibreYOLO(...) mengharapkan berkas bobot nyata, cara paling jelas untuk memulai salah satu task ini dari nol adalah membuat class family secara langsung dan memberikan task=. Checkpoint terlatih dapat dimuat kembali melalui factory terpadu dan task-nya akan terdeteksi secara otomatis.
1 from libreyolo import LibreYOLO, LibreYOLO9, LibreRFDETR 2 3 # Start a task from scratch via the family class 4 m = LibreYOLO9(None, size="t", task="classify", nb_classes=10) 5 6 # Load a trained checkpoint via the unified factory (task auto-detected) 7 m = LibreYOLO("LibreYOLO9t-obb.pt")
Klasifikasi Gambar
Klasifikasi memberikan satu label untuk seluruh gambar. YOLO9 mempertahankan backbone dan menambahkan head klasifikasi ringan. RF-DETR menggunakan kembali encoder DINOv2 dan menambahkan head linear dengan pooling. Keduanya berjalan pada ukuran 224 kali 224.
Inferensi dan hasil Probs
Prediksi mengembalikan objek Results dengan field probs yang memuat softmax untuk seluruh kelas.
1 from libreyolo import LibreYOLO 2 3 model = LibreYOLO("LibreYOLO9t-cls.pt") 4 r = model.predict("cat.jpg") 5 6 print(r.probs.top1) # class id of the argmax 7 print(r.probs.top1conf) # its probability 8 print(r.probs.top5) # [id, id, id, id, id] 9 print(model.names[r.probs.top1]) # human-readable label
| Atribut | Tipe | Arti |
|---|---|---|
probs.top1 | int | ID kelas argmax. |
probs.top5 | list[int] | ID kelas top-5, dalam urutan menurun. |
probs.top1conf | float | Probabilitas kelas top-1. |
probs.top5conf | tensor | Probabilitas kelas top-5. |
probs.data | tensor | Vektor softmax lengkap. |
Format dataset dan pelatihan
Klasifikasi menggunakan tata letak ImageFolder, bukan YAML. Nama kelas diambil dari nama subfolder yang telah diurutkan dan ditetapkan berdasarkan split pelatihan.
1 dataset/ 2 train/ 3 cat/ img001.jpg ... 4 dog/ img104.jpg ... 5 val/ 6 cat/ ... 7 dog/ ...
Argumen data= menerima folder, URL .zip, atau nama unduhan otomatis yang dikenal (imagenette160 dan imagenet10). Head dibangun ulang secara otomatis agar sesuai dengan jumlah kelas dalam dataset.
1 from libreyolo import LibreYOLO9 2 3 model = LibreYOLO9(None, size="t", task="classify", nb_classes=10) 4 result = model.train( 5 data="imagenette160", # folder, .zip URL, or known name 6 epochs=10, batch=64, imgsz=224, 7 optimizer="adamw", lr0=1e-3, 8 ) 9 # Validation reports metrics/accuracy_top1 and metrics/accuracy_top5
Pengujian referensi
Pemeriksaan kewajaran singkat dari pengembangan: YOLO9-t mencapai top-1 0.79 / top-5 0.975 pada imagenette160 (10 epoch), dan RF-DETR-n mencapai top-1 0.69 / top-5 0.96 (6 epoch). RF-DETR diuntungkan oleh akses internet pada pengujian pertama untuk mengambil backbone DINOv2. Tanpa koneksi, model kembali menggunakan inisialisasi acak.
Bounding Box Berorientasi (OBB)
Bounding box berorientasi memiliki sudut rotasi, yang diperlukan untuk gambar udara, dokumen, dan adegan yang padat. YOLO9 menambahkan cabang sudut ke head deteksi. RF-DETR menambahkan embedding sudut yang dapat dipelajari ke decoder.
Inferensi dan hasil OBB
Results menyediakan field obb. Sudut dinyatakan dalam radian.
1 from libreyolo import LibreYOLO 2 3 model = LibreYOLO("LibreYOLO9t-obb.pt") 4 r = model.predict("aerial.jpg") 5 6 for i in range(len(r.obb.cls)): 7 cx, cy, w, h, angle = r.obb.xywhr[i] # angle in radians 8 corners = r.obb.xyxyxyxy[i] # 4 (x, y) corner points 9 conf, cls = r.obb.conf[i], r.obb.cls[i]
| Atribut | Dimensi | Arti |
|---|---|---|
obb.xywhr | N x 5 | [cx, cy, w, h, angle], sudut dalam radian. |
obb.xyxyxyxy | N x 4 x 2 | Empat titik sudut per kotak. |
obb.conf | N | Skor keyakinan per kotak. |
obb.cls | N | ID kelas per kotak. |
Format dataset dan pelatihan
OBB menggunakan data YAML bergaya deteksi standar, tetapi labelnya berupa berkas teks YOLO-OBB dengan tepat sembilan field per baris: ID kelas diikuti empat titik sudut yang dinormalisasi. Sudut dihitung dari titik-titik sudut, bukan disimpan.
1 # class_id x1 y1 x2 y2 x3 y3 x4 y4 (all normalized to [0, 1]) 2 0 0.51 0.32 0.66 0.38 0.62 0.55 0.47 0.49 3 2 0.10 0.71 0.18 0.69 0.20 0.80 0.12 0.82
Checkpoint deteksi biasa tidak dapat dimuat langsung ke model OBB. Peralihan dari deteksi ke OBB hanya diizinkan sebagai warm-start pelatihan: berikan pretrained=True (YOLO9) atau flag transfer eksplisit pada RF-DETR. Mosaic dan mixup dinonaktifkan untuk OBB hingga augmentasi yang memahami titik sudut tersedia, dan inferensi berbasis tile tidak didukung.
1 from libreyolo import LibreYOLO9 2 3 model = LibreYOLO9(None, size="t", task="obb") 4 # Warm-start the backbone from a same-family detect checkpoint 5 result = model.train(data="dota8.yaml", pretrained=True, epochs=100, imgsz=640) 6 7 # CLI equivalent 8 # libreyolo train model=LibreYOLO9t.pt data=dota8.yaml --task obb
Validasi menggunakan AP rotated-IoU, yang dilaporkan sebagai mAP50 dan mAP50-95 dalam grup metrik OBB.
Keypoint / Pose
Estimasi pose memprediksi keypoint per instance yang terdeteksi. Tata letak default adalah keypoint orang COCO-17. Pose YOLO9 dan RF-DETR hanya mendukung satu kelas orang pada versi pertamanya. Pose YOLO-NAS dan EdgeCrafter sudah tersedia dalam source tree.
Inferensi dan hasil Keypoints
Results menyediakan field keypoints dengan shape (N, K, 3), dengan kanal terakhir menyatakan visibilitas atau skor keyakinan dalam koordinat piksel gambar asli.
1 from libreyolo import LibreYOLO 2 3 model = LibreYOLO("LibreYOLO9t-pose.pt") 4 r = model.predict("athletes.jpg") 5 6 kp = r.keypoints 7 print(kp.xy.shape) # (N, 17, 2) pixel coordinates 8 print(kp.conf) # (N, 17) per-keypoint visibility / confidence 9 print(kp.xyn) # normalized coordinates 10 print(r.boxes.xyxy) # person boxes still come along
| Atribut | Dimensi | Arti |
|---|---|---|
keypoints.xy | N x K x 2 | Koordinat piksel keypoint. |
keypoints.xyn | N x K x 2 | Koordinat keypoint yang dinormalisasi. |
keypoints.conf | N x K | Visibilitas / skor keyakinan per keypoint. |
keypoints.has_visible | N x K | Mask visibilitas boolean. |
Format dataset dan pelatihan
Pose menggunakan data YAML yang harus mendeklarasikan kpt_shape: [K, 2|3] dan, untuk augmentasi pembalikan horizontal, flip_idx. Label berupa baris teks YOLO-pose: ID kelas, kotak yang dinormalisasi, lalu K triplet keypoint (x, y, v) dengan visibilitas v dalam {0, 1, 2}.
1 path: coco8-pose 2 train: images/train 3 val: images/val 4 nc: 1 5 names: 6 0: person 7 kpt_shape: [17, 3] 8 flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
1 from libreyolo import LibreYOLO9 2 3 # Warm-start from a detection checkpoint; the keypoint head is reinitialized 4 model = LibreYOLO9("LibreYOLO9t.pt", size="t", task="pose") 5 model.train(data="coco8-pose.yaml", epochs=100, imgsz=640) 6 7 # Validation reports OKS-based AP via the pose validator
Dalam pengembangan aktif
Pose YOLO9 dan RF-DETR berada di branch fitur dan belum digabungkan. Perlakukan API di atas sebagai kontrak yang dituju, bukan kontrak yang sudah dibekukan. Bobot pose YOLO-NAS ditautkan dari upstream alih-alih dicerminkan dan harus disiapkan secara manual.
Deteksi Objek Kecil (YOLO9-P2)
YOLO9-P2 adalah YOLOv9 dengan skala deteksi keempat pada stride 4. YOLOv9 standar mendeteksi pada stride 8/16/32, sehingga objek di bawah ~16 piksel berada di bawah grid terhalusnya. Head P2 menangkap rentang 4-16 piksel yang mendominasi rekaman udara dan drone.
Dalam A/B terkontrol pada VisDrone (resep, resolusi, dan inisialisasi sama, hanya head P2 yang berubah), AP objek kecil meningkat +49% dibanding YOLOv9 standar dengan ukuran yang sama. Penambahan resolusi pelatihan yang lebih tinggi dan ukuran s yang lebih besar kira-kira menggandakan AP objek kecil di seluruh proyek:
| Model | AP | AP50 | AP_small |
|---|---|---|---|
| YOLO9-t standar @640 (kontrol) | 0.123 | 0.220 | 0.047 |
| YOLO9-P2-t @640 (A/B dengan resep yang sama) | 0.138 | 0.254 | 0.070 |
| YOLO9-P2-s @768 (pratinjau yang dirilis) | 0.226 | 0.385 | 0.141 |
Validasi VisDrone2019-DET (548 gambar), pycocotools, satu seed. Anggap ±1 poin sebagai noise.
Pratinjau riset VisDrone
Checkpoint terlatih dipublikasikan sebagai LibreYOLO9P2s-visdrone. Family ini telah digabungkan ke dev, tetapi belum tersedia dalam rilis PyPI. Instal dari sumber hingga rilis berikutnya.
1 from libreyolo import LibreYOLO 2 3 # Auto-downloads from the LibreYOLO Hugging Face org 4 model = LibreYOLO("LibreYOLO9P2s-visdrone.pt") 5 6 # Evaluate/predict at 768 - the resolution it was trained at 7 results = model.predict("aerial.jpg", imgsz=768, conf=0.25)
Lisensi nonkomersial
Checkpoint pratinjau dilatih pada VisDrone2019-DET (AISKYEYE, Tianjin University) yang berlisensi CC BY-NC-SA 3.0: hanya untuk penggunaan nonkomersial, berbeda dari kode MIT LibreYOLO dan bobot default COCO. Model ini mendeteksi 10 kelas udara VisDrone, bukan COCO. Kartu model menyertakan resep pelatihan yang tepat, metrik per epoch, dan konverter dataset clean-room agar hasilnya dapat direproduksi atau model dapat dilatih ulang pada data Anda sendiri.
Kapan sebaiknya digunakan (atau tidak)
Sesuaikan arsitektur dengan situasi. Pada data seperti COCO ("kecil" berarti 16-32 piksel), head P2 tidak membantu. YOLOv9 standar adalah pilihan yang lebih baik untuk data tersebut. Gunakan YOLO9-P2 saat objek berukuran di bawah ~16 piksel: rekaman drone dan udara, CCTV jarak jauh, atau tile satelit. Skala tambahan kira-kira menggandakan komputasi dan jumlah anchor. Itulah konsekuensi dari grid stride 4.
Melatih model sendiri
YOLO9-P2 melakukan inisialisasi transfer dari checkpoint deteksi YOLOv9 standar: backbone, neck bersama, dan menara head yang sudah ada dimuat, sedangkan modul P2 baru dimulai dari awal. Resep di bawah merangkum pelajaran yang kami peroleh dengan susah payah dari data objek sangat kecil:
1 from libreyolo import LibreYOLO9P2 2 3 model = LibreYOLO9P2(None, size="s") 4 model.train( 5 data="/abs/path/tiny_objects.yaml", 6 imgsz=768, # resolution is the biggest lever for tiny objects 7 lr0=0.005, # the family default 0.01 diverges on transfer init 8 mosaic_prob=0.0, # mosaic tiling shrinks tiny objects below detectability 9 mixup_prob=0.0, 10 hsv_prob=1.0, flip_prob=0.5, 11 max_labels=600, # dense aerial frames exceed the default 100-box cap 12 pretrained="LibreYOLO9s.pt", # transfer init from stock YOLOv9 13 epochs=60, 14 )
Fine-Tuning LoRA / DoRA
Adapter bergaya LoRA memungkinkan fine-tuning pada backbone transformer RF-DETR dengan melatih sekumpulan kecil matriks rank rendah sementara bobot dasar tetap dibekukan. Cara ini mengurangi memori optimizer dan gradien, sehingga ideal untuk mengadaptasikan checkpoint yang kuat ke domain baru pada hardware sederhana.
Mengaktifkannya
Seluruh API publik hanya berupa satu flag pada train(). Tidak ada pengaturan rank, alpha, atau modul target yang perlu disetel. Resepnya ditetapkan pada konfigurasi yang telah diuji dengan baik. Di balik layar, implementasinya menggunakan DoRA (LoRA dengan dekomposisi bobot, rank 16) yang diterapkan pada proyeksi query, key, dan value attention DINOv2.
1 from libreyolo import LibreYOLO 2 3 model = LibreYOLO("rf-detr-nano.pth") # sizes n, s, m, l 4 result = model.train( 5 data="data.yaml", 6 lora=True, # DoRA on the frozen DINOv2 backbone 7 epochs=100, batch_size=4, lr=1e-4, 8 ) 9 10 # Resume: LoRA is auto-detected from the checkpoint, no need to repeat the flag 11 model.train(data="data.yaml", resume=True)
1 # CLI equivalent 2 libreyolo train --model rf-detr-nano.pth --data data.yaml --lora
Checkpoint dan ekspor
- Checkpoint pelatihan menyimpan tensor adapter, dan konfigurasi mencatat bahwa LoRA digunakan, sehingga pemuatan dan pelanjutan pelatihan membangun ulang graph adapter secara otomatis.
- Head deteksi selalu dapat dilatih, sehingga model tetap dapat diadaptasikan ke jumlah kelas baru.
export()menggabungkan kembali adapter ke bobot padat. Model yang diekspor bersifat biasa dan tidak memiliki dependensipeft.- LoRA hanya tersedia untuk RF-DETR. Memberikan
lora=Trueke family lain memicu error yang jelas.
Instal paket tambahan
Pelatihan LoRA memerlukan dependensi adapter: pip install "libreyolo[lora]", yang memasang stack RF-DETR dan peft. Model yang telah diekspor (digabungkan) tidak memerlukannya saat inferensi.
Stabilitas
Status setiap fitur saat ini. Semua yang ada di sini bersifat eksperimental. Tabel ini menunjukkan kondisi sebenarnya.
| Fitur | Family model | Status |
|---|---|---|
| Klasifikasi | YOLO9, RF-DETR | PR terbuka |
| Bounding box berorientasi (OBB) | YOLO9, RF-DETR | Eksperimental |
| Keypoint / pose | YOLO9, RF-DETR | Segera hadir |
| Keypoint / pose | YOLO-NAS, EdgeCrafter | Tersedia |
| Deteksi objek kecil | YOLO9-P2 | Pratinjau riset |
| LoRA / DoRA | RF-DETR | Ditinjau |
Mencari jalur yang stabil?
Untuk penggunaan di produksi, inti yang telah divalidasi adalah deteksi YOLO9 serta deteksi dan segmentasi RF-DETR. Lihat dokumentasi inti untuk kemampuan tersebut, dan LibreVLM untuk deteksi open-vocabulary.