export_onnx.py 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. #!/usr/bin/env python3
  2. """Export YOLOv5s / YOLOv8s to ONNX for OpenCV DNN inference."""
  3. import sys
  4. import argparse
  5. def export_yolov5(weights, output, input_size=640):
  6. import torch
  7. model = torch.hub.load('ultralytics/yolov5', 'custom', path=weights, force_reload=False)
  8. model.eval()
  9. img = torch.zeros(1, 3, input_size, input_size)
  10. torch.onnx.export(model, img, output, opset_version=12,
  11. input_names=['images'], output_names=['output'],
  12. dynamic_axes={'images': {0: 'batch'}, 'output': {0: 'batch'}})
  13. print(f"YOLOv5 exported -> {output}")
  14. def export_yolov8(weights, output, input_size=640):
  15. from ultralytics import YOLO
  16. model = YOLO(weights)
  17. model.export(format='onnx', imgsz=input_size, simplify=True)
  18. print(f"YOLOv8 exported -> {output}")
  19. if __name__ == '__main__':
  20. parser = argparse.ArgumentParser()
  21. parser.add_argument('--weights', required=True, help='yolov5s.pt or yolov8s.pt')
  22. parser.add_argument('--output', default='models/yolov8s.onnx')
  23. parser.add_argument('--input-size', type=int, default=640)
  24. args = parser.parse_args()
  25. if 'yolov8' in args.weights.lower():
  26. export_yolov8(args.weights, args.output, args.input_size)
  27. else:
  28. export_yolov5(args.weights, args.output, args.input_size)