Improved detect.py timing (#4741)
* Improved detect.py timing * Eliminate 1 time_sync() call * Inference-only time * dash * #Save section * Cleanup
This commit is contained in:
1 parent
c5360f6e70
commit
7af1b4c266
2 files changed
+22
-18
No files matched your search
@@ -8,7 +8,6 @@ Usage:
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import cv2
|
||||
@@ -123,8 +122,9 @@ def run(weights='yolov5s.pt', # model.pt path(s)
|
||||
# Run inference
|
||||
if pt and device.type != 'cpu':
|
||||
model(torch.zeros(1, 3, *imgsz).to(device).type_as(next(model.parameters()))) # run once
|
||||
t0 = time.time()
|
||||
dt, seen = [0.0, 0.0, 0.0], 0
|
||||
for path, img, im0s, vid_cap in dataset:
|
||||
t1 = time_sync()
|
||||
if onnx:
|
||||
img = img.astype('float32')
|
||||
else:
|
||||
@@ -133,9 +133,10 @@ def run(weights='yolov5s.pt', # model.pt path(s)
|
||||
img = img / 255.0 # 0 - 255 to 0.0 - 1.0
|
||||
if len(img.shape) == 3:
|
||||
img = img[None] # expand for batch dim
|
||||
t2 = time_sync()
|
||||
dt[0] += t2 - t1
|
||||
|
||||
# Inference
|
||||
t1 = time_sync()
|
||||
if pt:
|
||||
visualize = increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False
|
||||
pred = model(img, augment=augment, visualize=visualize)[0]
|
||||
@@ -162,17 +163,20 @@ def run(weights='yolov5s.pt', # model.pt path(s)
|
||||
pred[..., 2] *= imgsz[1] # w
|
||||
pred[..., 3] *= imgsz[0] # h
|
||||
pred = torch.tensor(pred)
|
||||
t3 = time_sync()
|
||||
dt[1] += t3 - t2
|
||||
|
||||
# NMS
|
||||
pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)
|
||||
t2 = time_sync()
|
||||
dt[2] += time_sync() - t3
|
||||
|
||||
# Second-stage classifier (optional)
|
||||
if classify:
|
||||
pred = apply_classifier(pred, modelc, img, im0s)
|
||||
|
||||
# Process predictions
|
||||
for i, det in enumerate(pred): # detections per image
|
||||
for i, det in enumerate(pred): # per image
|
||||
seen += 1
|
||||
if webcam: # batch_size >= 1
|
||||
p, s, im0, frame = path[i], f'{i}: ', im0s[i].copy(), dataset.count
|
||||
else:
|
||||
@@ -209,8 +213,8 @@ def run(weights='yolov5s.pt', # model.pt path(s)
|
||||
if save_crop:
|
||||
save_one_box(xyxy, imc, file=save_dir / 'crops' / names[c] / f'{p.stem}.jpg', BGR=True)
|
||||
|
||||
# Print time (inference + NMS)
|
||||
print(f'{s}Done. ({t2 - t1:.3f}s)')
|
||||
# Print time (inference-only)
|
||||
print(f'{s}Done. ({t3 - t2:.3f}s)')
|
||||
|
||||
# Stream results
|
||||
im0 = annotator.result()
|
||||
@@ -237,15 +241,15 @@ def run(weights='yolov5s.pt', # model.pt path(s)
|
||||
vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
|
||||
vid_writer[i].write(im0)
|
||||
|
||||
# Print results
|
||||
t = tuple(x / seen * 1E3 for x in dt) # speeds per image
|
||||
print(f'Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {(1, 3, *imgsz)}' % t)
|
||||
if save_txt or save_img:
|
||||
s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else ''
|
||||
print(f"Results saved to {colorstr('bold', save_dir)}{s}")
|
||||
|
||||
if update:
|
||||
strip_optimizer(weights) # update model (to fix SourceChangeWarning)
|
||||
|
||||
print(f'Done. ({time.time() - t0:.3f}s)')
|
||||
|
||||
|
||||
def parse_opt():
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
Reference in new issue
Block a user