RTMDet

RTMDet là detector một giai đoạn dự đoán từ một prior dựa trên điểm cho mỗi vị trí lưới, không dùng anchor, qua một head có các phép tích chập dùng chung giữa các cấp feature. LibreYOLO hỗ trợ mô hình cho phát hiện và phân đoạn instance RTMDet-Ins.

Tác vụ
detection, instance segmentation
Kích thước
t, s, m, l, x at 640 px
Cài đặt
pip install libreyolo
Bậc hỗ trợ
Được hỗ trợ, từ v. Các mô hình huấn luyện bổ trợ: luôn giữ CI ở trạng thái xanh, tính năng được bổ sung khi có cơ hội.
Thượng nguồn
RTMDet của OpenMMLab, Apache-2.0. Bài báo, mã nguồn
Giấy phép
Mã nguồn Apache-2.0, trọng số Apache-2.0. Sử dụng thương mại

Cài đặt

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

bash
pip install libreyolo

Dự đ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ộ.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Phân đoạn instance
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Hậu tố -seg trong tên tệp chọn mask head RTMDet-Ins,# nên không cần đối số task ở đây.model = LibreYOLO("LibreRTMDets-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

Đố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. Tên tệp có -seg tự phân giải thành tác vụ RTMDet-Ins, và khi đó result.masks chứa các mask instance bên cạnh các box. 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ể

Năm kích thước từ t đến x dùng chung một kiến trúc ở cùng độ phân giải đầu vào. Họ này không có bảng benchmark tại đây: hãy so sánh kích thước theo dung lượng tệp checkpoint trong bảng bên dưới.

Huấn luyện

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train(    data="my-dataset.yaml",    epochs=300, imgsz=640, batch=16, lr0=0.004,)
CLI
libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004

Tác vụ phát hiện được huấn luyện qua train(). Các thành phần QualityFocalLoss, GIoU và DynamicSoftLabelAssigner được chuyển từ mmdetection thượng nguồn; forward pass và bản xuất ONNX tương đương từng bit với nguồn đó, còn hậu xử lý khớp đầu ra của mmdet trong phạm vi 0,001 mAP trên các tập con val2017.

Những phần chưa được kiểm tra theo docstring của chính train(): hội tụ khi tinh chỉnh trên tập dữ liệu nhỏ, mức tương đương bài báo khi huấn luyện từ đầu, hành vi multi-GPU, thông lượng Mosaic và MixUp có bộ nhớ đệm, việc chuyển pipeline hai giai đoạn nghiêm ngặt của thượng nguồn và các ghi đè weight decay theo tham số đặt decay bằng 0 cho tham số norm và bias.

RTMDet-Ins không có luồng huấn luyện. Gọi train() trên checkpoint -seg hoặc với task="segment" sẽ phát sinh NotImplementedError; phân đoạn instance chỉ hỗ trợ suy luận và đánh giá.

train() cũng chấp nhận đối số pretrained, nhưng giá trị không bao giờ được đọc bên trong phương thức: quá trình huấn luyện luôn tiếp tục từ trọng số dùng để khởi tạo mô hình, nên pretrained=False không khởi tạo lại mạng.

Nếu giữ nguyên các giá trị khác, trình huấn luyện chạy 300 epoch với AdamW ở lr0=0.004weight_decay=0.05, warmup 1 epoch theo lịch cosine, đồng thời tắt Mosaic và MixUp trong 20 epoch cuối.

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("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreRTMDets.pt data=my-dataset.yaml
Instance segmentation
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # maskprint(metrics["metrics/mAP50-95(B)"])   # box

Với checkpoint -seg, khóa metrics/mAP50-95 thông thường chứa điểm mask, và cùng lượt chạy cũng báo cáo box dưới (B) cùng mask dưới (M), nên cả hai đều có sẵn từ một lượt.

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: không được hỗ trợDetection to MNN: không được hỗ trợDetection to RKNN: không được hỗ trợDetection to ncnn: không đượ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ợ
Instance segmentationInstance segmentation to ONNX: không được hỗ trợInstance segmentation to TorchScript: không được hỗ trợInstance segmentation to ExecuTorch: không được hỗ trợInstance segmentation to TensorRT: không được hỗ trợInstance segmentation to OpenVINO: không được hỗ trợInstance segmentation to Paddle: không được hỗ trợInstance segmentation to MNN: không được hỗ trợInstance segmentation to RKNN: không được hỗ trợInstance segmentation to ncnn: không được hỗ trợInstance segmentation to TFLite: không được hỗ trợInstance segmentation to CoreML: không được hỗ trợInstance segmentation to Core AI: không được hỗ trợ

Tác vụ phát hiện xuất được sang hầu hết định dạng; phân đoạn instance hiện không xuất được sang định dạng nào; ma trận trên phản ánh sự phân chia đó. Artifact phát hiện đã 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ý.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 half=True
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("LibreRTMDets.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
LibreRTMDett.pt640apache-2.0
LibreRTMDets.pt640apache-2.0
LibreRTMDetm.pt640apache-2.0
LibreRTMDetl.pt640apache-2.0
LibreRTMDetx.pt640apache-2.0
Instance segmentation
LibreRTMDett-seg.pt640apache-2.0
LibreRTMDets-seg.pt640apache-2.0
LibreRTMDetm-seg.pt640apache-2.0
LibreRTMDetl-seg.pt640apache-2.0
LibreRTMDetx-seg.pt640apache-2.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
RTMDet, OpenMMLab
Giấy phép thượng nguồn
Apache-2.0
Nguồn thượng nguồn
github.com/open-mmlab/mmdetection
Mã nguồn LibreYOLO
MIT
Trọng số
Apache-2.0, được phát hành lại tại huggingface.co/LibreYOLO
Diễn giải
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. The published RTMDet and RTMDet-Ins checkpoints are converted from mmdetection's own COCO weights, trained by OpenMMLab under the same license.

Trích dẫn

@misc{lyu2022rtmdet,
      title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
      author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
      year={2022},
      eprint={2212.07784},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Được sao chép từ khối trích dẫn của tác giả tại github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet#citation.

Đã 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.