콘텐츠로 건너뛰기

가지치기/스패리티 튜토리얼

이 가이드에서는 YOLOv5 🚀 모델에 가지치기를 적용하는 방법을 설명합니다.

시작하기 전에

리포지토리를 복제하고 요구사항.txt를 설치합니다. Python>=3.8.0 환경을 포함하여 PyTorch>=1.8. 모델데이터 세트는 최신 YOLOv5 릴리스에서 자동으로 다운로드됩니다.

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

정상적으로 테스트

가지치기를 하기 전에 비교할 기준 성능을 설정하고 싶습니다. 이 명령은 이미지 크기 640픽셀의 COCO val2017에서 YOLOv5x를 테스트합니다. yolov5x.pt 은 가장 크고 정확한 모델입니다. 다른 옵션은 다음과 같습니다. yolov5s.pt, yolov5m.pt 그리고 yolov5l.pt또는 사용자 지정 데이터 세트 학습에서 얻은 자체 체크포인트 ./weights/best.pt. 사용 가능한 모든 모델에 대한 자세한 내용은 README를 참조하세요. 테이블.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

출력:

val: data=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True, dnn=False
YOLOv5 🚀 v6.0-224-g4c40933 torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)

Fusing layers...
Model Summary: 444 layers, 86705005 parameters, 0 gradients
val: Scanning '/content/datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<?, ?it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [01:12<00:00,  2.16it/s]
                 all       5000      36335      0.732      0.628      0.683      0.496
Speed: 0.1ms pre-process, 5.2ms inference, 1.7ms NMS per image at shape (32, 3, 640, 640)  # <--- base speed

Evaluating pycocotools mAP... saving runs/val/exp2/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.507  # <--- base mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.689
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.552
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.345
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.559
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.652
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.381
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.630
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.682
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.731
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.829
Results saved to runs/val/exp

COCO(0.30 희소성)에서 YOLOv5x 테스트하기

가지치기된 모델을 사용하여 위의 테스트를 반복합니다. torch_utils.prune() 명령을 사용합니다. 업데이트 val.py 를 사용하여 YOLOv5x를 0.3 희소성으로 잘라냅니다:

스크린샷 2022-02-02 at 22 54 18

30% 잘린 출력:

val: data=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True, dnn=False
YOLOv5 🚀 v6.0-224-g4c40933 torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)

Fusing layers...
Model Summary: 444 layers, 86705005 parameters, 0 gradients
Pruning model...  0.3 global sparsity
val: Scanning '/content/datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<?, ?it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [01:11<00:00,  2.19it/s]
                 all       5000      36335      0.724      0.614      0.671      0.478
Speed: 0.1ms pre-process, 5.2ms inference, 1.7ms NMS per image at shape (32, 3, 640, 640)  # <--- prune mAP

Evaluating pycocotools mAP... saving runs/val/exp3/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.489  # <--- prune mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.677
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.537
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.334
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.542
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.635
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.370
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.612
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.664
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.496
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.722
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803
Results saved to runs/val/exp3

결과에서 우리는 다음을 달성했음을 관찰할 수 있습니다. 30%의 희소성 의 30%가 가지치기 후 모델의 가중치 매개변수의 nn.Conv2d 레이어는 0입니다. 추론 시간은 본질적으로 변경되지 않습니다.의 경우, 모델의 AP 및 AR 점수가 약간 감소했습니다..

지원 환경

Ultralytics 는 바로 사용할 수 있는 다양한 환경을 제공하며, 각 환경에는 다음과 같은 필수 종속성이 사전 설치되어 있습니다. CUDA, CUDNN, Python, 및 PyTorch와 같은 필수 종속 요소를 설치하여 프로젝트를 시작할 수 있습니다.

프로젝트 상태

YOLOv5 CI

이 배지는 모든 YOLOv5 GitHub Actions 지속적 통합(CI) 테스트가 성공적으로 통과되었음을 나타냅니다. 이러한 CI 테스트는 교육, 검증, 추론, 내보내기벤치마크 등 다양한 주요 측면에서 YOLOv5 의 기능과 성능을 엄격하게 확인합니다. 24시간마다 그리고 새로운 커밋이 있을 때마다 테스트를 수행하여 macOS, Windows 및 Ubuntu에서 일관되고 안정적인 작동을 보장합니다.

📅 Created 11 months ago ✏️ Updated 4 days ago

댓글