57 KiB
Vendored
57 KiB
Vendored
In [ ]:
!git clone https://github.com/ultralytics/yolov5 # clone
%cd yolov5
%pip install -qr requirements.txt # install
import torch
import utils
display = utils.notebook_init() # checksYOLOv5 🚀 v6.1-343-g685332e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)
Setup complete ✅ (8 CPUs, 51.0 GB RAM, 38.6/166.8 GB disk)
In [ ]:
!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images
#display.Image(filename='runs/detect/exp/zidane.jpg', width=600)[34m[1mdetect: [0mweights=['yolov5s.pt'], source=data/images, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False YOLOv5 🚀 v6.1-343-g685332e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB) Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt to yolov5s.pt... 100% 14.1M/14.1M [00:02<00:00, 6.87MB/s] Fusing layers... YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients image 1/2 /content/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, Done. (0.014s) image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.019s) Speed: 0.5ms pre-process, 16.3ms inference, 22.1ms NMS per image at shape (1, 3, 640, 640) Results saved to [1mruns/detect/exp[0m
In [ ]:
# Download COCO val
torch.hub.download_url_to_file('https://ultralytics.com/assets/coco2017val.zip', 'tmp.zip')
!unzip -q tmp.zip -d ../datasets && rm tmp.zip0%| | 0.00/780M [00:00<?, ?B/s]
In [ ]:
# Run YOLOv5x on COCO val
!python val.py --weights yolov5x.pt --data coco.yaml --img 640 --iou 0.65 --half[34m[1mval: [0mdata=/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.1-343-g685332e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)
Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5x.pt to yolov5x.pt...
100% 166M/166M [00:16<00:00, 10.3MB/s]
Fusing layers...
YOLOv5x summary: 444 layers, 86705005 parameters, 0 gradients
Downloading https://ultralytics.com/assets/Arial.ttf to /root/.config/Ultralytics/Arial.ttf...
100% 755k/755k [00:00<00:00, 14.8MB/s]
[34m[1mval: [0mScanning '/content/datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<00:00, 11214.34it/s]
[34m[1mval: [0mNew cache created: /content/datasets/coco/val2017.cache
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [01:05<00:00, 2.39it/s]
all 5000 36335 0.743 0.625 0.683 0.504
Speed: 0.1ms pre-process, 4.7ms inference, 1.1ms NMS per image at shape (32, 3, 640, 640)
Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
loading annotations into memory...
Done (t=0.38s)
creating index...
index created!
Loading and preparing results...
DONE (t=5.39s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=71.33s).
Accumulating evaluation results...
DONE (t=12.45s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.506
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.688
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.549
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.340
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.558
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.651
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.382
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.631
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.684
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.528
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.737
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.833
Results saved to [1mruns/val/exp[0m
In [ ]:
# Download COCO test-dev2017
torch.hub.download_url_to_file('https://ultralytics.com/assets/coco2017labels.zip', 'tmp.zip')
!unzip -q tmp.zip -d ../datasets && rm tmp.zip
!f="test2017.zip" && curl http://images.cocodataset.org/zips/$f -o $f && unzip -q $f -d ../datasets/coco/imagesIn [ ]:
# Run YOLOv5x on COCO test
!python val.py --weights yolov5x.pt --data coco.yaml --img 640 --iou 0.65 --half --task testIn [ ]:
# Tensorboard (optional)
%load_ext tensorboard
%tensorboard --logdir runs/trainIn [ ]:
# ClearML (optional)
%pip install -q clearml
!clearml-initIn [ ]:
# Weights & Biases (optional)
%pip install -q wandb
import wandb
wandb.login()In [ ]:
# Train YOLOv5s on COCO128 for 3 epochs
!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache[34m[1mtrain: [0mweights=yolov5s.pt, cfg=, data=coco128.yaml, hyp=data/hyps/hyp.scratch-low.yaml, epochs=3, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket=, cache=ram, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs/train, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest
[34m[1mgithub: [0mskipping check (Docker image), for updates see https://github.com/ultralytics/yolov5
YOLOv5 🚀 v6.1-343-g685332e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)
[34m[1mhyperparameters: [0mlr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0
[34m[1mWeights & Biases: [0mrun 'pip install wandb' to automatically track and visualize YOLOv5 🚀 runs (RECOMMENDED)
[34m[1mTensorBoard: [0mStart with 'tensorboard --logdir runs/train', view at http://localhost:6006/
Dataset not found ⚠️, missing paths ['/content/datasets/coco128/images/train2017']
Downloading https://ultralytics.com/assets/coco128.zip to coco128.zip...
100% 6.66M/6.66M [00:00<00:00, 31.8MB/s]
Dataset download success ✅ (1.5s), saved to [1m/content/datasets[0m
from n params module arguments
0 -1 1 3520 models.common.Conv [3, 32, 6, 2, 2]
1 -1 1 18560 models.common.Conv [32, 64, 3, 2]
2 -1 1 18816 models.common.C3 [64, 64, 1]
3 -1 1 73984 models.common.Conv [64, 128, 3, 2]
4 -1 2 115712 models.common.C3 [128, 128, 2]
5 -1 1 295424 models.common.Conv [128, 256, 3, 2]
6 -1 3 625152 models.common.C3 [256, 256, 3]
7 -1 1 1180672 models.common.Conv [256, 512, 3, 2]
8 -1 1 1182720 models.common.C3 [512, 512, 1]
9 -1 1 656896 models.common.SPPF [512, 512, 5]
10 -1 1 131584 models.common.Conv [512, 256, 1, 1]
11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest']
12 [-1, 6] 1 0 models.common.Concat [1]
13 -1 1 361984 models.common.C3 [512, 256, 1, False]
14 -1 1 33024 models.common.Conv [256, 128, 1, 1]
15 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest']
16 [-1, 4] 1 0 models.common.Concat [1]
17 -1 1 90880 models.common.C3 [256, 128, 1, False]
18 -1 1 147712 models.common.Conv [128, 128, 3, 2]
19 [-1, 14] 1 0 models.common.Concat [1]
20 -1 1 296448 models.common.C3 [256, 256, 1, False]
21 -1 1 590336 models.common.Conv [256, 256, 3, 2]
22 [-1, 10] 1 0 models.common.Concat [1]
23 -1 1 1182720 models.common.C3 [512, 512, 1, False]
24 [17, 20, 23] 1 229245 models.yolo.Detect [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]
Model summary: 270 layers, 7235389 parameters, 7235389 gradients, 16.6 GFLOPs
Transferred 349/349 items from yolov5s.pt
[34m[1mAMP: [0mchecks passed ✅
Scaled weight_decay = 0.0005
[34m[1moptimizer:[0m SGD with parameter groups 57 weight (no decay), 60 weight, 60 bias
[34m[1malbumentations: [0mversion 1.0.3 required by YOLOv5, but version 0.1.12 is currently installed
[34m[1mtrain: [0mScanning '/content/datasets/coco128/labels/train2017' images and labels...128 found, 0 missing, 2 empty, 0 corrupt: 100% 128/128 [00:00<00:00, 13378.96it/s]
[34m[1mtrain: [0mNew cache created: /content/datasets/coco128/labels/train2017.cache
[34m[1mtrain: [0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00, 1053.85it/s]
[34m[1mval: [0mScanning '/content/datasets/coco128/labels/train2017.cache' images and labels... 128 found, 0 missing, 2 empty, 0 corrupt: 100% 128/128 [00:00<?, ?it/s]
[34m[1mval: [0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00, 296.75it/s]
Plotting labels to runs/train/exp/labels.jpg...
[34m[1mAutoAnchor: [0m4.27 anchors/target, 0.994 Best Possible Recall (BPR). Current anchors are a good fit to dataset ✅
Image sizes 640 train, 640 val
Using 8 dataloader workers
Logging results to [1mruns/train/exp[0m
Starting training for 3 epochs...
Epoch gpu_mem box obj cls labels img_size
0/2 3.76G 0.04445 0.06016 0.01651 247 640: 100% 8/8 [00:04<00:00, 1.74it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.38it/s]
all 128 929 0.763 0.611 0.716 0.469
Epoch gpu_mem box obj cls labels img_size
1/2 4.79G 0.0443 0.06624 0.01655 188 640: 100% 8/8 [00:00<00:00, 8.46it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.44it/s]
all 128 929 0.787 0.631 0.734 0.488
Epoch gpu_mem box obj cls labels img_size
2/2 4.79G 0.04283 0.0579 0.01571 217 640: 100% 8/8 [00:00<00:00, 9.69it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.70it/s]
all 128 929 0.807 0.632 0.741 0.491
3 epochs completed in 0.003 hours.
Optimizer stripped from runs/train/exp/weights/last.pt, 14.9MB
Optimizer stripped from runs/train/exp/weights/best.pt, 14.9MB
Validating runs/train/exp/weights/best.pt...
Fusing layers...
Model summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:02<00:00, 1.36it/s]
all 128 929 0.808 0.631 0.741 0.491
person 128 254 0.886 0.689 0.812 0.53
bicycle 128 6 1 0.476 0.837 0.458
car 128 46 0.758 0.413 0.575 0.259
motorcycle 128 5 1 0.93 0.995 0.702
airplane 128 6 0.955 1 0.995 0.745
bus 128 7 0.755 0.714 0.832 0.691
train 128 3 1 0.553 0.789 0.493
truck 128 12 0.629 0.417 0.491 0.269
boat 128 6 1 0.332 0.507 0.201
traffic light 128 14 0.859 0.214 0.385 0.228
stop sign 128 2 0.809 1 0.995 0.796
bench 128 9 0.818 0.504 0.64 0.259
bird 128 16 0.921 1 0.995 0.64
cat 128 4 0.915 1 0.995 0.822
dog 128 9 0.869 0.556 0.902 0.6
horse 128 2 0.816 1 0.995 0.672
elephant 128 17 0.973 0.882 0.934 0.731
bear 128 1 0.699 1 0.995 0.895
zebra 128 4 0.877 1 0.995 0.947
giraffe 128 9 0.868 0.889 0.975 0.742
backpack 128 6 1 0.543 0.76 0.346
umbrella 128 18 0.864 0.611 0.898 0.522
handbag 128 19 0.701 0.127 0.335 0.174
tie 128 7 0.929 0.714 0.739 0.47
suitcase 128 4 0.658 0.75 0.795 0.536
frisbee 128 5 0.722 0.8 0.8 0.69
skis 128 1 0.776 1 0.995 0.3
snowboard 128 7 1 0.707 0.848 0.554
sports ball 128 6 0.662 0.667 0.602 0.316
kite 128 10 0.727 0.536 0.647 0.249
baseball bat 128 4 0.985 0.5 0.559 0.181
baseball glove 128 7 0.581 0.429 0.459 0.282
skateboard 128 5 0.739 0.6 0.705 0.501
tennis racket 128 7 0.759 0.429 0.566 0.31
bottle 128 18 0.593 0.405 0.574 0.294
wine glass 128 16 0.742 0.875 0.91 0.497
cup 128 36 0.833 0.694 0.817 0.514
fork 128 6 1 0.32 0.463 0.31
knife 128 16 0.757 0.585 0.73 0.385
spoon 128 22 0.812 0.393 0.632 0.374
bowl 128 28 0.869 0.571 0.718 0.496
banana 128 1 0.894 1 0.995 0.205
sandwich 128 2 1 0 0.308 0.263
orange 128 4 0.876 1 0.995 0.703
broccoli 128 11 0.821 0.364 0.442 0.323
carrot 128 24 0.709 0.625 0.72 0.464
hot dog 128 2 0.546 1 0.828 0.745
pizza 128 5 0.812 0.871 0.962 0.699
donut 128 14 0.686 1 0.96 0.825
cake 128 4 0.856 1 0.995 0.822
chair 128 35 0.591 0.577 0.616 0.311
couch 128 6 0.973 0.667 0.857 0.532
potted plant 128 14 0.839 0.786 0.827 0.45
bed 128 3 1 0 0.641 0.403
dining table 128 13 0.631 0.266 0.462 0.375
toilet 128 2 0.878 1 0.995 0.846
tv 128 2 0.707 1 0.995 0.821
laptop 128 3 1 0 0.863 0.498
mouse 128 2 1 0 0.0907 0.0544
remote 128 8 1 0.598 0.63 0.537
cell phone 128 8 0.661 0.5 0.465 0.249
microwave 128 3 0.823 1 0.995 0.767
oven 128 5 0.428 0.4 0.432 0.285
sink 128 6 0.354 0.167 0.268 0.178
refrigerator 128 5 0.649 0.8 0.806 0.551
book 128 29 0.618 0.207 0.333 0.161
clock 128 9 0.792 0.889 0.943 0.735
vase 128 2 0.502 1 0.995 0.895
scissors 128 1 1 0 0.332 0.0663
teddy bear 128 21 0.84 0.619 0.769 0.521
toothbrush 128 5 0.763 0.654 0.898 0.603
Results saved to [1mruns/train/exp[0m
In [ ]:
# Reproduce
for x in 'yolov5n', 'yolov5s', 'yolov5m', 'yolov5l', 'yolov5x':
!python val.py --weights {x}.pt --data coco.yaml --img 640 --task speed # speed
!python val.py --weights {x}.pt --data coco.yaml --img 640 --conf 0.001 --iou 0.65 # mAPIn [ ]:
# PyTorch Hub
import torch
# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
# Images
dir = 'https://ultralytics.com/images/'
imgs = [dir + f for f in ('zidane.jpg', 'bus.jpg')] # batch of images
# Inference
results = model(imgs)
results.print() # or .show(), .save()In [ ]:
# YOLOv5 CI
%%shell
rm -rf runs # remove runs/
m=yolov5n # official weights
b=runs/train/exp/weights/best # best.pt checkpoint
python train.py --imgsz 64 --batch 32 --weights $m.pt --cfg $m.yaml --epochs 1 --device 0 # train
for d in 0 cpu; do # devices
for w in $m $b; do # weights
python val.py --imgsz 64 --batch 32 --weights $w.pt --device $d # val
python detect.py --imgsz 64 --weights $w.pt --device $d # detect
done
done
python hubconf.py --model $m # hub
python models/tf.py --weights $m.pt # build TF model
python models/yolo.py --cfg $m.yaml # build PyTorch model
python export.py --weights $m.pt --img 64 --include torchscript # exportIn [ ]:
# Profile
from utils.torch_utils import profile
m1 = lambda x: x * torch.sigmoid(x)
m2 = torch.nn.SiLU()
results = profile(input=torch.randn(16, 3, 640, 640), ops=[m1, m2], n=100)In [ ]:
# Evolve
!python train.py --img 640 --batch 64 --epochs 100 --data coco128.yaml --weights yolov5s.pt --cache --noautoanchor --evolve
!d=runs/train/evolve && cp evolve.* $d && zip -r evolve.zip $d && gsutil mv evolve.zip gs://bucket # upload results (optional)In [ ]:
# VOC
for b, m in zip([64, 64, 64, 32, 16], ['yolov5n', 'yolov5s', 'yolov5m', 'yolov5l', 'yolov5x']): # batch, model
!python train.py --batch {b} --weights {m}.pt --data VOC.yaml --epochs 50 --img 512 --hyp hyp.VOC.yaml --project VOC --name {m} --cacheIn [ ]:
# TensorRT
# https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing-pip
!pip install -U nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com # install
!python export.py --weights yolov5s.pt --include engine --imgsz 640 --device 0 # export
!python detect.py --weights yolov5s.engine --imgsz 640 --device 0 # inference





