YOLO-NAS

Một detector tích chập có backbone và neck được tạo ra từ quá trình tìm kiếm kiến trúc của Deci.AI, xây dựng bằng các block RepVGG nhận biết lượng tử hóa. Trọng số thuộc Deci.AI, chỉ được cấp phép cho mục đích phi thương mại và LibreYOLO không công bố trọng số nào.

Tác vụ
detection, pose
Kích thước
s, m, l at 640 px
Cài đặt
pip install libreyolo
Bậc hỗ trợ
Cốt lõi, từ v1.1.0. Các bộ phát hiện cốt lõi có thể huấn luyện: tính năng theo sau các mô hình chủ lực trong cùng đợt phát hành.
Thượng nguồn
YOLO-NAS của Deci.AI, Deci.AI proprietary, non-commercial. Bài báo, mã nguồn
Giấy phép
Mã nguồn Apache-2.0, trọng số Deci.AI proprietary, non-commercial. Sử dụng thương mại

Cài đặt

YOLO-NAS không cần extra ngoài gói cơ sở.

bash
pip install libreyolo

Dự đoán

Tên checkpoint chưa có trên đĩa được lấy từ CDN công khai của Deci, không phải từ tổ chức LibreYOLO vì nơi đó không lưu trữ trọng số nào của họ này. Trước khi truyền tệp, thư viện in các điều khoản giấy phép của Deci một lần cho mỗi tiến trình; trước khi mở tệp đã tải, SHA-256 của tệp được kiểm tra với giá trị đã ghim. Những gì các điều khoản cho phép được nêu trong giấy phép.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Tên chưa có trên đĩa được lấy từ CDN của Deci. Trước tiên, bản tải# in các điều khoản giấy phép của Deci; nhận tệp đồng nghĩa chấp nhận chúng.model = LibreYOLO("LibreYOLONASs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLONASs.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Pose
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Hậu tố -pose chọn head tư thế và tập trọng số riêng.model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)

Đố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. conf đặt ngưỡng độ tin cậy và iou đặt ngưỡng NMS. Xem dự đoán để biết về nguồn, streaming và xử lý kết quả.

Các biến thể

Phát hiện và tư thế dùng cùng kiến trúc với các head khác nhau, đồng thời nhận cùng các đối số. Các kích thước trong bảng bên dưới dành cho phát hiện; tư thế được công bố ở các kích thước đó và thêm một kích thước nhỏ hơn. Head tư thế dự đoán tập keypoint COCO.

CheckpointĐầu vào (px)mAP 50-95Tham số (M)
LibreYOLONASl64056.366.98
LibreYOLONASm64055.451.18
LibreYOLONASs64051.819.05

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)
CLI
libreyolo train model=LibreYOLONASs.pt data=my-dataset.yaml \  epochs=100 imgsz=640 batch=16
Huấn luyện từ đầu
from libreyolo import LibreYOLONAS # Không dùng checkpoint Deci nào: mô hình bắt đầu từ trọng số ngẫu nhiên,# nên kết quả của lượt chạy chỉ bắt nguồn từ dữ liệu của bạn.model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)

Khi bạn bỏ qua epochs, lr0amp, chúng được phân giải theo từng tác vụ, vì vậy lượt chạy tư thế bắt đầu với giá trị mặc định khác lượt chạy phát hiện. Optimizer mặc định là AdamW. Số lớp lấy từ YAML tập dữ liệu và head được xây dựng lại cho số lớp đó trước epoch đầu tiên; trên head tư thế, số keypoint được xử lý tương tự, nên checkpoint tư thế COCO có thể tinh chỉnh sang skeleton có kích thước khác.

Tinh chỉnh bắt đầu từ trọng số của Deci, là đối tượng được giấy phép của Deci bao quát. Huấn luyện từ mô hình khởi tạo ngẫu nhiên hoàn toàn không liên quan đến checkpoint Deci, và đó là snippet thứ ba ở trên.

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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLONASs.pt data=my-dataset.yaml
Trên COCO
# 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=LibreYOLONASl.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

Xuất

Tác vụONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection 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: được hỗ trợDetection to ncnn: được hỗ trợDetection to TFLite: được hỗ trợDetection to CoreML: không được hỗ trợDetection to Core AI: được hỗ trợ
PosePose to ONNX: được hỗ trợPose to TorchScript: được hỗ trợPose to ExecuTorch: được hỗ trợPose to TensorRT: được hỗ trợPose to OpenVINO: được hỗ trợPose to Paddle: được hỗ trợPose to MNN: không được hỗ trợPose to RKNN: không được hỗ trợPose to ncnn: được hỗ trợPose to TFLite: không được hỗ trợPose to CoreML: không được hỗ trợPose to Core AI: không được hỗ trợ

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ý. 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 đó.

Bản xuất là một bản sao khác của cùng trọng số trong container khác. Việc xuất checkpoint Deci không thay đổi nguồn gốc trọng số hay giấy phép áp dụng cho chúng.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.export(format="onnx", imgsz=640)
CLI
libreyolo export model=LibreYOLONASs.pt format=onnx imgsz=640
Dùng tệp đã xuất
from 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("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Không có tệp nào để liệt kê. Giấy phép của Deci cấm phân phối lại, nên tổ chức LibreYOLO không công bố trọng số YOLO-NAS và bản tải được phân giải ở nơi khác: tên có dạng LibreYOLONAS<size>.pt, hoặc LibreYOLONAS<size>-pose.pt cho tư thế, ánh xạ đến đối tượng tương ứng trên CDN công khai của Deci.

Chỉ các checkpoint có SHA-256 được thư viện ghim mới có thể lấy theo cách đó. Mọi tệp khác đều bị từ chối an toàn thay vì mở pickle bên thứ ba chưa xác minh, và phải được tải thủ công rồi truyền dưới dạng đường dẫn. Tệp đã có trên đĩa được tải từ đường dẫn, không tải xuống và không qua cổng checksum. Điều này bao gồm tệp .pth của Deci theo tên gốc mà trình tải nhận diệ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
YOLO-NAS, Deci.AI
Giấy phép thượng nguồn
Deci.AI proprietary, non-commercial
Nguồn thượng nguồn
github.com/Deci-AI/super-gradients
Mã nguồn LibreYOLO
MIT
Trọng số
Deci.AI proprietary, non-commercial, do tác giả phân phối. LibreYOLO không lưu trữ hoặc sao chép chúng.
Diễn giải
Two licenses apply here and they are not the same. The SuperGradients source this port follows is Apache-2.0 and LibreYOLO's own implementation is MIT, so nothing restricts the architecture or the training code. Deci's published checkpoints are a different matter: the YOLO-NAS license grants a revocable, non-transferable right to use them and nothing more. It forbids redistribution and sublicensing, forbids offering them as a managed or remote service, restricts modification and reverse engineering, and rules out commercial use, including any model running in a production environment, unless you hold a separate agreement with Deci. LibreYOLO therefore does not mirror them, and prints those terms once before the download starts. Weights trained from a randomly initialized model on your own data derive from no Deci checkpoint.

LibreYOLO không lưu trữ hay tạo bản sao các trọng số này: tổ chức Hugging Face LibreYOLO không có gì cho họ này. Mọi bản tự động tải đều đi đến CDN công khai của Deci, in các điều khoản của Deci một lần cho mỗi tiến trình trước khi bắt đầu và được kiểm tra với SHA-256 đã ghim trước khi mở tệp.

Huấn luyện từ mô hình khởi tạo ngẫu nhiên là phương án thay thế. Kiến trúc theo Apache-2.0 ở thượng nguồn và MIT tại đây, nên mô hình được huấn luyện theo cách đó trên dữ liệu của bạn không bắt nguồn từ checkpoint Deci nào.

Trích dẫn

YOLO-NAS được phát hành mà không có bài báo. Mục bên dưới là trích dẫn mà tác giả yêu cầu, bao quát SuperGradients, thư viện phân phối mô hình.

@misc{supergradients,
  doi = {10.5281/ZENODO.7789328},
  url = {https://zenodo.org/record/7789328},
  author = {Aharon,  Shay and {Louis-Dupont} and {Ofri Masad} and Yurkova,  Kate and {Lotem Fridman} and {Lkdci} and Khvedchenya,  Eugene and Rubin,  Ran and Bagrov,  Natan and Tymchenko,  Borys and Keren,  Tomer and Zhilko,  Alexander and {Eran-Deci}},
  title = {Super-Gradients},
  publisher = {GitHub},
  journal = {GitHub repository},
  year = {2021},
}

Được sao chép từ khối trích dẫn của tác giả tại github.com/Deci-AI/super-gradients#citing.

Đã kiểm chứng với LibreYOLO v1.5.0. Các bảng hỗ trợ, checkpoint và số liệu benchmark trên trang này được tạo từ thư viện đã phát hành và trọng số đã công bố, không phải viết thủ công.