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.
- {ultralytics-8.0.73/ultralytics.egg-info → ultralytics-8.0.74}/PKG-INFO +1 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/__init__.py +1 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/session.py +15 -11
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/modules.py +1 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/augment.py +10 -10
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/base.py +2 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/model.py +3 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/hub.py +1 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/ops.py +4 -2
- {ultralytics-8.0.73 → ultralytics-8.0.74/ultralytics.egg-info}/PKG-INFO +1 -1
- {ultralytics-8.0.73 → ultralytics-8.0.74}/CONTRIBUTING.md +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/LICENSE +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/MANIFEST.in +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/README.md +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/README.zh-CN.md +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/requirements.txt +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/setup.cfg +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/setup.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/tests/test_cli.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/tests/test_engine.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/tests/test_python.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/Objects365.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/VOC.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco128.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/coco8.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/datasets/xView.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/autoshape.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/cfg/botsort.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/cfg/bytetrack.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/track.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/basetrack.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/bot_sort.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/trackers/byte_tracker.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/gmc.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/kalman_filter.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/tracker/utils/matching.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/cfg/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/cfg/default.yaml +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/build.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/stream_loaders.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/v5augmentations.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/v5loader.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataset.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataset_wrappers.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/utils.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/exporter.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/predictor.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/results.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/trainer.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/engine/validator.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/autobatch.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/benchmarks.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/base.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/comet.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/checks.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/dist.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/downloads.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/files.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/instance.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/loss.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/metrics.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/plotting.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/tal.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/utils/torch_utils.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/predict.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/train.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/classify/val.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/predict.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/train.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/detect/val.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/predict.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/train.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/pose/val.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/__init__.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/predict.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/train.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/v8/segment/val.py +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics.egg-info/top_level.txt +0 -0
|
@@ -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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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,
|
|
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 =
|
|
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]
|
|
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
|
-
|
|
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(
|
|
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)]
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/stream_loaders.py
RENAMED
|
File without changes
|
{ultralytics-8.0.73 → ultralytics-8.0.74}/ultralytics/yolo/data/dataloaders/v5augmentations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|