YOLOX
YOLOX는 분리된 분류-회귀 헤드를 갖춘 앵커 프리 단일 단계 탐지기로 SimOTA 레이블 할당을 사용해 학습합니다. LibreYOLO는 객체 탐지를 지원합니다.
- 작업
- detection
- 크기
- n, t, s, m, l, x at 416 to 640 px
- 설치
pip install libreyolo- 지원 티어
- 지원, v부터 지원. 보조 학습 가능 모델입니다. CI 통과 상태를 유지하며 기능은 여건에 따라 추가됩니다.
- 라이선스
- 코드 Apache-2.0, 가중치 Apache-2.0. 상업적 사용
설치
YOLOX에는 기본 패키지 외의 extra가 필요하지 않습니다.
pip install libreyolo예측
처음 사용할 때 Hugging Face에서 가중치를 다운로드해 로컬에 캐시합니다.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True반환되는 Results 객체는 모든 계열이 반환하는 것과 같으므로 탐지기를 바꾸려면 한 줄만 변경하면 됩니다. conf는 신뢰도 임곗값을, iou는 분리된 세 예측 스케일에 적용되는 NMS 임곗값을 설정합니다. 소스, 스트리밍, 결과 처리는 예측을 참조합니다.
변형
여섯 가지 크기는 같은 CSP 백본과 PAFPN 넥을 공유합니다. 가장 작은 n과 t는 다른 네 모델보다 작은 고정 입력 해상도에서 실행됩니다. 아래 벤치마크 표에 각 모델의 정확한 수치가 나와 있습니다.
| 체크포인트 | 입력(px) | mAP 50-95 | 파라미터(M) |
|---|---|---|---|
| LibreYOLOXnano | 416 | 28.8 | 0.91 |
| LibreYOLOXtiny | 416 | 35.1 | 5.06 |
| LibreYOLOXl | 640 | 53.9 | 54.21 |
| LibreYOLOXm | 640 | 50.9 | 25.33 |
| LibreYOLOXs | 640 | 43.0 | 8.97 |
| LibreYOLOXx | 640 | 56.3 | 99.07 |
COCO val2017, 500 images. LibreYOLO 벤치마크 도구로 측정하고 Vision Analysis에 공개했습니다. 이곳에서 하드웨어와 런타임별 지연 시간을 비교하고 전체 실행 기록을 확인할 수 있습니다.
학습
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01기본 설정에서는 SGD 모멘텀 0.9, 5 epoch 워밍업, lr0=0.01로 300 epoch를 실행하며 마지막 15 epoch에는 mosaic와 mixup 증강을 끕니다. train()은 pretrained 인수도 받지만 메서드 내부에서 값을 읽지 않습니다. 학습은 항상 모델을 생성할 때 불러온 가중치에서 이어지므로 pretrained=False도 네트워크를 다시 초기화하지 않습니다.
imgsz의 기본값은 불러온 체크포인트의 기본 해상도가 아니라 기본 학습 설정의 고정값입니다. 이는 특히 n과 t 체크포인트에 영향을 줍니다. 둘 중 하나를 imgsz를 명시하지 않고 이어 학습하면 공개 당시의 작은 크기가 아니라 더 큰 기본 크기로 전환됩니다.
데이터셋, 증강, 다중 GPU, 로거는 학습을 참조합니다.
검증
val()은 학습에 사용한 형식의 데이터셋을 대상으로 측정한 정밀도, 재현율, mAP 50, mAP 50-95를 포함하는 metrics/ 키 사전을 반환합니다.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml# 번들 COCO yaml에는 내장 다운로드 스크립트가 있으므로 데이터셋이 이미# 로컬에 있지 않다면 명시적 권한이 필요합니다.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \ allow_download_scripts=True내보내기
| 작업 | 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가 설치되지 않은 기본 런타임에서 그래프를 실행할 수도 있지만 이 경우 전처리와 후처리를 직접 작성해야 합니다. CoreML 내보내기는 nms=True로 NMS를 그래프에 포함할 수 있습니다. 현재 이 플래그를 허용하는 계열은 YOLOX와 YOLOv9뿐입니다.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # 팩토리는 파일 접미사에 따라 라우팅하므로 내보낸 아티팩트도# 다른 체크포인트처럼 불러와 동일한 Results 객체를 반환합니다.model = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)체크포인트
이 계열에 공개된 모든 가중치 파일입니다.
| 파일 | 입력(px) | 가중치 라이선스 |
|---|---|---|
| Detection | ||
| LibreYOLOXn.pt | 416 | apache-2.0 |
| LibreYOLOXt.pt | 416 | apache-2.0 |
| LibreYOLOXs.pt | 640 | apache-2.0 |
| LibreYOLOXm.pt | 640 | apache-2.0 |
| LibreYOLOXl.pt | 640 | apache-2.0 |
| LibreYOLOXx.pt | 640 | apache-2.0 |
위의 모든 파일은 현재 LibreYOLO 조직에 있으며 처음 사용할 때 내려받습니다.
라이선스
내려받는 특정 가중치의 Hugging Face 저장소에서 라이선스를 확인하십시오. LibreYOLO 조직의 모든 체크포인트에는 라이선스가 있으며 한 계열 안에서도 항상 같지는 않습니다. 해당 저장소가 신뢰할 수 있는 기준입니다. 아래 요약은 이 페이지를 마지막으로 검증했을 때 적용된 내용을 설명합니다.
관련 라이선스에 관한 설명이며 법률 자문이 아닙니다. 상업적으로 중요한 사안이라면 라이선스를 직접 읽고 별도의 법률 자문을 받으십시오.
- 원작
- YOLOX, Megvii
- 업스트림 라이선스
- 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.
인용
@article{yolox2021,
title={YOLOX: Exceeding YOLO Series in 2021},
author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
journal={arXiv preprint arXiv:2107.08430},
year={2021}
}github.com/Megvii-BaseDetection/YOLOX#cite-yolox에 있는 저자의 인용 블록에서 복사했습니다.