Ultralytics Code Refactor https://ultralytics.com/actions (#13174)
Refactor code for speed and clarity
This commit is contained in:
1 parent
900a1262cd
commit
8257e0a68c
6 files changed
+1446
-75
No files matched your search
+102
-4
@@ -60,7 +60,41 @@ def run(
|
||||
pt_only=False, # test PyTorch only
|
||||
hard_fail=False, # throw error on benchmark failure
|
||||
):
|
||||
"""Run YOLOv5 benchmarks on multiple export formats and log results for model performance evaluation."""
|
||||
"""
|
||||
Run YOLOv5 benchmarks on multiple export formats and log results for model performance evaluation.
|
||||
|
||||
Args:
|
||||
weights (Path | str): Path to the model weights file (default: ROOT / "yolov5s.pt").
|
||||
imgsz (int): Inference size in pixels (default: 640).
|
||||
batch_size (int): Batch size for inference (default: 1).
|
||||
data (Path | str): Path to the dataset.yaml file (default: ROOT / "data/coco128.yaml").
|
||||
device (str): CUDA device, e.g., '0' or '0,1,2,3' or 'cpu' (default: None).
|
||||
half (bool): Use FP16 half-precision inference (default: False).
|
||||
test (bool): Test export formats only (default: False).
|
||||
pt_only (bool): Test PyTorch format only (default: False).
|
||||
hard_fail (bool): Throw an error on benchmark failure if True (default: False).
|
||||
|
||||
Returns:
|
||||
None. Logs information about the benchmark results, including the format, size, mAP50-95, and inference time.
|
||||
|
||||
Notes:
|
||||
Supported export formats and models include PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, CoreML, TensorFlow
|
||||
SavedModel, TensorFlow GraphDef, TensorFlow Lite, and TensorFlow Edge TPU. Edge TPU and TF.js are unsupported.
|
||||
|
||||
Examples:
|
||||
```python
|
||||
$ python benchmarks.py --weights yolov5s.pt --img 640
|
||||
```
|
||||
|
||||
Usage:
|
||||
Install required packages:
|
||||
$ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime openvino-dev tensorflow-cpu # CPU support
|
||||
$ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime-gpu openvino-dev tensorflow # GPU support
|
||||
$ pip install -U nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com # TensorRT
|
||||
|
||||
Run benchmarks:
|
||||
$ python benchmarks.py --weights yolov5s.pt --img 640
|
||||
"""
|
||||
y, t = [], time.time()
|
||||
device = select_device(device)
|
||||
model_type = type(attempt_load(weights, fuse=False)) # DetectionModel, SegmentationModel, etc.
|
||||
@@ -125,7 +159,23 @@ def test(
|
||||
pt_only=False, # test PyTorch only
|
||||
hard_fail=False, # throw error on benchmark failure
|
||||
):
|
||||
"""Run YOLOv5 export tests for all supported formats and log the results, including inference speed and mAP."""
|
||||
"""
|
||||
Run YOLOv5 export tests for all supported formats and log the results, including export statuses.
|
||||
|
||||
Args:
|
||||
weights (Path | str): Path to the model weights file (.pt format). Default is 'ROOT / "yolov5s.pt"'.
|
||||
imgsz (int): Inference image size (in pixels). Default is 640.
|
||||
batch_size (int): Batch size for testing. Default is 1.
|
||||
data (Path | str): Path to the dataset configuration file (.yaml format). Default is 'ROOT / "data/coco128.yaml"'.
|
||||
device (str): Device for running the tests, can be 'cpu' or a specific CUDA device ('0', '0,1,2,3', etc.). Default is an empty string.
|
||||
half (bool): Use FP16 half-precision for inference if True. Default is False.
|
||||
test (bool): Test export formats only without running inference. Default is False.
|
||||
pt_only (bool): Test only the PyTorch model if True. Default is False.
|
||||
hard_fail (bool): Raise error on export or test failure if True. Default is False.
|
||||
|
||||
Returns:
|
||||
pd.DataFrame: DataFrame containing the results of the export tests, including format names and export statuses.
|
||||
"""
|
||||
y, t = [], time.time()
|
||||
device = select_device(device)
|
||||
for i, (name, f, suffix, gpu) in export.export_formats().iterrows(): # index, (name, file, suffix, gpu-capable)
|
||||
@@ -151,7 +201,28 @@ def test(
|
||||
|
||||
|
||||
def parse_opt():
|
||||
"""Parses command-line arguments for YOLOv5 model inference configuration."""
|
||||
"""
|
||||
Parses command-line arguments for YOLOv5 model inference configuration.
|
||||
|
||||
Args:
|
||||
weights (str): The path to the weights file. Defaults to 'ROOT / "yolov5s.pt"'.
|
||||
imgsz (int): Inference size in pixels. Defaults to 640.
|
||||
batch_size (int): Batch size. Defaults to 1.
|
||||
data (str): Path to the dataset YAML file. Defaults to 'ROOT / "data/coco128.yaml"'.
|
||||
device (str): CUDA device, e.g., '0' or '0,1,2,3' or 'cpu'. Defaults to an empty string (auto-select).
|
||||
half (bool): Use FP16 half-precision inference. This is a flag and defaults to False.
|
||||
test (bool): Test exports only. This is a flag and defaults to False.
|
||||
pt_only (bool): Test PyTorch only. This is a flag and defaults to False.
|
||||
hard_fail (bool|str): Throw an error on benchmark failure. Can be a boolean or a string representing a minimum metric
|
||||
floor, i.e., '0.29'. Defaults to False.
|
||||
|
||||
Returns:
|
||||
argparse.Namespace: Parsed command-line arguments encapsulated in an argparse Namespace object.
|
||||
|
||||
Notes:
|
||||
The function modifies the 'opt.data' by checking and validating the YAML path using 'check_yaml()'.
|
||||
The parsed arguments are printed for reference using 'print_args()'.
|
||||
"""
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--weights", type=str, default=ROOT / "yolov5s.pt", help="weights path")
|
||||
parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="inference size (pixels)")
|
||||
@@ -169,7 +240,34 @@ def parse_opt():
|
||||
|
||||
|
||||
def main(opt):
|
||||
"""Executes a test run if `opt.test` is True, otherwise starts training or inference with provided options."""
|
||||
"""
|
||||
Executes YOLOv5 benchmark tests or main training/inference routines based on the provided command-line arguments.
|
||||
|
||||
Args:
|
||||
opt (argparse.Namespace): Parsed command-line arguments including options for weights, image size, batch size, data
|
||||
configuration, device, and other flags for inference settings.
|
||||
|
||||
Returns:
|
||||
None: This function does not return any value. It leverages side-effects such as logging and running benchmarks.
|
||||
|
||||
Example:
|
||||
```python
|
||||
if __name__ == "__main__":
|
||||
opt = parse_opt()
|
||||
main(opt)
|
||||
```
|
||||
|
||||
Notes:
|
||||
- For a complete list of supported export formats and their respective requirements, refer to the
|
||||
[Ultralytics YOLOv5 Export Formats](https://github.com/ultralytics/yolov5#export-formats).
|
||||
- Ensure that you have installed all necessary dependencies by following the installation instructions detailed in
|
||||
the [main repository](https://github.com/ultralytics/yolov5#installation).
|
||||
|
||||
```shell
|
||||
# Running benchmarks on default weights and image size
|
||||
$ python benchmarks.py --weights yolov5s.pt --img 640
|
||||
```
|
||||
"""
|
||||
test(**vars(opt)) if opt.test else run(**vars(opt))
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user