Untuk saat ini bagian ini hanya tersedia dalam bahasa Inggris.
Dokumentasi inti
Task eksperimental

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:

PrioritasMekanismeContoh
1Argumen eksplisittask="obb"
2Metadata checkpointtask yang dicatat di dalam berkas .pt terlatih
3Sufiks nama berkas-cls, -obb, -pose
4Default familydetect

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.

python
1from libreyolo import LibreYOLO, LibreYOLO9, LibreRFDETR
2
3# Start a task from scratch via the family class
4m = LibreYOLO9(None, size="t", task="classify", nb_classes=10)
5
6# Load a trained checkpoint via the unified factory (task auto-detected)
7m = LibreYOLO("LibreYOLO9t-obb.pt")

Klasifikasi Gambar

YOLO9: t, s, m, cRF-DETR: n, s, m, l

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.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("LibreYOLO9t-cls.pt")
4r = model.predict("cat.jpg")
5
6print(r.probs.top1) # class id of the argmax
7print(r.probs.top1conf) # its probability
8print(r.probs.top5) # [id, id, id, id, id]
9print(model.names[r.probs.top1]) # human-readable label
AtributTipeArti
probs.top1intID kelas argmax.
probs.top5list[int]ID kelas top-5, dalam urutan menurun.
probs.top1conffloatProbabilitas kelas top-1.
probs.top5conftensorProbabilitas kelas top-5.
probs.datatensorVektor 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.

dataset/
1dataset/
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.

python
1from libreyolo import LibreYOLO9
2
3model = LibreYOLO9(None, size="t", task="classify", nb_classes=10)
4result = 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)

YOLO9: t, s, m, cRF-DETR: n, s, m, l

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.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("LibreYOLO9t-obb.pt")
4r = model.predict("aerial.jpg")
5
6for 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]
AtributDimensiArti
obb.xywhrN x 5[cx, cy, w, h, angle], sudut dalam radian.
obb.xyxyxyxyN x 4 x 2Empat titik sudut per kotak.
obb.confNSkor keyakinan per kotak.
obb.clsNID 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.

labels/aerial_001.txt
1# class_id x1 y1 x2 y2 x3 y3 x4 y4 (all normalized to [0, 1])
20 0.51 0.32 0.66 0.38 0.62 0.55 0.47 0.49
32 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.

python
1from libreyolo import LibreYOLO9
2
3model = LibreYOLO9(None, size="t", task="obb")
4# Warm-start the backbone from a same-family detect checkpoint
5result = 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

YOLO9 + RF-DETR: landing soonYOLO-NAS, EdgeCrafter: available

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.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("LibreYOLO9t-pose.pt")
4r = model.predict("athletes.jpg")
5
6kp = r.keypoints
7print(kp.xy.shape) # (N, 17, 2) pixel coordinates
8print(kp.conf) # (N, 17) per-keypoint visibility / confidence
9print(kp.xyn) # normalized coordinates
10print(r.boxes.xyxy) # person boxes still come along
AtributDimensiArti
keypoints.xyN x K x 2Koordinat piksel keypoint.
keypoints.xynN x K x 2Koordinat keypoint yang dinormalisasi.
keypoints.confN x KVisibilitas / skor keyakinan per keypoint.
keypoints.has_visibleN x KMask 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}.

coco8-pose.yaml
1path: coco8-pose
2train: images/train
3val: images/val
4nc: 1
5names:
6 0: person
7kpt_shape: [17, 3]
8flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
python
1from libreyolo import LibreYOLO9
2
3# Warm-start from a detection checkpoint; the keypoint head is reinitialized
4model = LibreYOLO9("LibreYOLO9t.pt", size="t", task="pose")
5model.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: t, sVisDrone research preview

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:

ModelAPAP50AP_small
YOLO9-t standar @640 (kontrol)0.1230.2200.047
YOLO9-P2-t @640 (A/B dengan resep yang sama)0.1380.2540.070
YOLO9-P2-s @768 (pratinjau yang dirilis)0.2260.3850.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.

python
1from libreyolo import LibreYOLO
2
3# Auto-downloads from the LibreYOLO Hugging Face org
4model = LibreYOLO("LibreYOLO9P2s-visdrone.pt")
5
6# Evaluate/predict at 768 - the resolution it was trained at
7results = 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:

python
1from libreyolo import LibreYOLO9P2
2
3model = LibreYOLO9P2(None, size="s")
4model.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

RF-DETR: n, s, m, l

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.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("rf-detr-nano.pth") # sizes n, s, m, l
4result = 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
11model.train(data="data.yaml", resume=True)
bash
1# CLI equivalent
2libreyolo 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 dependensi peft.
  • LoRA hanya tersedia untuk RF-DETR. Memberikan lora=True ke 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.

FiturFamily modelStatus
KlasifikasiYOLO9, RF-DETRPR terbuka
Bounding box berorientasi (OBB)YOLO9, RF-DETREksperimental
Keypoint / poseYOLO9, RF-DETRSegera hadir
Keypoint / poseYOLO-NAS, EdgeCrafterTersedia
Deteksi objek kecilYOLO9-P2Pratinjau riset
LoRA / DoRARF-DETRDitinjau

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.

Pantau perkembangan dan kode sumber di GitHub