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.
- 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ở.
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("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train( data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.004,)libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004Tá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.004 và weight_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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreRTMDets.pt data=my-dataset.yamlfrom 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)"]) # boxVớ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ụ | 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: 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 segmentation | Instance 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ý.
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 half=Truefrom 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.pt | 640 | apache-2.0 |
| LibreRTMDets.pt | 640 | apache-2.0 |
| LibreRTMDetm.pt | 640 | apache-2.0 |
| LibreRTMDetl.pt | 640 | apache-2.0 |
| LibreRTMDetx.pt | 640 | apache-2.0 |
| Instance segmentation | ||
| LibreRTMDett-seg.pt | 640 | apache-2.0 |
| LibreRTMDets-seg.pt | 640 | apache-2.0 |
| LibreRTMDetm-seg.pt | 640 | apache-2.0 |
| LibreRTMDetl-seg.pt | 640 | apache-2.0 |
| LibreRTMDetx-seg.pt | 640 | apache-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.