DINOv2

DINOv2 là vision transformer tự giám sát được Meta AI huấn luyện để tạo đặc trưng ảnh đa dụng mà không cần nhãn. LibreYOLO bọc backbone DINOv2-with-Registers cho ba tác vụ: phân đoạn ngữ nghĩa, phân loại và tạo embedding toàn ảnh.

Tác vụ
semantic, classify, embed
Kích thước
n, s, m, l at 518 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
DINOv2 của Meta AI (FAIR), Apache-2.0. Bài báo, mã nguồn
Giấy phép
Mã nguồn MIT, trọng số Apache-2.0. Sử dụng thương mại

Cài đặt

LibreDINOv2 chỉ đăng ký khi đã cài transformers, cùng dependency tùy chọn mà RF-DETR cần cho backbone DINOv2, vì vậy mô hình cần cùng extra.

bash
pip install "libreyolo[rfdetr]"

Dự đoán

LibreYOLO không phát hành checkpoint LibreDINOv2. Thay vì tải tệp, hãy khởi tạo trực tiếp wrapper: model_path=None (mặc định) tải backbone facebook/dinov2-with-registers-small Apache-2.0 của Meta từ Hugging Face trong lần sử dụng đầu tiên. task= chọn nội dung chạy bên trên backbone.

Phân đoạn ngữ nghĩa
from libreyolo import SAMPLE_IMAGEfrom libreyolo.models.dinov2.model import LibreDINOv2 # Không có checkpoint do LibreYOLO host cho họ mô hình này: đoạn này# tải backbone DINOv2-with-Registers-small Apache-2.0 từ tổ chức# Hugging Face của Meta. Dense head bắt đầu với khởi tạo ngẫu nhiên# cho đến khi bạn huấn luyện nó (xem phần Huấn luyện bên dưới).model = LibreDINOv2(size="s", task="semantic", nb_classes=19)result = model(SAMPLE_IMAGE) mask = result.semantic_maskprint(mask.data.shape, mask.classes)
Phân loại
from libreyolo import SAMPLE_IMAGEfrom libreyolo.models.dinov2.model import LibreDINOv2 # nb_classes= là số lớp đối tượng của dataset; linear head bắt đầu# với khởi tạo ngẫu nhiên cho đến khi bạn huấn luyện nó.model = LibreDINOv2(size="s", task="classify", nb_classes=10)result = model(SAMPLE_IMAGE) print(result.probs.top1, result.probs.top1conf)
Embedding
from libreyolo import SAMPLE_IMAGEfrom libreyolo.models.dinov2.model import LibreDINOv2 # Bỏ qua mọi task head: chỉ backbone là đủ, vì vậy cách này# không cần tinh chỉnh để trở nên hữu ích.model = LibreDINOv2(size="s", task="embed")result = model(SAMPLE_IMAGE) print(result.embeddings.data.shape)   # (1, D), được chuẩn hóa L2
Embedding một batch
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="embed") # Wrapper tiện ích: chạy predict() và xếp mọi hàng vào một# tensor (N, D).features = model.embed(["a.jpg", "b.jpg", "c.jpg"])print(features.shape)

task="semantic"task="classify" thêm dense head hoặc linear head trên backbone; head đó được khởi tạo ngẫu nhiên và chỉ hữu ích sau khi bạn huấn luyện (xem Huấn luyện). task="embed" bỏ qua mọi head và trả về token CLS được chuẩn hóa cuối cùng của backbone dưới dạng một hàng toàn ảnh trong result.embeddings, vì vậy hoàn toàn không cần huấn luyện. result.boxes luôn là None: không tác vụ nào trong ba tác vụ tạo detection theo từng thực thể. Xem dự đoán để biết về nguồn, xử lý luồng và kết quả.

Biến thể

size chọn độ rộng projector kiểu RF-DETR được xếp trên backbone, không chọn chính backbone: mọi kích thước dùng chung encoder DINOv2-S (small). Phân đoạn ngữ nghĩa chạy ở lưới patch vuông nguyên bản của DINOv2; phân loại và embedding chạy ở độ phân giải phân loại nhỏ hơn dùng để huấn luyện linear probe.

Huấn luyện

task="semantic"task="classify" đều có thể huấn luyện; task="embed" không có head phụ thuộc lớp đối tượng để fit và phát sinh NotImplementedError nếu bạn gọi train() trên tác vụ này.

Phân đoạn ngữ nghĩa
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="semantic", nb_classes=19)model.train(data="my-dataset.yaml", epochs=100, batch_size=4, lr=1e-4)
Phân loại
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="classify", nb_classes=10)model.train(data="my-dataset.yaml", epochs=100, batch_size=4, lr=1e-4)
Multi-GPU
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="semantic", nb_classes=19)model.train(    data="my-dataset.yaml", epochs=100, batch_size=4, lr=1e-4,    device="0,1",)

Các đối số keyword chính ở đây là batch_sizelr, không phải batchlr0 như hầu hết các họ mô hình khác; batchlr0 vẫn được chấp nhận và ánh xạ sang chúng, nhưng truyền cả hai sẽ phát sinh lỗi xung đột. output_dir= (mặc định "runs/train") thay thế project=/name= làm cách chính để đặt vị trí lượt chạy, dù truyền trực tiếp project=/name= vẫn hoạt độ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 gồm các key metrics/: mIoU và độ chính xác pixel cho task="semantic", độ chính xác top-1 và top-5 cho task="classify". task="embed" không có ground truth để chấm điểm và phát sinh NotImplementedError nếu bạn gọi val() trên tác vụ này.

Phân đoạn ngữ nghĩa
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="semantic", nb_classes=19)metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])
Phân loại
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="classify", nb_classes=10)metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])

Xuất

Tác vụONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: được hỗ trợsemantic to TorchScript: được hỗ trợsemantic to ExecuTorch: được hỗ trợsemantic to TensorRT: được hỗ trợsemantic to OpenVINO: được hỗ trợsemantic to Paddle: không được hỗ trợsemantic to MNN: không được hỗ trợsemantic to RKNN: không được hỗ trợsemantic to ncnn: không được hỗ trợsemantic to TFLite: không được hỗ trợsemantic to CoreML: không được hỗ trợsemantic to Core AI: không được hỗ trợ
classifyclassify to ONNX: được hỗ trợclassify to TorchScript: được hỗ trợclassify to ExecuTorch: được hỗ trợclassify to TensorRT: được hỗ trợclassify to OpenVINO: được hỗ trợclassify to Paddle: không được hỗ trợclassify to MNN: không được hỗ trợclassify to RKNN: không được hỗ trợclassify to ncnn: không được hỗ trợclassify to TFLite: không được hỗ trợclassify to CoreML: không được hỗ trợclassify to Core AI: được hỗ trợ
embedembed to ONNX: được hỗ trợembed to TorchScript: được hỗ trợembed to ExecuTorch: được hỗ trợembed to TensorRT: được hỗ trợembed to OpenVINO: được hỗ trợembed to Paddle: không được hỗ trợembed to MNN: không được hỗ trợembed to RKNN: không được hỗ trợembed to ncnn: không được hỗ trợembed to TFLite: được hỗ trợembed to CoreML: không được hỗ trợembed to Core AI: không được hỗ trợ

Mỗi tác vụ hỗ trợ một tập con định dạng khác nhau như hiển thị ở trên. 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. Trang Xuất liệt kê các đối số mà mọi định dạng chấp nhận.

Phân đoạn ngữ nghĩa
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="semantic", nb_classes=19)model.export(format="onnx")
Phân loại
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="classify", nb_classes=10)model.export(format="onnx")
Embedding
from libreyolo.models.dinov2.model import LibreDINOv2 model = LibreDINOv2(size="s", task="embed")model.export(format="tflite")
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. Thao tác xuất# đặt tên tệp theo tác vụ, ở đây là LibreDINOv2s-sem.onnx.model = LibreYOLO("LibreDINOv2s-sem.onnx")result = model(SAMPLE_IMAGE)

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
DINOv2, Meta AI (FAIR)
Giấy phép thượng nguồn
Apache-2.0
Nguồn thượng nguồn
github.com/facebookresearch/dinov2
Mã nguồn LibreYOLO
MIT
Trọng số
Apache-2.0, 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
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. LibreYOLO does not host or republish a DINOv2 checkpoint of its own: LibreDINOv2 downloads the pretrained backbone directly from Meta's facebook/dinov2-with-registers-small repository on Hugging Face the first time it runs, unmodified. The semantic and classification heads start at random initialization until you train them, since LibreYOLO does not publish a trained head for this family.

Hàng "Trọng số" bên trên nêu giấy phép áp dụng là Apache-2.0, nhưng thực tế không có gì được phát hành lại dưới tổ chức LibreYOLO trên Hugging Face cho họ mô hình này: LibreYOLO không host checkpoint LibreDINOv2 riêng. Nội dung mà LibreDINOv2(model_path=None) tải là repo facebook/dinov2-with-registers-small của chính Meta, không qua chỉnh sửa.

Trích dẫn

@misc{oquab2023dinov2,
  title={DINOv2: Learning Robust Visual Features without Supervision},
  author={Oquab, Maxime and Darcet, Timothée and Moutakanni, Theo and Vo, Huy V. and Szafraniec, Marc and Khalidov, Vasil and Fernandez, Pierre and Haziza, Daniel and Massa, Francisco and El-Nouby, Alaaeldin and Howes, Russell and Huang, Po-Yao and Xu, Hu and Sharma, Vasu and Li, Shang-Wen and Galuba, Wojciech and Rabbat, Mike and Assran, Mido and Ballas, Nicolas and Synnaeve, Gabriel and Misra, Ishan and Jegou, Herve and Mairal, Julien and Labatut, Patrick and Joulin, Armand and Bojanowski, Piotr},
  journal={arXiv:2304.07193},
  year={2023}
}

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

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