Phần này hiện chỉ có bản tiếng Anh.
Tài liệu cốt lõi
Tác vụ thử nghiệm

Có gì tiếp theo

Phát hiện và phân đoạn là các quy trình cốt lõi đã được kiểm chứng. Trang này ghi lại các head tác vụ và kỹ thuật huấn luyện mới mà chúng tôi đang tích cực xây dựng trên nền tảng đó: phân loại, hộp xoay, tư thế và tinh chỉnh tiết kiệm tham số.

Tổng quan

LibreYOLO là framework đa tác vụ: cùng một họ mô hình có thể dùng các head khác nhau. Bên cạnh quy trình phát hiện và phân đoạn đã được kiểm chứng, một số tác vụ mới đang được bổ sung cho hai họ chủ lực là YOLO9 và RF-DETR. Tất cả đều tích hợp vào cùng factory LibreYOLO(...) và cùng container Results, nên sau khi nắm API cốt lõi, đây chỉ là những phần bổ sung nhỏ.

  • Phân loại cho YOLO9 và RF-DETR. Nhãn cho toàn bộ ảnh với xác suất top-1 / top-5.
  • Hộp xoay (OBB) cho YOLO9 và RF-DETR. Hộp xoay dành cho ảnh hàng không và ảnh tài liệu.
  • Keypoint / tư thế cho YOLO9 và RF-DETR. Keypoint người theo COCO-17.
  • Phát hiện đối tượng nhỏ bằng YOLO9-P2, một biến thể YOLOv9 có thang stride 4 cho các đối tượng 4-16 px trong ảnh hàng không và ảnh từ drone, kèm một checkpoint xem trước nghiên cứu cho VisDrone.
  • LoRA / DoRA để tinh chỉnh RF-DETR. Thích nghi backbone transformer chỉ với một phần nhỏ bộ nhớ.

Đọc phần này trước

Mọi nội dung trên trang này đều ở giai đoạn thử nghiệm và một số vẫn đang được phát triển trên các nhánh tính năng. API, giá trị mặc định và định dạng nhãn có thể thay đổi trước khi được đưa vào phần cốt lõi đã kiểm chứng. Phần Độ ổn định theo dõi chính xác trạng thái của từng tính năng.

Chọn tác vụ

Mỗi họ mặc định dùng tác vụ phát hiện. Bạn chọn một tác vụ khác theo một trong ba cách, được phân giải theo thứ tự ưu tiên sau:

Mức ưu tiênCơ chếVí dụ
1Đối số tường minhtask="obb"
2Metadata của checkpointtác vụ được lưu trong tệp .pt đã huấn luyện
3Hậu tố tên tệp-cls, -obb, -pose
4Mặc định của họdetect

Vì factory công khai LibreYOLO(...) cần một tệp trọng số thực, cách rõ ràng nhất để bắt đầu một trong các tác vụ này từ đầu là khởi tạo trực tiếp class của họ mô hình và truyền task=. Các checkpoint đã huấn luyện được tải lại qua factory hợp nhất và tự động nhận diện tác vụ.

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")

Phân loại ảnh

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

Phân loại gán một nhãn cho toàn bộ ảnh. YOLO9 giữ nguyên backbone và gắn thêm một head phân loại gọn nhẹ; RF-DETR tái sử dụng encoder DINOv2 và thêm một head tuyến tính sau pooling. Cả hai chạy ở độ phân giải 224 x 224.

Suy luận và kết quả Probs

Dự đoán trả về một đối tượng Results có trường probs chứa phân phối softmax trên các lớp đối tượng.

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
TrườngLoạiÝ nghĩa
probs.top1intID lớp đối tượng argmax.
probs.top5list[int]ID của 5 lớp đối tượng hàng đầu, theo thứ tự giảm dần.
probs.top1conffloatXác suất của lớp đối tượng top-1.
probs.top5conftensorXác suất của các lớp đối tượng top-5.
probs.datatensorVector softmax đầy đủ.

Định dạng dataset và huấn luyện

Phân loại dùng bố cục ImageFolder, không dùng YAML. Tên lớp đối tượng là tên các thư mục con đã sắp xếp, cố định theo split train.

dataset/
1dataset/
2 train/
3 cat/ img001.jpg ...
4 dog/ img104.jpg ...
5 val/
6 cat/ ...
7 dog/ ...

Đối số data= nhận một thư mục, URL .zip hoặc tên tự động tải xuống đã biết (imagenette160imagenet10). Head được tái tạo tự động để khớp với số lớp đối tượng của tập dữ liệu (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

Các lần chạy tham chiếu

Kiểm tra nhanh trong quá trình phát triển: YOLO9-t đạt top-1 0.79 / top-5 0.975 trên imagenette160 (10 epoch), còn RF-DETR-n đạt top-1 0.69 / top-5 0.96 (6 epoch). RF-DETR cần truy cập internet trong lần chạy đầu tiên để lấy backbone DINOv2; khi ngoại tuyến, mô hình dùng khởi tạo ngẫu nhiên dự phòng.

Hộp xoay (OBB)

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

Hộp xoay có thêm góc xoay, phù hợp với ảnh hàng không, tài liệu và các cảnh dày đặc. YOLO9 thêm một nhánh góc vào detect head; RF-DETR thêm một embedding góc có thể học vào decoder.

Suy luận và kết quả OBB

Đối tượng Results cung cấp trường obb. Góc dùng đơn vị 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]
TrườngHình dạngÝ nghĩa
obb.xywhrN x 5[cx, cy, w, h, angle], góc tính bằng radian.
obb.xyxyxyxyN x 4 x 2Bốn điểm góc cho mỗi hộp.
obb.confNĐộ tin cậy của mỗi hộp.
obb.clsNID lớp đối tượng của mỗi hộp.

Định dạng dataset và huấn luyện

OBB dùng data YAML theo kiểu phát hiện tiêu chuẩn, nhưng nhãn là các tệp văn bản YOLO-OBB với chính xác chín trường trên mỗi dòng: một ID lớp đối tượng, theo sau là bốn điểm góc đã chuẩn hóa. Góc được suy ra từ các điểm góc, không được lưu.

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

Không thể tải trực tiếp checkpoint phát hiện thông thường vào mô hình OBB. Chuyển từ detect sang OBB chỉ được phép để warm-start huấn luyện: truyền pretrained=True (YOLO9) hoặc cờ transfer tường minh trên RF-DETR. Mosaic và mixup bị tắt cho OBB cho đến khi có augmentation nhận biết điểm góc, đồng thời suy luận chia ô không được hỗ trợ.

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

Kiểm định dùng AP theo IoU xoay, được báo cáo dưới dạng mAP50 và mAP50-95 trong nhóm metric OBB.

Keypoint / Tư thế

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

Ước lượng tư thế dự đoán keypoint cho từng thực thể được phát hiện. Bố cục mặc định là keypoint người COCO-17. Trong phiên bản đầu tiên, tư thế YOLO9 và RF-DETR chỉ hỗ trợ người với một lớp đối tượng; trọng số tư thế YOLO-NAS và EdgeCrafter đã có sẵn trong repo.

Suy luận và kết quả Keypoints

Đối tượng Results cung cấp trường keypoints có hình dạng (N, K, 3), trong đó channel cuối là độ hiển thị hoặc độ tin cậy, theo tọa độ pixel của ảnh gốc.

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
TrườngHình dạngÝ nghĩa
keypoints.xyN x K x 2Tọa độ keypoint theo pixel.
keypoints.xynN x K x 2Tọa độ keypoint đã chuẩn hóa.
keypoints.confN x KĐộ hiển thị / độ tin cậy của từng keypoint.
keypoints.has_visibleN x KMặt nạ Boolean cho các keypoint nhìn thấy.

Định dạng dataset và huấn luyện

Pose dùng một data YAML phải khai báo kpt_shape: [K, 2|3] và, để tăng cường lật ngang, một flip_idx. Nhãn là các dòng văn bản YOLO-pose: một ID lớp đối tượng, một hộp đã chuẩn hóa, sau đó là K bộ ba keypoint (x, y, v) với độ hiển thị v thuộc {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

Đang được phát triển tích cực

Tư thế YOLO9 và RF-DETR nằm trên một nhánh tính năng và chưa được hợp nhất; hãy coi API trên là contract dự kiến thay vì contract đã cố định. Trọng số tư thế YOLO-NAS được liên kết từ thượng nguồn thay vì được sao chép và phải được chuẩn bị thủ công.

Phát hiện đối tượng nhỏ (YOLO9-P2)

YOLO9-P2: t, sVisDrone research preview

YOLO9-P2 là YOLOv9 với thang phát hiện thứ tư ở stride 4. YOLOv9 gốc phát hiện ở các stride 8/16/32, vì vậy các đối tượng nhỏ hơn ~16 px nằm dưới lưới mịn nhất; head P2 bắt được dải 4-16 px phổ biến trong cảnh quay hàng không và từ drone.

Trong thử nghiệm A/B có kiểm soát trên VisDrone (cùng recipe, cùng độ phân giải, cùng khởi tạo; thay đổi duy nhất là head P2), AP của đối tượng nhỏ tăng +49% so với YOLOv9 gốc cùng kích thước. Độ phân giải huấn luyện cao hơn cùng kích thước s lớn hơn đã làm AP đối tượng nhỏ tăng gần gấp đôi trong toàn dự án:

Mô hìnhAPAP50AP_small
YOLO9-t gốc @640 (đối chứng)0.1230.2200.047
YOLO9-P2-t @640 (A/B cùng recipe)0.1380.2540.070
YOLO9-P2-s @768 (bản xem trước đã phát hành)0.2260.3850.141

VisDrone2019-DET val (548 ảnh), pycocotools, một seed; chênh lệch ±1 điểm được xem là nhiễu.

Bản xem trước nghiên cứu VisDrone

Một checkpoint đã huấn luyện được phát hành với tên LibreYOLO9P2s-visdrone. Họ mô hình đã được hợp nhất vào dev nhưng chưa có trong bản phát hành PyPI, vì vậy hãy cài đặt từ mã nguồn cho đến bản phát hành tiếp theo.

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)

Giấy phép phi thương mại

Checkpoint xem trước được huấn luyện trên VisDrone2019-DET (AISKYEYE, Tianjin University) theo giấy phép CC BY-NC-SA 3.0: chỉ sử dụng cho mục đích phi thương mại, khác với mã nguồn MIT và trọng số mặc định COCO của LibreYOLO. Checkpoint này phát hiện 10 lớp đối tượng hàng không VisDrone, không phải COCO. Model card đi kèm recipe huấn luyện chính xác, các chỉ số theo từng epoch và bộ chuyển đổi dataset theo nguyên tắc clean-room để bạn có thể tái tạo kết quả hoặc huấn luyện lại trên dữ liệu của riêng mình.

Khi nào (không) nên dùng

Chọn kiến trúc phù hợp với bối cảnh. Trên dữ liệu giống COCO ("small" nghĩa là 16-32 px), head P2 không giúp cải thiện; YOLOv9 gốc là lựa chọn tốt hơn. Hãy dùng YOLO9-P2 khi các đối tượng nhỏ hơn ~16 px: cảnh quay từ drone và trên không, CCTV ở xa, các ô ảnh vệ tinh. Thang bổ sung làm lượng tính toán và số anchor tăng gần gấp đôi. Đó là cái giá của lưới stride 4.

Huấn luyện mô hình của riêng bạn

YOLO9-P2 khởi tạo transfer từ các checkpoint detect YOLOv9 gốc: backbone, neck dùng chung và các tower head hiện có được tải; các module P2 mới bắt đầu từ đầu. Recipe dưới đây ghi lại những gì chúng tôi đã phải vất vả mới rút ra được trên dữ liệu đối tượng rất nhỏ:

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)

Tinh chỉnh LoRA / DoRA

RF-DETR: n, s, m, l

Các adapter kiểu LoRA cho phép tinh chỉnh backbone transformer của RF-DETR bằng cách huấn luyện một tập nhỏ ma trận hạng thấp trong khi trọng số cơ sở vẫn được giữ cố định. Cách này giảm bộ nhớ cho optimizer và gradient, lý tưởng để thích nghi một checkpoint mạnh với miền dữ liệu mới trên phần cứng vừa phải.

Bật tính năng

Toàn bộ API công khai chỉ là một cờ duy nhất trong train(). Không có núm rank, alpha hoặc target-module nào cần tinh chỉnh; recipe được cố định ở một cấu hình đã kiểm thử kỹ. Bên trong, mã sử dụng DoRA (LoRA phân rã trọng số, rank 16) cho các projection query, key và value của 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 và xuất

  • Các checkpoint huấn luyện giữ lại tensor adapter và config ghi lại rằng LoRA đã được dùng, vì vậy việc tải và tiếp tục huấn luyện sẽ tự động tái tạo đồ thị adapter.
  • Detect head luôn có thể huấn luyện, vì vậy bạn vẫn có thể thích nghi với số lớp đối tượng mới.
  • export() hợp nhất các adapter trở lại trọng số dense. Mô hình đã xuất là mô hình thông thường và không mang dependency peft.
  • LoRA chỉ dành cho RF-DETR; truyền lora=True cho các họ khác sẽ phát sinh lỗi rõ ràng.

Cài thêm

Huấn luyện LoRA cần dependency adapter: pip install "libreyolo[lora]", lệnh này cài stack RF-DETR và peft. Các mô hình đã xuất (đã hợp nhất) không cần dependency này khi suy luận.

Độ ổn định

Trạng thái hiện tại của từng tính năng. Mọi thứ ở đây đều mang tính thử nghiệm; bảng này phản ánh trung thực tình hình.

Tính năngCác họTrạng thái
Phân loạiYOLO9, RF-DETRPR đang mở
Hộp xoay (OBB)YOLO9, RF-DETRThử nghiệm
Keypoint / tư thếYOLO9, RF-DETRSắp được tích hợp
Keypoint / tư thếYOLO-NAS, EdgeCrafterCó sẵn
Phát hiện đối tượng nhỏYOLO9-P2Bản xem trước nghiên cứu
LoRA / DoRARF-DETRĐã được đánh giá

Đang tìm quy trình ổn định?

Đối với ứng dụng production, phần cốt lõi đã được kiểm chứng gồm phát hiện bằng YOLO9 và phát hiện, phân đoạn bằng RF-DETR. Xem tài liệu cốt lõi cho các tác vụ đó và LibreVLM cho phát hiện với từ vựng mở.

Theo dõi tiến độ và mã nguồn trên GitHub