PicoDet

PicoDet là detector một giai đoạn được xây dựng cho CPU di động và thiết bị biên: backbone ESNet, neck CSP-PAN và head Generalized Focal Loss dùng chung. LibreYOLO hỗ trợ mô hình cho tác vụ phát hiện.

Tác vụ
detection
Kích thước
s, m, l at 320 to 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
PP-PicoDet của PaddlePaddle (Baidu), 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

PicoDet 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("LibrePICODETs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Đố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ể

Ba kích thước, mỗi kích thước có độ phân giải đầu vào cố định riêng: s nhỏ nhất và l lớn nhất. Độ phân giải tăng theo kích thước, vì vậy checkpoint lớn hơn cũng tốn chi phí chạy trên mỗi ảnh hơn, ngoài việc chứa nhiều tham số hơn.

CheckpointĐầu vào (px)mAP 50-95Tham số (M)
LibrePICODETs32029.50.99
LibrePICODETm41637.62.15
LibrePICODETl64044.23.31

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("LibrePICODETs.pt")model.train(    data="my-dataset.yaml",    epochs=300, batch=16, lr0=0.01,)
CLI
# Nên đặt imgsz: CLI mặc định dùng 640, còn checkpoint s có# độ phân giải gốc 320.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01

Các thành phần loss và assigner tuân theo công thức thượng nguồn: VFL, DFL, GIoU và SimOTA, với trọng số chất lượng phân loại và đích VFL dùng IoU động. Suy luận tương đương từng bit với thượng nguồn trên cùng checkpoint.

Những phần chưa được kiểm tra theo docstring của chính train(): hội tụ trên toàn bộ tập dữ liệu, hành vi multi-GPU và mọi phép tăng cường dữ liệu ngoài lật ngang. Checkpoint s ở độ phân giải gốc 320 cũng chưa vượt qua một cách ổn định mức độ chính xác tối thiểu của LibreYOLO trên fixture 30 ảnh, hai lớp mà thư viện dùng để kiểm thử các lượt tinh chỉnh nhỏ. Kích thước đó phù hợp hơn ở quy mô COCO đầy đủ.

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 không đặt imgsz trong Python, giá trị sẽ là độ phân giải gốc của checkpoint đã tải, 320 cho s, 416 cho m và 640 cho l. CLI luôn gửi imgsz với mặc định 640, vì vậy hãy đặt giá trị khớp với checkpoint tại đó.

Nếu giữ nguyên các giá trị khác, trình huấn luyện chạy 300 epoch với SGD ở lr0=0.01, momentum 0.9, weight decay 4e-5 và warmup 1 epoch theo lịch cosine. Lật ngang là phép tăng cường dữ liệu duy nhất được áp dụng.

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("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibrePICODETs.pt data=my-dataset.yaml

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: được hỗ trợDetection to ncnn: đượ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ợ

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)
CLI
libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 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("LibrePICODETs.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
LibrePICODETs.pt320apache-2.0
LibrePICODETm.pt416apache-2.0
LibrePICODETl.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
PP-PicoDet, PaddlePaddle (Baidu)
Giấy phép thượng nguồn
Apache-2.0
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. LibreYOLO's port follows Bo396543018/Picodet_Pytorch, a PyTorch re-implementation of PaddleDetection's original PP-PicoDet, and both carry the same Apache-2.0 terms as the paper's authors.

Bản chuyển đổi của LibreYOLO dựa theo Bo396543018/Picodet_Pytorch, một bản triển khai lại PP-PicoDet gốc của PaddleDetection bằng PyTorch, đã loại bỏ mmcv và khớp chính xác mọi activation để các checkpoint PaddlePaddle được chuyển qua pipeline của Bo có thể tải mà không sai lệch số. Cả hai nguồn đều áp dụng cùng điều khoản Apache-2.0 như các tác giả bài báo.

Trích dẫn

@misc{yu2021pppicodet,
      title={PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices},
      author={Guanghua Yu and Qinyao Chang and Wenyu Lv and Chang Xu and Cheng Cui and Wei Ji and Qingqing Dang and Kaipeng Deng and Guanzhong Wang and Yuning Du and Baohua Lai and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma},
      year={2021},
      eprint={2111.00902},
      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/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet.

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