YOLOv9
Một detector tích chập một giai đoạn: một lượt chấm điểm lưới box dày đặc và NMS loại các bản trùng lặp. LibreYOLO cung cấp ba biến thể, trong đó một biến thể không có bước NMS.
- Tác vụ
- detection
- Kích thước
- yolo9: t, s, m, c at 640 px; yolo9_p2: t, s at 640 px
- Cài đặt
pip install libreyolo- Bậc hỗ trợ
- Chủ lực, từ v1.0.0. Các tính năng được thiết kế và kiểm chứng đầy đủ trên GPU ở bậc này trước tiên.
- Giấy phép
- Mã nguồn MIT, trọng số MIT. Sử dụng thương mại
Cài đặt
YOLOv9 không cần extra ngoài gói cơ sở.
pip install libreyoloDự đoán
Trọng số được tải từ Hugging Face ở lần dùng đầu tiên và lưu vào bộ nhớ đệm cục bộ.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLO9s.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Cùng lời gọi, checkpoint khác. Head đầu cuối tự trả về các dự đoán có# điểm cao nhất, nên NMS không chạy và iou bị bỏ qua.model = LibreYOLO("LibreYOLO9E2Es.pt")result = model(SAMPLE_IMAGE, conf=0.25, max_det=300) print(len(result.boxes))Đối tượng Results trả về là loại mà mọi họ đều trả về, nên việc đổi sang
detector khác chỉ cần sửa một dòng. Trên mô hình cơ sở và stride-4, conf đặt
ngưỡng độ tin cậy và iou đặt ngưỡng NMS. Mô hình đầu cuối không chạy NMS và bỏ
qua iou, vì vậy conf cùng max_det quyết định hình dạng đầu ra. Xem
dự đoán để biết về nguồn, streaming và xử lý kết quả.
Các biến thể
Ba biến thể dùng chung một backbone. Cả ba chỉ thực hiện phát hiện và nhận cùng các đối số.
Mô hình cơ sở dự đoán trên ba thang feature và loại box trùng lặp bằng NMS.
Mô hình đầu cuối giữ head đó và thêm một nhánh ghép một-một bên cạnh. Suy luận chỉ đọc nhánh một-một và lấy các dự đoán có điểm cao nhất, nên NMS không chạy. Chọn mô hình này khi runtime triển khai không có toán tử NMS.
Mô hình stride-4 đưa ra một cấp cao hơn trên backbone, mở rộng neck xuống cấp đó và dự đoán trên bốn thang thay vì ba. Thang bổ sung dành cho đối tượng chỉ chiếm ít pixel; checkpoint duy nhất đã công bố cho biến thể này được huấn luyện trên ảnh chụp từ trên không. Checkpoint phát hiện cơ sở có thể chuyển sang mô hình: backbone và neck được tải không đổi, ba tower head đã tiền huấn luyện dịch lên một vị trí, còn tower stride-4 bắt đầu từ khởi tạo ngẫu nhiên.
| Checkpoint | Đầu vào (px) | mAP 50-95 | Tham số (M) |
|---|---|---|---|
| LibreYOLO9c | 640 | 56.4 | 25.5 |
| LibreYOLO9m | 640 | 55.3 | 20.12 |
| LibreYOLO9s | 640 | 55.9 | 7.2 |
| LibreYOLO9t | 640 | 54.0 | 2.02 |
COCO val2017, 500 images. Được đo bằng bộ benchmark LibreYOLO và công bố trên Vision Analysis, nơi so sánh độ trễ giữa các phần cứng và runtime, đồng thời lưu trữ đầy đủ bản ghi của từng lần chạy.
Huấn luyện
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \ epochs=100 imgsz=640 batch=16from libreyolo import LibreYOLO9P2 # Biến thể stride-4 không có checkpoint COCO riêng, nên hãy chỉ định một# checkpoint phát hiện cơ sở: backbone và neck được tải không đổi, còn# tower của head stride-4 bắt đầu từ khởi tạo ngẫu nhiên.model = LibreYOLO9P2(None, size="s")model.train(data="my-dataset.yaml", epochs=100, pretrained="LibreYOLO9s.pt")pretrained quyết định điểm bắt đầu của lượt chạy. Truyền True để tải
checkpoint đã công bố cho cùng mô hình và kích thước, hoặc truyền tên hay đường
dẫn cho trường hợp khác. Tensor có shape không khớp sẽ bị bỏ qua thay vì bị từ
chối, và lượt chạy ghi lại số lượng đã tải, nên checkpoint được huấn luyện với
số lớp khác vẫn là điểm bắt đầu có thể dùng.
Mô hình stride-4 không có checkpoint COCO riêng đã công bố, nên True sẽ phân
giải thành tệp không tồn tại và tải xuống thất bại. Hãy chỉ định checkpoint phát
hiện cơ sở thay thế.
Xem huấn luyện để biết về tập dữ liệu, tăng cường dữ liệu, multi-GPU và logger.
Đánh giá
val() trả về từ điển các khóa metrics/ bao gồm precision, recall, mAP 50 và
mAP 50-95, được đo trên bất kỳ tập dữ liệu nào theo định dạng bạn đã huấn luyện.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO9s.pt data=my-dataset.yaml# YAML COCO đi kèm chứa script tải xuống nhúng sẵn, nên cần quyền rõ ràng# trừ khi tập dữ liệu đã có cục bộ.libreyolo val model=LibreYOLO9c.pt data=coco.yaml imgsz=640 \ allow_download_scripts=TrueXuất
| Tác vụ | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: được hỗ trợ | Detection to TorchScript: được hỗ trợ | Detection to ExecuTorch: được hỗ trợ | Detection to TensorRT: được hỗ trợ | Detection to OpenVINO: được hỗ trợ | Detection to Paddle: được hỗ trợ | Detection to MNN: được hỗ trợ | Detection to RKNN: không được hỗ trợ | Detection to ncnn: được hỗ trợ | Detection to TFLite: không được hỗ trợ | Detection to CoreML: không được hỗ trợ | Detection to Core AI: được hỗ trợ |
Dấu kiểm áp dụng cho cả ba biến thể: khi chúng khác nhau, ma trận thể hiện mức hỗ trợ yếu nhất trong ba biến thể.
Artifact đã xuất được tải lại qua LibreYOLO() dựa trên hậu tố tệp, vì vậy tệp
.onnx hoặc .engine hoạt động như checkpoint và trả về cùng Results. Cũng
hỗ trợ chạy đồ thị trong runtime độc lập không cài LibreYOLO, nhưng khi đó bạn
phải tự viết bước tiền xử lý và hậu xử lý.
Với mô hình phát hiện cơ sở, nửa hậu xử lý có thể được đưa vào đồ thị. nms=True
trên bản xuất ONNX đặt bước loại bỏ bên trong mô hình, và đầu ra đầu tiên trở thành
tensor cố định (1, max_det, 6) có các hàng là x1, y1, x2, y2, score, class,
được thêm số 0 sau số lượng phát hiện. Đồ thị đó dùng batch 1 và không có trục
động. Mô hình đầu cuối và stride-4 không chấp nhận cờ này.
Mỗi định dạng cài một extra khác nhau và nhận một số đối số riêng. Cả hai đều được trình bày trên trang của định dạng đó.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640libreyolo export model=LibreYOLO9s.pt format=onnx nms=True \ conf=0.25 iou=0.45 max_det=300from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory định tuyến theo hậu tố tệp, nên artifact đã xuất được tải# như mọi checkpoint và trả về cùng đối tượng Results.model = LibreYOLO("LibreYOLO9s.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoint
Mọi tệp trọng số đã công bố cho họ này.
| Tệp | Đầu vào (px) | Giấy phép trọng số |
|---|---|---|
| Detection | ||
| LibreYOLO9t.pt | 640 | mit |
| LibreYOLO9s.pt | 640 | mit |
| LibreYOLO9m.pt | 640 | mit |
| LibreYOLO9c.pt | 640 | mit |
| LibreYOLO9E2Et.pt | 640 | mit |
| LibreYOLO9E2Es.pt | 640 | mit |
| LibreYOLO9E2Em.pt | 640 | mit |
| LibreYOLO9E2Ec.pt | 640 | mit |
| LibreYOLO9P2s-visdrone.pt | cc-by-nc-sa-3.0 | |
Mọi tệp ở trên hiện đều có trong tổ chức LibreYOLO và được tải xuống trong lần sử dụng đầu tiên.
Giấy phép
Hãy kiểm tra giấy phép trong repo Hugging Face của trọng số cụ thể mà bạn tải xuống. Mỗi checkpoint trong tổ chức LibreYOLO đều có giấy phép riêng và giấy phép có thể khác nhau trong cùng một họ. Repo đó là nguồn có thẩm quyền; phần tóm tắt dưới đây mô tả các điều khoản áp dụng khi trang này được kiểm chứng lần gần nhất.
Đây là phần mô tả các giấy phép liên quan, không phải tư vấn pháp lý. Nếu câu trả lời có ý nghĩa về mặt thương mại, hãy tự đọc các giấy phép và tham khảo cố vấn của riêng bạn.
- Công trình gốc
- YOLOv9, MultimediaTechLab
- Giấy phép thượng nguồn
- MIT
- Nguồn thượng nguồn
- github.com/MultimediaTechLab/YOLO
- Mã nguồn LibreYOLO
- MIT
- Trọng số
- MIT, được phát hành lại tại huggingface.co/LibreYOLO
- Diễn giải
- MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. Two things are worth knowing beyond that. The port follows the authors' MIT re-release of YOLOv9, not the GPL-3.0 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from. And one checkpoint in this family is not MIT: the stride-4 model trained on VisDrone2019-DET inherits that dataset's CC BY-NC-SA 3.0 terms, which rule out commercial use and require share-alike on anything derived from it.
Một checkpoint ở đây không theo MIT. Mô hình stride-4 được huấn luyện trên VisDrone2019-DET kế thừa các điều khoản CC BY-NC-SA 3.0 của tập dữ liệu: chỉ dùng phi thương mại, mọi sản phẩm phái sinh phải chia sẻ cùng giấy phép, và nằm ngoài giấy phép dễ dãi áp dụng cho phần còn lại của họ này. Mô hình dự đoán các lớp ảnh trên không VisDrone thay vì các lớp COCO. Thư viện in toàn bộ thông tin này trước khi tải tệp.
Trích dẫn
@inproceedings{wang2024yolov9,
title={{YOLOv9}: Learning What You Want to Learn Using Programmable Gradient Information},
author={Wang, Chien-Yao and Yeh, I-Hau and Liao, Hong-Yuan Mark},
year={2024},
booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
}Được sao chép từ khối trích dẫn của tác giả tại github.com/MultimediaTechLab/YOLO#citations.