dgenerate-ultralytics-headless 8.3.214__py3-none-any.whl → 8.3.248__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. {dgenerate_ultralytics_headless-8.3.214.dist-info → dgenerate_ultralytics_headless-8.3.248.dist-info}/METADATA +13 -14
  2. dgenerate_ultralytics_headless-8.3.248.dist-info/RECORD +298 -0
  3. tests/__init__.py +5 -7
  4. tests/conftest.py +8 -15
  5. tests/test_cli.py +1 -1
  6. tests/test_cuda.py +5 -8
  7. tests/test_engine.py +1 -1
  8. tests/test_exports.py +57 -12
  9. tests/test_integrations.py +4 -4
  10. tests/test_python.py +84 -53
  11. tests/test_solutions.py +160 -151
  12. ultralytics/__init__.py +1 -1
  13. ultralytics/cfg/__init__.py +56 -62
  14. ultralytics/cfg/datasets/Argoverse.yaml +7 -6
  15. ultralytics/cfg/datasets/DOTAv1.5.yaml +1 -1
  16. ultralytics/cfg/datasets/DOTAv1.yaml +1 -1
  17. ultralytics/cfg/datasets/ImageNet.yaml +1 -1
  18. ultralytics/cfg/datasets/VOC.yaml +15 -16
  19. ultralytics/cfg/datasets/african-wildlife.yaml +1 -1
  20. ultralytics/cfg/datasets/coco-pose.yaml +21 -0
  21. ultralytics/cfg/datasets/coco128-seg.yaml +1 -1
  22. ultralytics/cfg/datasets/coco8-pose.yaml +21 -0
  23. ultralytics/cfg/datasets/dog-pose.yaml +28 -0
  24. ultralytics/cfg/datasets/dota8-multispectral.yaml +1 -1
  25. ultralytics/cfg/datasets/dota8.yaml +2 -2
  26. ultralytics/cfg/datasets/hand-keypoints.yaml +26 -2
  27. ultralytics/cfg/datasets/kitti.yaml +27 -0
  28. ultralytics/cfg/datasets/lvis.yaml +5 -5
  29. ultralytics/cfg/datasets/open-images-v7.yaml +1 -1
  30. ultralytics/cfg/datasets/tiger-pose.yaml +16 -0
  31. ultralytics/cfg/datasets/xView.yaml +16 -16
  32. ultralytics/cfg/default.yaml +1 -1
  33. ultralytics/cfg/models/11/yolo11-pose.yaml +1 -1
  34. ultralytics/cfg/models/11/yoloe-11-seg.yaml +2 -2
  35. ultralytics/cfg/models/11/yoloe-11.yaml +2 -2
  36. ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +1 -1
  37. ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +1 -1
  38. ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +1 -1
  39. ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +1 -1
  40. ultralytics/cfg/models/v10/yolov10b.yaml +2 -2
  41. ultralytics/cfg/models/v10/yolov10l.yaml +2 -2
  42. ultralytics/cfg/models/v10/yolov10m.yaml +2 -2
  43. ultralytics/cfg/models/v10/yolov10n.yaml +2 -2
  44. ultralytics/cfg/models/v10/yolov10s.yaml +2 -2
  45. ultralytics/cfg/models/v10/yolov10x.yaml +2 -2
  46. ultralytics/cfg/models/v3/yolov3-tiny.yaml +1 -1
  47. ultralytics/cfg/models/v6/yolov6.yaml +1 -1
  48. ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +9 -6
  49. ultralytics/cfg/models/v8/yoloe-v8.yaml +9 -6
  50. ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +1 -1
  51. ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +1 -1
  52. ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +2 -2
  53. ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +2 -2
  54. ultralytics/cfg/models/v8/yolov8-ghost.yaml +2 -2
  55. ultralytics/cfg/models/v8/yolov8-obb.yaml +1 -1
  56. ultralytics/cfg/models/v8/yolov8-p2.yaml +1 -1
  57. ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +1 -1
  58. ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +1 -1
  59. ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +1 -1
  60. ultralytics/cfg/models/v8/yolov8-world.yaml +1 -1
  61. ultralytics/cfg/models/v8/yolov8-worldv2.yaml +6 -6
  62. ultralytics/cfg/models/v9/yolov9s.yaml +1 -1
  63. ultralytics/data/__init__.py +4 -4
  64. ultralytics/data/annotator.py +3 -4
  65. ultralytics/data/augment.py +285 -475
  66. ultralytics/data/base.py +18 -26
  67. ultralytics/data/build.py +147 -25
  68. ultralytics/data/converter.py +36 -46
  69. ultralytics/data/dataset.py +46 -74
  70. ultralytics/data/loaders.py +42 -49
  71. ultralytics/data/split.py +5 -6
  72. ultralytics/data/split_dota.py +8 -15
  73. ultralytics/data/utils.py +34 -43
  74. ultralytics/engine/exporter.py +319 -237
  75. ultralytics/engine/model.py +148 -188
  76. ultralytics/engine/predictor.py +29 -38
  77. ultralytics/engine/results.py +177 -311
  78. ultralytics/engine/trainer.py +83 -59
  79. ultralytics/engine/tuner.py +23 -34
  80. ultralytics/engine/validator.py +39 -22
  81. ultralytics/hub/__init__.py +16 -19
  82. ultralytics/hub/auth.py +6 -12
  83. ultralytics/hub/google/__init__.py +7 -10
  84. ultralytics/hub/session.py +15 -25
  85. ultralytics/hub/utils.py +5 -8
  86. ultralytics/models/__init__.py +1 -1
  87. ultralytics/models/fastsam/__init__.py +1 -1
  88. ultralytics/models/fastsam/model.py +8 -10
  89. ultralytics/models/fastsam/predict.py +17 -29
  90. ultralytics/models/fastsam/utils.py +1 -2
  91. ultralytics/models/fastsam/val.py +5 -7
  92. ultralytics/models/nas/__init__.py +1 -1
  93. ultralytics/models/nas/model.py +5 -8
  94. ultralytics/models/nas/predict.py +7 -9
  95. ultralytics/models/nas/val.py +1 -2
  96. ultralytics/models/rtdetr/__init__.py +1 -1
  97. ultralytics/models/rtdetr/model.py +5 -8
  98. ultralytics/models/rtdetr/predict.py +15 -19
  99. ultralytics/models/rtdetr/train.py +10 -13
  100. ultralytics/models/rtdetr/val.py +21 -23
  101. ultralytics/models/sam/__init__.py +15 -2
  102. ultralytics/models/sam/amg.py +14 -20
  103. ultralytics/models/sam/build.py +26 -19
  104. ultralytics/models/sam/build_sam3.py +377 -0
  105. ultralytics/models/sam/model.py +29 -32
  106. ultralytics/models/sam/modules/blocks.py +83 -144
  107. ultralytics/models/sam/modules/decoders.py +19 -37
  108. ultralytics/models/sam/modules/encoders.py +44 -101
  109. ultralytics/models/sam/modules/memory_attention.py +16 -30
  110. ultralytics/models/sam/modules/sam.py +200 -73
  111. ultralytics/models/sam/modules/tiny_encoder.py +64 -83
  112. ultralytics/models/sam/modules/transformer.py +18 -28
  113. ultralytics/models/sam/modules/utils.py +174 -50
  114. ultralytics/models/sam/predict.py +2248 -350
  115. ultralytics/models/sam/sam3/__init__.py +3 -0
  116. ultralytics/models/sam/sam3/decoder.py +546 -0
  117. ultralytics/models/sam/sam3/encoder.py +529 -0
  118. ultralytics/models/sam/sam3/geometry_encoders.py +415 -0
  119. ultralytics/models/sam/sam3/maskformer_segmentation.py +286 -0
  120. ultralytics/models/sam/sam3/model_misc.py +199 -0
  121. ultralytics/models/sam/sam3/necks.py +129 -0
  122. ultralytics/models/sam/sam3/sam3_image.py +339 -0
  123. ultralytics/models/sam/sam3/text_encoder_ve.py +307 -0
  124. ultralytics/models/sam/sam3/vitdet.py +547 -0
  125. ultralytics/models/sam/sam3/vl_combiner.py +160 -0
  126. ultralytics/models/utils/loss.py +14 -26
  127. ultralytics/models/utils/ops.py +13 -17
  128. ultralytics/models/yolo/__init__.py +1 -1
  129. ultralytics/models/yolo/classify/predict.py +9 -12
  130. ultralytics/models/yolo/classify/train.py +11 -32
  131. ultralytics/models/yolo/classify/val.py +29 -28
  132. ultralytics/models/yolo/detect/predict.py +7 -10
  133. ultralytics/models/yolo/detect/train.py +11 -20
  134. ultralytics/models/yolo/detect/val.py +70 -58
  135. ultralytics/models/yolo/model.py +36 -53
  136. ultralytics/models/yolo/obb/predict.py +5 -14
  137. ultralytics/models/yolo/obb/train.py +11 -14
  138. ultralytics/models/yolo/obb/val.py +39 -36
  139. ultralytics/models/yolo/pose/__init__.py +1 -1
  140. ultralytics/models/yolo/pose/predict.py +6 -21
  141. ultralytics/models/yolo/pose/train.py +10 -15
  142. ultralytics/models/yolo/pose/val.py +38 -57
  143. ultralytics/models/yolo/segment/predict.py +14 -18
  144. ultralytics/models/yolo/segment/train.py +3 -6
  145. ultralytics/models/yolo/segment/val.py +93 -45
  146. ultralytics/models/yolo/world/train.py +8 -14
  147. ultralytics/models/yolo/world/train_world.py +11 -34
  148. ultralytics/models/yolo/yoloe/__init__.py +7 -7
  149. ultralytics/models/yolo/yoloe/predict.py +16 -23
  150. ultralytics/models/yolo/yoloe/train.py +30 -43
  151. ultralytics/models/yolo/yoloe/train_seg.py +5 -10
  152. ultralytics/models/yolo/yoloe/val.py +15 -20
  153. ultralytics/nn/__init__.py +7 -7
  154. ultralytics/nn/autobackend.py +145 -77
  155. ultralytics/nn/modules/__init__.py +60 -60
  156. ultralytics/nn/modules/activation.py +4 -6
  157. ultralytics/nn/modules/block.py +132 -216
  158. ultralytics/nn/modules/conv.py +52 -97
  159. ultralytics/nn/modules/head.py +50 -103
  160. ultralytics/nn/modules/transformer.py +76 -88
  161. ultralytics/nn/modules/utils.py +16 -21
  162. ultralytics/nn/tasks.py +94 -154
  163. ultralytics/nn/text_model.py +40 -67
  164. ultralytics/solutions/__init__.py +12 -12
  165. ultralytics/solutions/ai_gym.py +11 -17
  166. ultralytics/solutions/analytics.py +15 -16
  167. ultralytics/solutions/config.py +5 -6
  168. ultralytics/solutions/distance_calculation.py +10 -13
  169. ultralytics/solutions/heatmap.py +7 -13
  170. ultralytics/solutions/instance_segmentation.py +5 -8
  171. ultralytics/solutions/object_blurrer.py +7 -10
  172. ultralytics/solutions/object_counter.py +12 -19
  173. ultralytics/solutions/object_cropper.py +8 -14
  174. ultralytics/solutions/parking_management.py +33 -31
  175. ultralytics/solutions/queue_management.py +10 -12
  176. ultralytics/solutions/region_counter.py +9 -12
  177. ultralytics/solutions/security_alarm.py +15 -20
  178. ultralytics/solutions/similarity_search.py +10 -15
  179. ultralytics/solutions/solutions.py +75 -74
  180. ultralytics/solutions/speed_estimation.py +7 -10
  181. ultralytics/solutions/streamlit_inference.py +2 -4
  182. ultralytics/solutions/templates/similarity-search.html +7 -18
  183. ultralytics/solutions/trackzone.py +7 -10
  184. ultralytics/solutions/vision_eye.py +5 -8
  185. ultralytics/trackers/__init__.py +1 -1
  186. ultralytics/trackers/basetrack.py +3 -5
  187. ultralytics/trackers/bot_sort.py +10 -27
  188. ultralytics/trackers/byte_tracker.py +14 -30
  189. ultralytics/trackers/track.py +3 -6
  190. ultralytics/trackers/utils/gmc.py +11 -22
  191. ultralytics/trackers/utils/kalman_filter.py +37 -48
  192. ultralytics/trackers/utils/matching.py +12 -15
  193. ultralytics/utils/__init__.py +116 -116
  194. ultralytics/utils/autobatch.py +2 -4
  195. ultralytics/utils/autodevice.py +17 -18
  196. ultralytics/utils/benchmarks.py +32 -46
  197. ultralytics/utils/callbacks/base.py +8 -10
  198. ultralytics/utils/callbacks/clearml.py +5 -13
  199. ultralytics/utils/callbacks/comet.py +32 -46
  200. ultralytics/utils/callbacks/dvc.py +13 -18
  201. ultralytics/utils/callbacks/mlflow.py +4 -5
  202. ultralytics/utils/callbacks/neptune.py +7 -15
  203. ultralytics/utils/callbacks/platform.py +314 -38
  204. ultralytics/utils/callbacks/raytune.py +3 -4
  205. ultralytics/utils/callbacks/tensorboard.py +23 -31
  206. ultralytics/utils/callbacks/wb.py +10 -13
  207. ultralytics/utils/checks.py +99 -76
  208. ultralytics/utils/cpu.py +3 -8
  209. ultralytics/utils/dist.py +8 -12
  210. ultralytics/utils/downloads.py +20 -30
  211. ultralytics/utils/errors.py +6 -14
  212. ultralytics/utils/events.py +2 -4
  213. ultralytics/utils/export/__init__.py +4 -236
  214. ultralytics/utils/export/engine.py +237 -0
  215. ultralytics/utils/export/imx.py +91 -55
  216. ultralytics/utils/export/tensorflow.py +231 -0
  217. ultralytics/utils/files.py +24 -28
  218. ultralytics/utils/git.py +9 -11
  219. ultralytics/utils/instance.py +30 -51
  220. ultralytics/utils/logger.py +212 -114
  221. ultralytics/utils/loss.py +14 -22
  222. ultralytics/utils/metrics.py +126 -155
  223. ultralytics/utils/nms.py +13 -16
  224. ultralytics/utils/ops.py +107 -165
  225. ultralytics/utils/patches.py +33 -21
  226. ultralytics/utils/plotting.py +72 -80
  227. ultralytics/utils/tal.py +25 -39
  228. ultralytics/utils/torch_utils.py +52 -78
  229. ultralytics/utils/tqdm.py +20 -20
  230. ultralytics/utils/triton.py +13 -19
  231. ultralytics/utils/tuner.py +17 -5
  232. dgenerate_ultralytics_headless-8.3.214.dist-info/RECORD +0 -283
  233. {dgenerate_ultralytics_headless-8.3.214.dist-info → dgenerate_ultralytics_headless-8.3.248.dist-info}/WHEEL +0 -0
  234. {dgenerate_ultralytics_headless-8.3.214.dist-info → dgenerate_ultralytics_headless-8.3.248.dist-info}/entry_points.txt +0 -0
  235. {dgenerate_ultralytics_headless-8.3.214.dist-info → dgenerate_ultralytics_headless-8.3.248.dist-info}/licenses/LICENSE +0 -0
  236. {dgenerate_ultralytics_headless-8.3.214.dist-info → dgenerate_ultralytics_headless-8.3.248.dist-info}/top_level.txt +0 -0
@@ -30,6 +30,7 @@ Usage - formats:
30
30
  yolo11n_ncnn_model # NCNN
31
31
  yolo11n_imx_model # Sony IMX
32
32
  yolo11n_rknn_model # Rockchip RKNN
33
+ yolo11n.pte # PyTorch Executorch
33
34
  """
34
35
 
35
36
  from __future__ import annotations
@@ -54,8 +55,8 @@ from ultralytics.utils.files import increment_path
54
55
  from ultralytics.utils.torch_utils import attempt_compile, select_device, smart_inference_mode
55
56
 
56
57
  STREAM_WARNING = """
57
- inference results will accumulate in RAM unless `stream=True` is passed, causing potential out-of-memory
58
- errors for large sources or long-running streams and videos. See https://docs.ultralytics.com/modes/predict/ for help.
58
+ Inference results will accumulate in RAM unless `stream=True` is passed, which can cause out-of-memory errors for large
59
+ sources or long-running streams and videos. See https://docs.ultralytics.com/modes/predict/ for help.
59
60
 
60
61
  Example:
61
62
  results = model(source=..., stream=True) # generator of Results objects
@@ -67,11 +68,10 @@ Example:
67
68
 
68
69
 
69
70
  class BasePredictor:
70
- """
71
- A base class for creating predictors.
71
+ """A base class for creating predictors.
72
72
 
73
- This class provides the foundation for prediction functionality, handling model setup, inference,
74
- and result processing across various input sources.
73
+ This class provides the foundation for prediction functionality, handling model setup, inference, and result
74
+ processing across various input sources.
75
75
 
76
76
  Attributes:
77
77
  args (SimpleNamespace): Configuration for the predictor.
@@ -114,8 +114,7 @@ class BasePredictor:
114
114
  overrides: dict[str, Any] | None = None,
115
115
  _callbacks: dict[str, list[callable]] | None = None,
116
116
  ):
117
- """
118
- Initialize the BasePredictor class.
117
+ """Initialize the BasePredictor class.
119
118
 
120
119
  Args:
121
120
  cfg (str | dict): Path to a configuration file or a configuration dictionary.
@@ -150,8 +149,7 @@ class BasePredictor:
150
149
  callbacks.add_integration_callbacks(self)
151
150
 
152
151
  def preprocess(self, im: torch.Tensor | list[np.ndarray]) -> torch.Tensor:
153
- """
154
- Prepare input image before inference.
152
+ """Prepare input image before inference.
155
153
 
156
154
  Args:
157
155
  im (torch.Tensor | list[np.ndarray]): Images of shape (N, 3, H, W) for tensor, [(H, W, 3) x N] for list.
@@ -184,8 +182,7 @@ class BasePredictor:
184
182
  return self.model(im, augment=self.args.augment, visualize=visualize, embed=self.args.embed, *args, **kwargs)
185
183
 
186
184
  def pre_transform(self, im: list[np.ndarray]) -> list[np.ndarray]:
187
- """
188
- Pre-transform input image before inference.
185
+ """Pre-transform input image before inference.
189
186
 
190
187
  Args:
191
188
  im (list[np.ndarray]): List of images with shape [(H, W, 3) x N].
@@ -208,8 +205,7 @@ class BasePredictor:
208
205
  return preds
209
206
 
210
207
  def __call__(self, source=None, model=None, stream: bool = False, *args, **kwargs):
211
- """
212
- Perform inference on an image or stream.
208
+ """Perform inference on an image or stream.
213
209
 
214
210
  Args:
215
211
  source (str | Path | list[str] | list[Path] | list[np.ndarray] | np.ndarray | torch.Tensor, optional):
@@ -226,14 +222,13 @@ class BasePredictor:
226
222
  if stream:
227
223
  return self.stream_inference(source, model, *args, **kwargs)
228
224
  else:
229
- return list(self.stream_inference(source, model, *args, **kwargs)) # merge list of Result into one
225
+ return list(self.stream_inference(source, model, *args, **kwargs)) # merge list of Results into one
230
226
 
231
227
  def predict_cli(self, source=None, model=None):
232
- """
233
- Method used for Command Line Interface (CLI) prediction.
228
+ """Method used for Command Line Interface (CLI) prediction.
234
229
 
235
- This function is designed to run predictions using the CLI. It sets up the source and model, then processes
236
- the inputs in a streaming manner. This method ensures that no outputs accumulate in memory by consuming the
230
+ This function is designed to run predictions using the CLI. It sets up the source and model, then processes the
231
+ inputs in a streaming manner. This method ensures that no outputs accumulate in memory by consuming the
237
232
  generator without storing results.
238
233
 
239
234
  Args:
@@ -241,7 +236,7 @@ class BasePredictor:
241
236
  Source for inference.
242
237
  model (str | Path | torch.nn.Module, optional): Model for inference.
243
238
 
244
- Note:
239
+ Notes:
245
240
  Do not modify this function or remove the generator. The generator ensures that no outputs are
246
241
  accumulated in memory, which is critical for preventing memory issues during long-running predictions.
247
242
  """
@@ -249,15 +244,15 @@ class BasePredictor:
249
244
  for _ in gen: # sourcery skip: remove-empty-nested-block, noqa
250
245
  pass
251
246
 
252
- def setup_source(self, source):
253
- """
254
- Set up source and inference mode.
247
+ def setup_source(self, source, stride: int | None = None):
248
+ """Set up source and inference mode.
255
249
 
256
250
  Args:
257
- source (str | Path | list[str] | list[Path] | list[np.ndarray] | np.ndarray | torch.Tensor):
258
- Source for inference.
251
+ source (str | Path | list[str] | list[Path] | list[np.ndarray] | np.ndarray | torch.Tensor): Source for
252
+ inference.
253
+ stride (int, optional): Model stride for image size checking.
259
254
  """
260
- self.imgsz = check_imgsz(self.args.imgsz, stride=self.model.stride, min_dim=2) # check image size
255
+ self.imgsz = check_imgsz(self.args.imgsz, stride=stride or self.model.stride, min_dim=2) # check image size
261
256
  self.dataset = load_inference_source(
262
257
  source=source,
263
258
  batch=self.args.batch,
@@ -266,13 +261,12 @@ class BasePredictor:
266
261
  channels=getattr(self.model, "ch", 3),
267
262
  )
268
263
  self.source_type = self.dataset.source_type
269
- long_sequence = (
264
+ if (
270
265
  self.source_type.stream
271
266
  or self.source_type.screenshot
272
267
  or len(self.dataset) > 1000 # many images
273
268
  or any(getattr(self.dataset, "video_flag", [False]))
274
- )
275
- if long_sequence:
269
+ ): # long sequence
276
270
  import torchvision # noqa (import here triggers torchvision NMS use in nms.py)
277
271
 
278
272
  if not getattr(self, "stream", True): # videos
@@ -281,8 +275,7 @@ class BasePredictor:
281
275
 
282
276
  @smart_inference_mode()
283
277
  def stream_inference(self, source=None, model=None, *args, **kwargs):
284
- """
285
- Stream real-time inference on camera feed and save results to file.
278
+ """Stream real-time inference on camera feed and save results to file.
286
279
 
287
280
  Args:
288
281
  source (str | Path | list[str] | list[Path] | list[np.ndarray] | np.ndarray | torch.Tensor, optional):
@@ -323,7 +316,8 @@ class BasePredictor:
323
316
  ops.Profile(device=self.device),
324
317
  )
325
318
  self.run_callbacks("on_predict_start")
326
- for self.batch in self.dataset:
319
+ for batch in self.dataset:
320
+ self.batch = batch
327
321
  self.run_callbacks("on_predict_batch_start")
328
322
  paths, im0s, s = self.batch
329
323
 
@@ -387,8 +381,7 @@ class BasePredictor:
387
381
  self.run_callbacks("on_predict_end")
388
382
 
389
383
  def setup_model(self, model, verbose: bool = True):
390
- """
391
- Initialize YOLO model with given parameters and set it to evaluation mode.
384
+ """Initialize YOLO model with given parameters and set it to evaluation mode.
392
385
 
393
386
  Args:
394
387
  model (str | Path | torch.nn.Module, optional): Model to load or use.
@@ -412,8 +405,7 @@ class BasePredictor:
412
405
  self.model = attempt_compile(self.model, device=self.device, mode=self.args.compile)
413
406
 
414
407
  def write_results(self, i: int, p: Path, im: torch.Tensor, s: list[str]) -> str:
415
- """
416
- Write inference results to a file or directory.
408
+ """Write inference results to a file or directory.
417
409
 
418
410
  Args:
419
411
  i (int): Index of the current image in the batch.
@@ -463,8 +455,7 @@ class BasePredictor:
463
455
  return string
464
456
 
465
457
  def save_predicted_images(self, save_path: Path, frame: int = 0):
466
- """
467
- Save video predictions as mp4 or images as jpg at specified path.
458
+ """Save video predictions as mp4 or images as jpg at specified path.
468
459
 
469
460
  Args:
470
461
  save_path (Path): Path to save the results.