ultralytics 8.0.73__tar.gz → 8.0.74__tar.gz

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.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (128) hide show
  1. {ultralytics-8.0.73/ultralytics.egg-info → ultralytics-8.0.74}/PKG-INFO +1 -1
  2. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/__init__.py +1 -1
  3. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/session.py +15 -11
  4. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/modules.py +1 -1
  5. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/augment.py +10 -10
  6. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/base.py +2 -1
  7. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/model.py +3 -1
  8. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/hub.py +1 -1
  9. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/ops.py +4 -2
  10. {ultralytics-8.0.73 → ultralytics-8.0.74/ultralytics.egg-info}/PKG-INFO +1 -1
  11. {ultralytics-8.0.73 → ultralytics-8.0.74}/CONTRIBUTING.md +0 -0
  12. {ultralytics-8.0.73 → ultralytics-8.0.74}/LICENSE +0 -0
  13. {ultralytics-8.0.73 → ultralytics-8.0.74}/MANIFEST.in +0 -0
  14. {ultralytics-8.0.73 → ultralytics-8.0.74}/README.md +0 -0
  15. {ultralytics-8.0.73 → ultralytics-8.0.74}/README.zh-CN.md +0 -0
  16. {ultralytics-8.0.73 → ultralytics-8.0.74}/requirements.txt +0 -0
  17. {ultralytics-8.0.73 → ultralytics-8.0.74}/setup.cfg +0 -0
  18. {ultralytics-8.0.73 → ultralytics-8.0.74}/setup.py +0 -0
  19. {ultralytics-8.0.73 → ultralytics-8.0.74}/tests/test_cli.py +0 -0
  20. {ultralytics-8.0.73 → ultralytics-8.0.74}/tests/test_engine.py +0 -0
  21. {ultralytics-8.0.73 → ultralytics-8.0.74}/tests/test_python.py +0 -0
  22. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/assets/bus.jpg +0 -0
  23. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/assets/zidane.jpg +0 -0
  24. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/Argoverse.yaml +0 -0
  25. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/GlobalWheat2020.yaml +0 -0
  26. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/ImageNet.yaml +0 -0
  27. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/Objects365.yaml +0 -0
  28. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/SKU-110K.yaml +0 -0
  29. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/VOC.yaml +0 -0
  30. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/VisDrone.yaml +0 -0
  31. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco-pose.yaml +0 -0
  32. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco.yaml +0 -0
  33. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco128-seg.yaml +0 -0
  34. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco128.yaml +0 -0
  35. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco8-pose.yaml +0 -0
  36. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco8-seg.yaml +0 -0
  37. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco8.yaml +0 -0
  38. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/xView.yaml +0 -0
  39. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/__init__.py +0 -0
  40. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/auth.py +0 -0
  41. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/utils.py +0 -0
  42. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v3/yolov3-spp.yaml +0 -0
  43. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v3/yolov3-tiny.yaml +0 -0
  44. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v3/yolov3.yaml +0 -0
  45. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v5/yolov5-p6.yaml +0 -0
  46. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v5/yolov5.yaml +0 -0
  47. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-cls.yaml +0 -0
  48. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-p2.yaml +0 -0
  49. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-p6.yaml +0 -0
  50. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-pose-p6.yaml +0 -0
  51. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-pose.yaml +0 -0
  52. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-seg.yaml +0 -0
  53. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8.yaml +0 -0
  54. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/__init__.py +0 -0
  55. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/autobackend.py +0 -0
  56. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/autoshape.py +0 -0
  57. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/tasks.py +0 -0
  58. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/__init__.py +0 -0
  59. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/cfg/botsort.yaml +0 -0
  60. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/cfg/bytetrack.yaml +0 -0
  61. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/track.py +0 -0
  62. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/__init__.py +0 -0
  63. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/basetrack.py +0 -0
  64. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/bot_sort.py +0 -0
  65. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/byte_tracker.py +0 -0
  66. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/__init__.py +0 -0
  67. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/gmc.py +0 -0
  68. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/kalman_filter.py +0 -0
  69. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/matching.py +0 -0
  70. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/__init__.py +0 -0
  71. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/cfg/__init__.py +0 -0
  72. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/cfg/default.yaml +0 -0
  73. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/__init__.py +0 -0
  74. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/build.py +0 -0
  75. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/__init__.py +0 -0
  76. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/stream_loaders.py +0 -0
  77. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/v5augmentations.py +0 -0
  78. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/v5loader.py +0 -0
  79. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataset.py +0 -0
  80. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataset_wrappers.py +0 -0
  81. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/utils.py +0 -0
  82. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/__init__.py +0 -0
  83. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/exporter.py +0 -0
  84. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/predictor.py +0 -0
  85. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/results.py +0 -0
  86. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/trainer.py +0 -0
  87. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/validator.py +0 -0
  88. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/__init__.py +0 -0
  89. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/autobatch.py +0 -0
  90. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/benchmarks.py +0 -0
  91. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/__init__.py +0 -0
  92. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/base.py +0 -0
  93. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/clearml.py +0 -0
  94. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/comet.py +0 -0
  95. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/mlflow.py +0 -0
  96. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/tensorboard.py +0 -0
  97. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/checks.py +0 -0
  98. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/dist.py +0 -0
  99. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/downloads.py +0 -0
  100. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/files.py +0 -0
  101. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/instance.py +0 -0
  102. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/loss.py +0 -0
  103. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/metrics.py +0 -0
  104. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/plotting.py +0 -0
  105. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/tal.py +0 -0
  106. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/torch_utils.py +0 -0
  107. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/__init__.py +0 -0
  108. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/__init__.py +0 -0
  109. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/predict.py +0 -0
  110. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/train.py +0 -0
  111. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/val.py +0 -0
  112. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/__init__.py +0 -0
  113. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/predict.py +0 -0
  114. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/train.py +0 -0
  115. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/val.py +0 -0
  116. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/__init__.py +0 -0
  117. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/predict.py +0 -0
  118. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/train.py +0 -0
  119. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/val.py +0 -0
  120. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/__init__.py +0 -0
  121. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/predict.py +0 -0
  122. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/train.py +0 -0
  123. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/val.py +0 -0
  124. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/SOURCES.txt +0 -0
  125. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/dependency_links.txt +0 -0
  126. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/entry_points.txt +0 -0
  127. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/requires.txt +0 -0
  128. {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.0.73
3
+ Version: 8.0.74
4
4
  Summary: Ultralytics YOLOv8
5
5
  Home-page: https://github.com/ultralytics/ultralytics
6
6
  Author: Ultralytics
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, GPL-3.0 license
2
2
 
3
- __version__ = '8.0.73'
3
+ __version__ = '8.0.74'
4
4
 
5
5
  from ultralytics.hub import start
6
6
  from ultralytics.yolo.engine.model import YOLO
@@ -112,17 +112,21 @@ class HUBTrainingSession:
112
112
  raise ValueError('Dataset may still be processing. Please wait a minute and try again.') # RF fix
113
113
  self.model_id = data['id']
114
114
 
115
- self.train_args = {
116
- 'batch': data['batch' if ('batch' in data) else 'batch_size'], # TODO: deprecate 'batch_size' in 3Q23
117
- 'epochs': data['epochs'],
118
- 'imgsz': data['imgsz'],
119
- 'patience': data['patience'],
120
- 'device': data['device'],
121
- 'cache': data['cache'],
122
- 'data': data['data']}
123
-
124
- self.model_file = data.get('cfg', data['weights'])
125
- self.model_file = checks.check_yolov5u_filename(self.model_file, verbose=False) # YOLOv5->YOLOv5u
115
+ if data['status'] == 'new': # new model to start training
116
+ self.train_args = {
117
+ # TODO: deprecate 'batch_size' key for 'batch' in 3Q23
118
+ 'batch': data['batch' if ('batch' in data) else 'batch_size'],
119
+ 'epochs': data['epochs'],
120
+ 'imgsz': data['imgsz'],
121
+ 'patience': data['patience'],
122
+ 'device': data['device'],
123
+ 'cache': data['cache'],
124
+ 'data': data['data']}
125
+ self.model_file = data.get('cfg', data['weights'])
126
+ self.model_file = checks.check_yolov5u_filename(self.model_file, verbose=False) # YOLOv5->YOLOv5u
127
+ elif data['status'] == 'training': # existing model to resume training
128
+ self.train_args = {'data': data['data'], 'resume': True}
129
+ self.model_file = data['resume']
126
130
 
127
131
  return data
128
132
  except requests.exceptions.ConnectionError as e:
@@ -374,7 +374,7 @@ class Ensemble(nn.ModuleList):
374
374
  y = [module(x, augment, profile, visualize)[0] for module in self]
375
375
  # y = torch.stack(y).max(0)[0] # max ensemble
376
376
  # y = torch.stack(y).mean(0) # mean ensemble
377
- y = torch.cat(y, 1) # nms ensemble
377
+ y = torch.cat(y, 2) # nms ensemble, y shape(B, HW, C)
378
378
  return y, None # inference, train output
379
379
 
380
380
 
@@ -127,7 +127,7 @@ class Mosaic(BaseMixTransform):
127
127
  s = self.imgsz
128
128
  yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.border) # mosaic center x, y
129
129
  for i in range(4):
130
- labels_patch = (labels if i == 0 else labels['mix_labels'][i - 1]).copy()
130
+ labels_patch = labels if i == 0 else labels['mix_labels'][i - 1]
131
131
  # Load image
132
132
  img = labels_patch['img']
133
133
  h, w = labels_patch.pop('resized_shape')
@@ -223,18 +223,18 @@ class RandomPerspective:
223
223
 
224
224
  def affine_transform(self, img, border):
225
225
  # Center
226
- C = np.eye(3)
226
+ C = np.eye(3, dtype=np.float32)
227
227
 
228
228
  C[0, 2] = -img.shape[1] / 2 # x translation (pixels)
229
229
  C[1, 2] = -img.shape[0] / 2 # y translation (pixels)
230
230
 
231
231
  # Perspective
232
- P = np.eye(3)
232
+ P = np.eye(3, dtype=np.float32)
233
233
  P[2, 0] = random.uniform(-self.perspective, self.perspective) # x perspective (about y)
234
234
  P[2, 1] = random.uniform(-self.perspective, self.perspective) # y perspective (about x)
235
235
 
236
236
  # Rotation and Scale
237
- R = np.eye(3)
237
+ R = np.eye(3, dtype=np.float32)
238
238
  a = random.uniform(-self.degrees, self.degrees)
239
239
  # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations
240
240
  s = random.uniform(1 - self.scale, 1 + self.scale)
@@ -242,12 +242,12 @@ class RandomPerspective:
242
242
  R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s)
243
243
 
244
244
  # Shear
245
- S = np.eye(3)
245
+ S = np.eye(3, dtype=np.float32)
246
246
  S[0, 1] = math.tan(random.uniform(-self.shear, self.shear) * math.pi / 180) # x shear (deg)
247
247
  S[1, 0] = math.tan(random.uniform(-self.shear, self.shear) * math.pi / 180) # y shear (deg)
248
248
 
249
249
  # Translation
250
- T = np.eye(3)
250
+ T = np.eye(3, dtype=np.float32)
251
251
  T[0, 2] = random.uniform(0.5 - self.translate, 0.5 + self.translate) * self.size[0] # x translation (pixels)
252
252
  T[1, 2] = random.uniform(0.5 - self.translate, 0.5 + self.translate) * self.size[1] # y translation (pixels)
253
253
 
@@ -274,7 +274,7 @@ class RandomPerspective:
274
274
  if n == 0:
275
275
  return bboxes
276
276
 
277
- xy = np.ones((n * 4, 3))
277
+ xy = np.ones((n * 4, 3), dtype=bboxes.dtype)
278
278
  xy[:, :2] = bboxes[:, [0, 1, 2, 3, 0, 3, 2, 1]].reshape(n * 4, 2) # x1y1, x2y2, x1y2, x2y1
279
279
  xy = xy @ M.T # transform
280
280
  xy = (xy[:, :2] / xy[:, 2:3] if self.perspective else xy[:, :2]).reshape(n, 8) # perspective rescale or affine
@@ -282,7 +282,7 @@ class RandomPerspective:
282
282
  # create new boxes
283
283
  x = xy[:, [0, 2, 4, 6]]
284
284
  y = xy[:, [1, 3, 5, 7]]
285
- return np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T
285
+ return np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1)), dtype=bboxes.dtype).reshape(4, n).T
286
286
 
287
287
  def apply_segments(self, segments, M):
288
288
  """apply affine to segments and generate new bboxes from segments.
@@ -298,7 +298,7 @@ class RandomPerspective:
298
298
  if n == 0:
299
299
  return [], segments
300
300
 
301
- xy = np.ones((n * num, 3))
301
+ xy = np.ones((n * num, 3), dtype=segments.dtype)
302
302
  segments = segments.reshape(-1, 2)
303
303
  xy[:, :2] = segments
304
304
  xy = xy @ M.T # transform
@@ -319,7 +319,7 @@ class RandomPerspective:
319
319
  n, nkpt = keypoints.shape[:2]
320
320
  if n == 0:
321
321
  return keypoints
322
- xy = np.ones((n * nkpt, 3))
322
+ xy = np.ones((n * nkpt, 3), dtype=keypoints.dtype)
323
323
  visible = keypoints[..., 2].reshape(n * nkpt, 1)
324
324
  xy[:, :2] = keypoints[..., :2].reshape(n * nkpt, 2)
325
325
  xy = xy @ M.T # transform
@@ -3,6 +3,7 @@
3
3
  import glob
4
4
  import math
5
5
  import os
6
+ from copy import deepcopy
6
7
  from multiprocessing.pool import ThreadPool
7
8
  from pathlib import Path
8
9
  from typing import Optional
@@ -177,7 +178,7 @@ class BaseDataset(Dataset):
177
178
  return self.transforms(self.get_label_info(index))
178
179
 
179
180
  def get_label_info(self, index):
180
- label = self.labels[index].copy()
181
+ label = deepcopy(self.labels[index]) # requires deepcopy() https://github.com/ultralytics/ultralytics/pull/1948
181
182
  label.pop('shape', None) # shape is for rect, remove it
182
183
  label['img'], label['ori_shape'], label['resized_shape'] = self.load_image(index)
183
184
  label['ratio_pad'] = (label['resized_shape'][0] / label['ori_shape'][0],
@@ -166,7 +166,9 @@ class YOLO:
166
166
  """
167
167
  Raises TypeError is model is not a PyTorch model
168
168
  """
169
- if not isinstance(self.model, nn.Module):
169
+ pt_str = isinstance(self.model, (str, Path)) and Path(self.model).suffix == '.pt'
170
+ pt_module = isinstance(self.model, nn.Module)
171
+ if not (pt_module or pt_str):
170
172
  raise TypeError(f"model='{self.model}' must be a *.pt PyTorch model, but is a different type. "
171
173
  f'PyTorch models can be used to train, val, predict and export, i.e. '
172
174
  f"'yolo export model=yolov8n.pt', but exported formats like ONNX, TensorRT etc. only "
@@ -40,7 +40,7 @@ def on_model_save(trainer):
40
40
  # Upload checkpoints with rate limiting
41
41
  is_best = trainer.best_fitness == trainer.fitness
42
42
  if time() - session.timers['ckpt'] > session.rate_limits['ckpt']:
43
- LOGGER.info(f'{PREFIX}Uploading checkpoint {session.model_id}')
43
+ LOGGER.info(f'{PREFIX}Uploading checkpoint https://hub.ultralytics.com/models/{session.model_id}')
44
44
  session.upload_model(trainer.epoch, trainer.last, is_best)
45
45
  session.timers['ckpt'] = time() # reset timer
46
46
 
@@ -81,7 +81,8 @@ def segment2box(segment, width=640, height=640):
81
81
  x, y = segment.T # segment xy
82
82
  inside = (x >= 0) & (y >= 0) & (x <= width) & (y <= height)
83
83
  x, y, = x[inside], y[inside]
84
- return np.array([x.min(), y.min(), x.max(), y.max()]) if any(x) else np.zeros(4) # xyxy
84
+ return np.array([x.min(), y.min(), x.max(), y.max()], dtype=segment.dtype) if any(x) else np.zeros(
85
+ 4, dtype=segment.dtype) # xyxy
85
86
 
86
87
 
87
88
  def scale_boxes(img1_shape, boxes, img0_shape, ratio_pad=None):
@@ -529,7 +530,8 @@ def resample_segments(segments, n=1000):
529
530
  s = np.concatenate((s, s[0:1, :]), axis=0)
530
531
  x = np.linspace(0, len(s) - 1, n)
531
532
  xp = np.arange(len(s))
532
- segments[i] = np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)]).reshape(2, -1).T # segment xy
533
+ segments[i] = np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)],
534
+ dtype=np.float32).reshape(2, -1).T # segment xy
533
535
  return segments
534
536
 
535
537
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.0.73
3
+ Version: 8.0.74
4
4
  Summary: Ultralytics YOLOv8
5
5
  Home-page: https://github.com/ultralytics/ultralytics
6
6
  Author: Ultralytics
File without changes
File without changes
File without changes
File without changes
File without changes