D-FINE

Một detection transformer biểu diễn lại hồi quy box thành phân phối xác suất trên từng cạnh của box, được tinh chỉnh qua các lớp decoder. LibreYOLO hỗ trợ mô hình này cho phát hiện và phân đoạn thực thể.

Tác vụ
detection, instance segmentation
Kích thước
n, s, m, l, x 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
D-FINE của University of Science and Technology of China, 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

D-FINE không cần extra tùy chọn. Mọi thành phần mà mô hình import đều có trong bản cài đặt cơ sở.

bash
pip install libreyolo

Tinh chỉnh bằng adapter với lora=True là ngoại lệ và cần extra lora.

bash
pip install "libreyolo[lora]"

Dự đoán

Trọng số được tải về từ Hugging Face trong lần sử dụng đầu tiên và được lưu vào bộ nhớ đệm cục bộ.

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

Đối tượng Results trả về cũng là đối tượng mà mọi họ mô hình đều trả về, vì vậy việc chuyển sang detector khác chỉ cần thay đổi một dòng. Tên tệp có -seg tự phân giải thành tác vụ phân đoạn, và khi đó result.masks chứa các mặt nạ (mask) thực thể cùng với các box. confmax_det lọc lựa chọn query; iou được chấp nhận để giữ tính tương đồng của API nhưng không có tác dụng vì decoder là bộ dự đoán tập hợp không có bước NMS. Xem dự đoán để biết về nguồn, xử lý luồng và kết quả.

Biến thể

Có năm kích thước. Tất cả chạy ở cùng độ phân giải đầu vào, vì vậy bảng phân tách chúng theo số lượng tham số và độ chính xác.

CheckpointĐầu vào (px)mAP 50-95Tham số (M)
LibreDFINEl64060.031.24
LibreDFINEm64057.819.59
LibreDFINEn64045.83.78
LibreDFINEs64053.410.32
LibreDFINEx64061.462.62

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.

Tác vụ phân đoạn dùng lại backbone, encoder và decoder phát hiện rồi bổ sung mask head, vì vậy checkpoint -seg nhận cùng đối số như bản phát hiện tương ứng. Họ RT-DETRv4 của LibreYOLO được viết dưới dạng lớp con của wrapper D-FINE: nó kế thừa dòng decoder này rồi cố định danh sách tác vụ trở lại tác vụ phát hiện vì không có mask head.

Huấn luyện

Quá trình huấn luyện bắt đầu từ checkpoint đã phát hành cho cả hai tác vụ.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")model.train(data="my-dataset.yaml", epochs=50, imgsz=640, batch=8, lr0=2e-4)
CLI
libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \  epochs=50 imgsz=640 batch=8 lr0=2e-4
Phân đoạn thực thể
# Tiếp tục từ trọng số phân đoạn đã phát hành, bao gồm cả mask head.libreyolo train model=LibreDFINEn-seg.pt data=my-dataset.yaml \  task=segment epochs=50 imgsz=640
Phân đoạn từ trọng số phát hiện
# Trọng số phát hiện không có mask head, vì vậy đây là một transfer rõ ràng:# head bắt đầu khi chưa được huấn luyện và chỉ hữu ích sau khi huấn luyện. Việc# chỉ định task=segment ở đây chính là thao tác cho phép transfer.libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \  task=segment epochs=50 imgsz=640
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")model.train(data="my-dataset.yaml", epochs=50, lora=True)
Multi-GPU
libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \  epochs=50 device=0,1 batch=16

Khi giữ nguyên thiết lập, trainer chạy 132 epoch ở lr0=2e-4 với amp=False, batch 16 và early stopping sau 50 epoch không có cải thiện. Trọng số phát hiện là điểm bắt đầu hợp lệ cho huấn luyện phân đoạn, nhưng chỉ dưới dạng transfer rõ ràng vì mask head bắt đầu khi chưa được huấn luyện và nếu không sẽ trả về các mặt nạ vô nghĩa. Truyền task=segment cho CLI chính là thao tác cho phép điều này. Tuyến Python hẹp hơn: phải khởi tạo trực tiếp LibreDFINE với allow_detect_to_segment_transfer=True vì factory LibreYOLO() không nhận đối số này, và việc khởi tạo trực tiếp không tải xuống nên tệp trọng số phải có sẵn trên đĩa.

lora=True áp dụng cho tác vụ phát hiện. Huấn luyện phân đoạn từ chối tùy chọn này và hướng đến freeze='backbone' thay thế vì mask head chưa được kiểm thử với adapter. Trên Apple silicon, trainer chuyển toàn bộ lượt chạy sang CPU: backward pass của phép nhân ma trận theo bin của Integral gặp lỗi biên dịch Metal. Inference trên MPS không bị ảnh hưởng.

Xem huấn luyện để biết về dataset, tăng cường dữ liệu (data augmentation), multi-GPU và logger.

Xác thực

val() trả về dictionary được lập key theo tên metric và in kết quả cho từng lớp đối tượng khi giữ bật verbose.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreDFINEn.pt data=my-dataset.yaml
Phân đoạn thực thể
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # mặt nạprint(metrics["metrics/mAP50-95(B)"])   # box

Với checkpoint -seg, key metrics/mAP50-95 thuần túy chứa điểm mặt nạ, và cùng lượt chạy đó cũng báo cáo box trong (B) và mặt nạ trong (M), vì vậy 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: không đượ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: 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: được hỗ trợInstance segmentation to TorchScript: được hỗ trợInstance segmentation to ExecuTorch: không được hỗ trợInstance segmentation to TensorRT: được hỗ trợInstance segmentation to OpenVINO: đượ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ợ

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 đối tượng Results. Các tuyến OpenVINO, Paddle, MNN và Core AI xuất trên canvas cố định thay vì shape động. Trang Xuất liệt kê các đối số được mọi định dạng chấp nhận và các extra mà một số định dạng bổ sung.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreDFINEn.pt format=onnx imgsz=640libreyolo export model=LibreDFINEn.pt format=tensorrt imgsz=640 half=True
Dùng tệp đã xuất
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory định tuyến dựa trên hậu tố tệp, vì vậy artifact đã xuất tải# như mọi checkpoint và trả về cùng đối tượng Results.model = LibreYOLO("LibreDFINEn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Mọi tệp trọng số đã phát hành cho họ mô hình này.

TệpĐầu vào (px)Giấy phép trọng số
Detection
LibreDFINEn.pt640apache-2.0
LibreDFINEs.pt640apache-2.0
LibreDFINEm.pt640apache-2.0
LibreDFINEl.pt640apache-2.0
LibreDFINEx.pt640apache-2.0
Instance segmentation
LibreDFINEn-seg.pt640apache-2.0
LibreDFINEs-seg.pt640apache-2.0
LibreDFINEm-seg.pt640apache-2.0
LibreDFINEl-seg.pt640apache-2.0
LibreDFINEx-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
D-FINE, University of Science and Technology of China
Giấy phép thượng nguồn
Apache-2.0
Nguồn thượng nguồn
github.com/Peterande/D-FINE
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 segmentation weights carry a second Apache-2.0 upstream, ArgoHA/D-FINE-seg, under the same terms.

Trọng số phân đoạn có upstream thứ hai: mask decoder, phép ghép mask và mask loss đến từ ArgoHA/D-FINE-seg, cũng dùng Apache-2.0, và người bảo trì của dự án đã chấp thuận việc tái sử dụng kèm ghi công.

Trích dẫn

@misc{peng2024dfine,
      title={D-FINE: Redefine Regression Task in DETRs as Fine-grained Distribution Refinement},
      author={Yansong Peng and Hebei Li and Peixi Wu and Yueyi Zhang and Xiaoyan Sun and Feng Wu},
      year={2024},
      eprint={2410.13842},
      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/Peterande/D-FINE#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.