PicoDet
PicoDet은 모바일 및 엣지 CPU용으로 구축된 단일 단계 탐지기입니다. ESNet 백본, CSP-PAN 넥, 공유 Generalized Focal Loss 헤드를 사용합니다. LibreYOLO는 객체 탐지를 지원합니다.
- 작업
- detection
- 크기
- s, m, l at 320 to 640 px
- 설치
pip install libreyolo- 지원 티어
- 지원, v부터 지원. 보조 학습 가능 모델입니다. CI 통과 상태를 유지하며 기능은 여건에 따라 추가됩니다.
- 라이선스
- 코드 Apache-2.0, 가중치 Apache-2.0. 상업적 사용
설치
PicoDet에는 기본 패키지 외의 extra가 필요하지 않습니다.
pip install libreyolo예측
처음 사용할 때 Hugging Face에서 가중치를 다운로드해 로컬에 캐시합니다.
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)libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True반환되는 Results 객체는 모든 계열이 반환하는 것과 같으므로 탐지기를 바꾸려면 한 줄만 변경하면 됩니다. conf는 신뢰도 임곗값을, iou는 NMS 임곗값을 설정합니다. 소스, 스트리밍, 결과 처리는 예측을 참조합니다.
변형
각각 고유한 고정 입력 해상도를 사용하는 세 가지 크기가 있습니다. s가 가장 작고 l이 가장 큽니다. 크기에 따라 해상도도 증가하므로 더 큰 체크포인트는 매개변수가 많을 뿐 아니라 이미지별 실행 비용도 더 큽니다.
| 체크포인트 | 입력(px) | mAP 50-95 | 파라미터(M) |
|---|---|---|---|
| LibrePICODETs | 320 | 29.5 | 0.99 |
| LibrePICODETm | 416 | 37.6 | 2.15 |
| LibrePICODETl | 640 | 44.2 | 3.31 |
COCO val2017, 500 images. LibreYOLO 벤치마크 도구로 측정하고 Vision Analysis에 공개했습니다. 이곳에서 하드웨어와 런타임별 지연 시간을 비교하고 전체 실행 기록을 확인할 수 있습니다.
학습
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train( data="my-dataset.yaml", epochs=300, batch=16, lr0=0.01,)# imgsz는 설정할 가치가 있습니다. CLI 기본값은 640이지만 s# 체크포인트의 기본 해상도는 320입니다.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01손실 구성 요소와 할당기는 업스트림 레시피를 따릅니다. VFL, DFL, GIoU, SimOTA에 분류 품질 가중치와 동적 IoU VFL 대상을 사용합니다. 같은 체크포인트의 추론은 업스트림과 비트 단위로 동등합니다.
train() 자체의 docstring에 따라 아직 확인하지 않은 항목은 전체 데이터셋 수렴, 다중 GPU 동작, 수평 뒤집기 외의 증강입니다. 기본 320 해상도의 s 체크포인트도 라이브러리가 소규모 파인튜닝을 테스트하는 30이미지, 2클래스 fixture에서 LibreYOLO의 정확도 하한을 안정적으로 넘지 못했습니다. 해당 크기는 전체 COCO 규모에 더 적합합니다.
train()은 pretrained 인수도 받지만 메서드 내부에서 값을 읽지 않습니다. 학습은 항상 모델 생성 시 불러온 가중치에서 이어지므로 pretrained=False도 네트워크를 다시 초기화하지 않습니다. Python에서 imgsz를 설정하지 않으면 불러온 체크포인트의 기본 해상도를 사용하며 s는 320, m은 416, l은 640입니다. CLI는 항상 imgsz를 보내고 기본값은 640이므로 체크포인트에 맞게 설정합니다.
그 외 기본 설정에서는 SGD, lr0=0.01, 모멘텀 0.9, weight decay 4e-5, cosine schedule의 1 epoch 워밍업으로 300 epoch를 실행합니다. 수평 뒤집기만 증강으로 적용합니다.
데이터셋, 증강, 다중 GPU, 로거는 학습을 참조합니다.
검증
val()은 학습에 사용한 형식의 데이터셋을 대상으로 측정한 정밀도, 재현율, mAP 50, mAP 50-95를 포함하는 metrics/ 키 사전을 반환합니다.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibrePICODETs.pt data=my-dataset.yaml내보내기
| 작업 | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: 지원함 | Detection to TorchScript: 지원함 | Detection to ExecuTorch: 지원함 | Detection to TensorRT: 지원함 | Detection to OpenVINO: 지원함 | Detection to Paddle: 지원하지 않음 | Detection to MNN: 지원하지 않음 | Detection to RKNN: 지원함 | Detection to ncnn: 지원함 | Detection to TFLite: 지원하지 않음 | Detection to CoreML: 지원하지 않음 | Detection to Core AI: 지원함 |
내보낸 아티팩트는 파일 접미사에 따라 LibreYOLO()로 다시 불러오므로 .onnx 또는 .engine 파일은 체크포인트처럼 동작하며 동일한 Results를 반환합니다. LibreYOLO가 설치되지 않은 기본 런타임에서 그래프를 실행할 수도 있지만 이 경우 전처리와 후처리를 직접 작성해야 합니다.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # 팩토리는 파일 접미사에 따라 라우팅하므로 내보낸 아티팩트도# 다른 체크포인트처럼 불러와 동일한 Results 객체를 반환합니다.model = LibreYOLO("LibrePICODETs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)체크포인트
이 계열에 공개된 모든 가중치 파일입니다.
| 파일 | 입력(px) | 가중치 라이선스 |
|---|---|---|
| Detection | ||
| LibrePICODETs.pt | 320 | apache-2.0 |
| LibrePICODETm.pt | 416 | apache-2.0 |
| LibrePICODETl.pt | 640 | apache-2.0 |
위의 모든 파일은 현재 LibreYOLO 조직에 있으며 처음 사용할 때 내려받습니다.
라이선스
내려받는 특정 가중치의 Hugging Face 저장소에서 라이선스를 확인하십시오. LibreYOLO 조직의 모든 체크포인트에는 라이선스가 있으며 한 계열 안에서도 항상 같지는 않습니다. 해당 저장소가 신뢰할 수 있는 기준입니다. 아래 요약은 이 페이지를 마지막으로 검증했을 때 적용된 내용을 설명합니다.
관련 라이선스에 관한 설명이며 법률 자문이 아닙니다. 상업적으로 중요한 사안이라면 라이선스를 직접 읽고 별도의 법률 자문을 받으십시오.
- 원작
- PP-PicoDet, PaddlePaddle (Baidu)
- 업스트림 라이선스
- Apache-2.0
- LibreYOLO 코드
- MIT
- 가중치
- Apache-2.0, huggingface.co/LibreYOLO에 다시 게시됨
- 해석
- 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.
LibreYOLO 이식은 PaddleDetection의 원래 PP-PicoDet을 PyTorch로 다시 구현한 Bo396543018/Picodet_Pytorch를 따릅니다. mmcv를 제거하고 모든 활성화를 정확히 일치시켜 Bo의 파이프라인으로 변환한 PaddlePaddle 체크포인트가 수치 드리프트 없이 불러와집니다. 두 소스 모두 논문 저자와 같은 Apache-2.0 약관을 적용합니다.
인용
@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}
}github.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet에 있는 저자의 인용 블록에서 복사했습니다.