ultralytics 8.3.78__py3-none-any.whl → 8.3.79__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.
ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.78"
3
+ __version__ = "8.3.79"
4
4
 
5
5
  import os
6
6
 
@@ -58,15 +58,13 @@ def auto_annotate(
58
58
 
59
59
  for result in det_results:
60
60
  class_ids = result.boxes.cls.int().tolist() # noqa
61
- if len(class_ids):
61
+ if class_ids:
62
62
  boxes = result.boxes.xyxy # Boxes object for bbox outputs
63
63
  sam_results = sam_model(result.orig_img, bboxes=boxes, verbose=False, save=False, device=device)
64
64
  segments = sam_results[0].masks.xyn # noqa
65
65
 
66
66
  with open(f"{Path(output_dir) / Path(result.path).stem}.txt", "w") as f:
67
- for i in range(len(segments)):
68
- s = segments[i]
69
- if len(s) == 0:
70
- continue
71
- segment = map(str, segments[i].reshape(-1).tolist())
72
- f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")
67
+ for i, s in enumerate(segments):
68
+ if s.any():
69
+ segment = map(str, s.reshape(-1).tolist())
70
+ f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")
@@ -1364,17 +1364,26 @@ class RandomHSV:
1364
1364
  >>> hsv_augmenter(labels)
1365
1365
  >>> augmented_img = labels["img"]
1366
1366
  """
1367
- img = labels["img"]
1368
1367
  if self.hgain or self.sgain or self.vgain:
1369
- r = np.random.uniform(-1, 1, 3) * [self.hgain, self.sgain, self.vgain] + 1 # random gains
1370
- hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
1368
+ img = labels["img"]
1371
1369
  dtype = img.dtype # uint8
1372
1370
 
1371
+ # Original implementation (bug) from ultralytics<=8.3.78
1372
+ # r = np.random.uniform(-1, 1, 3) * [self.hgain, self.sgain, self.vgain] + 1 # random gains
1373
+ # x = np.arange(0, 256, dtype=r.dtype)
1374
+ # lut_hue = ((x * r[0]) % 180).astype(dtype)
1375
+ # lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
1376
+ # lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
1377
+
1378
+ # Fixed implementation in https://github.com/ultralytics/ultralytics/pull/19311
1379
+ r = np.random.uniform(-1, 1, 3) * (self.hgain, self.sgain, self.vgain) * (180, 255, 255) # random gains
1373
1380
  x = np.arange(0, 256, dtype=r.dtype)
1374
- lut_hue = ((x * r[0]) % 180).astype(dtype)
1375
- lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
1376
- lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
1381
+ lut_hue = ((x + r[0]) % 180).astype(dtype)
1382
+ lut_sat = np.clip(x + r[1], 0, 255).astype(dtype)
1383
+ lut_val = np.clip(x + r[2], 0, 255).astype(dtype)
1384
+ lut_sat[0] = 0 # prevent pure white changing color
1377
1385
 
1386
+ hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
1378
1387
  im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val)))
1379
1388
  cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed
1380
1389
  return labels
@@ -1484,7 +1493,7 @@ class LetterBox:
1484
1493
  Attributes:
1485
1494
  new_shape (tuple): Target shape (height, width) for resizing.
1486
1495
  auto (bool): Whether to use minimum rectangle.
1487
- scaleFill (bool): Whether to stretch the image to new_shape.
1496
+ scale_fill (bool): Whether to stretch the image to new_shape.
1488
1497
  scaleup (bool): Whether to allow scaling up. If False, only scale down.
1489
1498
  stride (int): Stride for rounding padding.
1490
1499
  center (bool): Whether to center the image or align to top-left.
@@ -1499,7 +1508,7 @@ class LetterBox:
1499
1508
  >>> updated_instances = result["instances"]
1500
1509
  """
1501
1510
 
1502
- def __init__(self, new_shape=(640, 640), auto=False, scaleFill=False, scaleup=True, center=True, stride=32):
1511
+ def __init__(self, new_shape=(640, 640), auto=False, scale_fill=False, scaleup=True, center=True, stride=32):
1503
1512
  """
1504
1513
  Initialize LetterBox object for resizing and padding images.
1505
1514
 
@@ -1509,7 +1518,7 @@ class LetterBox:
1509
1518
  Args:
1510
1519
  new_shape (Tuple[int, int]): Target size (height, width) for the resized image.
1511
1520
  auto (bool): If True, use minimum rectangle to resize. If False, use new_shape directly.
1512
- scaleFill (bool): If True, stretch the image to new_shape without padding.
1521
+ scale_fill (bool): If True, stretch the image to new_shape without padding.
1513
1522
  scaleup (bool): If True, allow scaling up. If False, only scale down.
1514
1523
  center (bool): If True, center the placed image. If False, place image in top-left corner.
1515
1524
  stride (int): Stride of the model (e.g., 32 for YOLOv5).
@@ -1517,17 +1526,17 @@ class LetterBox:
1517
1526
  Attributes:
1518
1527
  new_shape (Tuple[int, int]): Target size for the resized image.
1519
1528
  auto (bool): Flag for using minimum rectangle resizing.
1520
- scaleFill (bool): Flag for stretching image without padding.
1529
+ scale_fill (bool): Flag for stretching image without padding.
1521
1530
  scaleup (bool): Flag for allowing upscaling.
1522
1531
  stride (int): Stride value for ensuring image size is divisible by stride.
1523
1532
 
1524
1533
  Examples:
1525
- >>> letterbox = LetterBox(new_shape=(640, 640), auto=False, scaleFill=False, scaleup=True, stride=32)
1534
+ >>> letterbox = LetterBox(new_shape=(640, 640), auto=False, scale_fill=False, scaleup=True, stride=32)
1526
1535
  >>> resized_img = letterbox(original_img)
1527
1536
  """
1528
1537
  self.new_shape = new_shape
1529
1538
  self.auto = auto
1530
- self.scaleFill = scaleFill
1539
+ self.scale_fill = scale_fill
1531
1540
  self.scaleup = scaleup
1532
1541
  self.stride = stride
1533
1542
  self.center = center # Put the image in the middle or top-left
@@ -1573,7 +1582,7 @@ class LetterBox:
1573
1582
  dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding
1574
1583
  if self.auto: # minimum rectangle
1575
1584
  dw, dh = np.mod(dw, self.stride), np.mod(dh, self.stride) # wh padding
1576
- elif self.scaleFill: # stretch
1585
+ elif self.scale_fill: # stretch
1577
1586
  dw, dh = 0.0, 0.0
1578
1587
  new_unpad = (new_shape[1], new_shape[0])
1579
1588
  ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios
@@ -274,13 +274,13 @@ def convert_coco(
274
274
  # Create image dict
275
275
  images = {f"{x['id']:d}": x for x in data["images"]}
276
276
  # Create image-annotations dict
277
- imgToAnns = defaultdict(list)
277
+ annotations = defaultdict(list)
278
278
  for ann in data["annotations"]:
279
- imgToAnns[ann["image_id"]].append(ann)
279
+ annotations[ann["image_id"]].append(ann)
280
280
 
281
281
  image_txt = []
282
282
  # Write labels file
283
- for img_id, anns in TQDM(imgToAnns.items(), desc=f"Annotations {json_file}"):
283
+ for img_id, anns in TQDM(annotations.items(), desc=f"Annotations {json_file}"):
284
284
  img = images[f"{img_id:d}"]
285
285
  h, w = img["height"], img["width"]
286
286
  f = str(Path(img["coco_url"]).relative_to("http://images.cocodataset.org")) if lvis else img["file_name"]
@@ -170,6 +170,7 @@ def try_export(inner_func):
170
170
  def outer_func(*args, **kwargs):
171
171
  """Export a model."""
172
172
  prefix = inner_args["prefix"]
173
+ dt = 0.0
173
174
  try:
174
175
  with Profile() as dt:
175
176
  f, model = inner_func(*args, **kwargs)
@@ -567,6 +567,10 @@ class BaseTrainer:
567
567
  except Exception as e:
568
568
  raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e
569
569
  self.data = data
570
+ if self.args.single_cls:
571
+ LOGGER.info("Overriding class names with single class.")
572
+ self.data["names"] = {0: "item"}
573
+ self.data["nc"] = 1
570
574
  return data["train"], data.get("val") or data.get("test")
571
575
 
572
576
  def setup_model(self):
@@ -72,7 +72,7 @@ class RTDETRPredictor(BasePredictor):
72
72
  def pre_transform(self, im):
73
73
  """
74
74
  Pre-transforms the input images before feeding them into the model for inference. The input images are
75
- letterboxed to ensure a square aspect ratio and scale-filled. The size must be square(640) and scaleFilled.
75
+ letterboxed to ensure a square aspect ratio and scale-filled. The size must be square(640) and scale_filled.
76
76
 
77
77
  Args:
78
78
  im (list[np.ndarray] |torch.Tensor): Input images of shape (N,3,h,w) for tensor, [(h,w,3) x N] for list.
@@ -80,5 +80,5 @@ class RTDETRPredictor(BasePredictor):
80
80
  Returns:
81
81
  (list): List of pre-transformed images ready for model inference.
82
82
  """
83
- letterbox = LetterBox(self.imgsz, auto=False, scaleFill=True)
83
+ letterbox = LetterBox(self.imgsz, auto=False, scale_fill=True)
84
84
  return [letterbox(image=x) for x in im]
@@ -34,7 +34,7 @@ class RTDETRDataset(YOLODataset):
34
34
  hyp.mixup = hyp.mixup if self.augment and not self.rect else 0.0
35
35
  transforms = v8_transforms(self, self.imgsz, hyp, stretch=True)
36
36
  else:
37
- # transforms = Compose([LetterBox(new_shape=(self.imgsz, self.imgsz), auto=False, scaleFill=True)])
37
+ # transforms = Compose([LetterBox(new_shape=(self.imgsz, self.imgsz), auto=False, scale_fill=True)])
38
38
  transforms = Compose([])
39
39
  transforms.append(
40
40
  Format(
@@ -186,7 +186,7 @@ class DetectionValidator(BaseValidator):
186
186
  self.nt_per_class = np.bincount(stats["target_cls"].astype(int), minlength=self.nc)
187
187
  self.nt_per_image = np.bincount(stats["target_img"].astype(int), minlength=self.nc)
188
188
  stats.pop("target_img", None)
189
- if len(stats) and stats["tp"].any():
189
+ if len(stats):
190
190
  self.metrics.process(**stats)
191
191
  return self.metrics.results_dict
192
192
 
@@ -1227,8 +1227,8 @@ class AAttn(nn.Module):
1227
1227
  v = v.reshape(B // self.area, N * self.area, C)
1228
1228
  B, N, _ = x.shape
1229
1229
 
1230
- x = x.reshape(B, H, W, C).permute(0, 3, 1, 2)
1231
- v = v.reshape(B, H, W, C).permute(0, 3, 1, 2)
1230
+ x = x.reshape(B, H, W, C).permute(0, 3, 1, 2).contiguous()
1231
+ v = v.reshape(B, H, W, C).permute(0, 3, 1, 2).contiguous()
1232
1232
 
1233
1233
  x = x + self.pe(v)
1234
1234
  return self.proj(x)
@@ -177,7 +177,7 @@ def _format_ground_truth_annotations_for_detection(img_idx, image_path, batch, c
177
177
  return {"name": "ground_truth", "data": data}
178
178
 
179
179
 
180
- def _format_prediction_annotations_for_detection(image_path, metadata, class_label_map=None):
180
+ def _format_prediction_annotations_for_detection(image_path, metadata, class_label_map=None, class_map=None):
181
181
  """Format YOLO predictions for object detection visualization."""
182
182
  stem = image_path.stem
183
183
  image_id = int(stem) if stem.isnumeric() else stem
@@ -187,26 +187,32 @@ def _format_prediction_annotations_for_detection(image_path, metadata, class_lab
187
187
  LOGGER.debug(f"COMET WARNING: Image: {image_path} has no bounding boxes predictions")
188
188
  return None
189
189
 
190
+ label_index_offset = 0
191
+ if class_map is not None:
192
+ # offset to align indices of class labels (starting from zero)
193
+ # with prediction's category ID indices (can start from one)
194
+ label_index_offset = sorted(class_map)[0]
195
+
190
196
  data = []
191
197
  for prediction in predictions:
192
198
  boxes = prediction["bbox"]
193
199
  score = _scale_confidence_score(prediction["score"])
194
200
  cls_label = prediction["category_id"]
195
201
  if class_label_map:
196
- cls_label = str(class_label_map[cls_label])
202
+ cls_label = str(class_label_map[cls_label - label_index_offset])
197
203
 
198
204
  data.append({"boxes": [boxes], "label": cls_label, "score": score})
199
205
 
200
206
  return {"name": "prediction", "data": data}
201
207
 
202
208
 
203
- def _fetch_annotations(img_idx, image_path, batch, prediction_metadata_map, class_label_map):
209
+ def _fetch_annotations(img_idx, image_path, batch, prediction_metadata_map, class_label_map, class_map):
204
210
  """Join the ground truth and prediction annotations if they exist."""
205
211
  ground_truth_annotations = _format_ground_truth_annotations_for_detection(
206
212
  img_idx, image_path, batch, class_label_map
207
213
  )
208
214
  prediction_annotations = _format_prediction_annotations_for_detection(
209
- image_path, prediction_metadata_map, class_label_map
215
+ image_path, prediction_metadata_map, class_label_map, class_map
210
216
  )
211
217
 
212
218
  annotations = [
@@ -260,6 +266,7 @@ def _log_image_predictions(experiment, validator, curr_step):
260
266
  predictions_metadata_map = _create_prediction_metadata_map(jdict)
261
267
  dataloader = validator.dataloader
262
268
  class_label_map = validator.names
269
+ class_map = getattr(validator, "class_map", None)
263
270
 
264
271
  batch_logging_interval = _get_eval_batch_logging_interval()
265
272
  max_image_predictions = _get_max_image_predictions_to_log()
@@ -280,6 +287,7 @@ def _log_image_predictions(experiment, validator, curr_step):
280
287
  batch,
281
288
  predictions_metadata_map,
282
289
  class_label_map,
290
+ class_map=class_map,
283
291
  )
284
292
  _log_images(
285
293
  experiment,
@@ -604,7 +604,7 @@ def ap_per_class(
604
604
  if j == 0:
605
605
  prec_values.append(np.interp(x, mrec, mpre)) # precision at mAP@0.5
606
606
 
607
- prec_values = np.array(prec_values) # (nc, 1000)
607
+ prec_values = np.array(prec_values) if prec_values else np.zeros((1, 1000)) # (nc, 1000)
608
608
 
609
609
  # Compute F1 (harmonic mean of precision and recall)
610
610
  f1_curve = 2 * p_curve * r_curve / (p_curve + r_curve + eps)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ultralytics
3
- Version: 8.3.78
3
+ Version: 8.3.79
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -7,7 +7,7 @@ tests/test_exports.py,sha256=T_z_NUS9URQXv83k5XNLHTuksJ8srtzbZnWuiiQWM98,9260
7
7
  tests/test_integrations.py,sha256=p3DMnnPMKsV0Qm82JVJUIY1UZ67xRgF9E8AaL76TEHE,6154
8
8
  tests/test_python.py,sha256=tW-EFJC2rjl_DvAa8khXGWYdypseQjrLjGHhe2p9r9A,23238
9
9
  tests/test_solutions.py,sha256=aY0G3vNzXGCENG9FD76MfUp7jgzeESPsUvbvQYBUvH0,4205
10
- ultralytics/__init__.py,sha256=Rw3irYHrzYEKnwLROf0tObltLYjrLQ5MKmC0h8sEJI4,709
10
+ ultralytics/__init__.py,sha256=moo1vmbr78zE56S4YpmOEngnomz8U-tJpyjDtGNeJxA,709
11
11
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
12
12
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
13
13
  ultralytics/cfg/__init__.py,sha256=qP44HnFP4QcC5FQz29A-EGTuwdtxXAzPvw_IvCVmiqA,39771
@@ -97,21 +97,21 @@ ultralytics/cfg/solutions/default.yaml,sha256=c-9thwI7y7VmIoIM6AW70Z0r825SToH2h7
97
97
  ultralytics/cfg/trackers/botsort.yaml,sha256=D9doE5GQUe6HrAFzr7OfQFIGPFk0M_vJ0B_n7VjxH6Q,1080
98
98
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
99
99
  ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
100
- ultralytics/data/annotator.py,sha256=jbKHB5l5IYOG1YOgCxA6czU_ivb3NPAACrtPe6-bVn4,3145
101
- ultralytics/data/augment.py,sha256=sQDtIPD0P2pm_t-dI87hZt9KTB2PDN0JT_7AekHctRw,120726
100
+ ultralytics/data/annotator.py,sha256=whx_3sdKGRsECYLKyJMNGQ-d9g-f8020O6kvl5M1c_I,3067
101
+ ultralytics/data/augment.py,sha256=XFrIPNI7un1aLdL3ZU24mwKLRd1AvUSPgie7s3Pb6OE,121319
102
102
  ultralytics/data/base.py,sha256=NTNdn-Emgx3Z2vats8i8oEe-9yosPmHd53v1A0xz0EU,15196
103
103
  ultralytics/data/build.py,sha256=gOU5SNABBNxwo5012N--WhjEnLK2ewycXIryMpbHg6U,7685
104
- ultralytics/data/converter.py,sha256=89E44LBCpbn5hMF03Kdts6DaTP8Oei5iCra5enFCt5I,24467
104
+ ultralytics/data/converter.py,sha256=M7LvBpdYiDA_YEuef3oCXhGPFTjtyJjSbSwqn-F6d7I,24473
105
105
  ultralytics/data/dataset.py,sha256=lxtH3JytNu6nsiPAIhe0uGuGGpkZ4ZRqvXM6eJw9rXU,23244
106
106
  ultralytics/data/loaders.py,sha256=JOwXbz-dxgG2bx0_cQHp-olz5FleoCX8EzrUvZ77vvg,28534
107
107
  ultralytics/data/split_dota.py,sha256=YI-i2MqdiBt06W67TJnBXQHJrqTnkJDJ3zzoL0UZVro,10733
108
108
  ultralytics/data/utils.py,sha256=5YMU5396oAFPwTy2y0MCU2WipF6Rt-7xNtmHKRCA4fI,33838
109
109
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
110
- ultralytics/engine/exporter.py,sha256=m7K1TagszDtzECoMSZaBC2G8FmfAVOGjKhVN85u1EVk,76996
110
+ ultralytics/engine/exporter.py,sha256=qeEV-w8cdYuVJP4RaKbq46xJmsYGUFJnkplfEUCIm_c,77013
111
111
  ultralytics/engine/model.py,sha256=s8HsSBvdRgSbnKGULr7YW-ZWJKJsQpOoHd9Aih_nMt0,53427
112
112
  ultralytics/engine/predictor.py,sha256=jiYDAjupOlRUpPvw9tu7or9PjXtLm-YCRiawANtWxj0,17881
113
113
  ultralytics/engine/results.py,sha256=hWlO2e58BPUJ5R4Jl4iirBPaZ8BypcNu_cNQ2NHpUqM,78111
114
- ultralytics/engine/trainer.py,sha256=hrqaO3cgf0VPVLHKv0tHk4W3gcasgqq_KF-DkgnIjus,37421
114
+ ultralytics/engine/trainer.py,sha256=pV8sztWxFH5rMNYW0wXHlk-YrVZsEUYAKFvfcA22PnY,37600
115
115
  ultralytics/engine/tuner.py,sha256=EUlTs7KJQ2RVABm8pihr_14M_Z2kGSzJaWH-Y9TJYDw,11976
116
116
  ultralytics/engine/validator.py,sha256=r27X8HGeDEwq7V5sFjEQH_3EnP1CyG-HcOLpFABUisU,15034
117
117
  ultralytics/hub/__init__.py,sha256=1ifzSYV0PIT4ZWOm2V7HnpGyY3G3hCz0malw3AXHFlY,5660
@@ -131,9 +131,9 @@ ultralytics/models/nas/predict.py,sha256=nzVGTdUb0E_IjmWksX_T61q80hbrjEovihTzTJ1
131
131
  ultralytics/models/nas/val.py,sha256=CSqmcuAcuJ5SQ7mo364RdXLGeu2XATyRY8Z84VGGX5o,1497
132
132
  ultralytics/models/rtdetr/__init__.py,sha256=_jEHmOjI_QP_nT3XJXLgYHQ6bXG4EL8Gnvn1y_eev1g,225
133
133
  ultralytics/models/rtdetr/model.py,sha256=KFUlxMo2NTxVvK9D5x9p0WhXogK_QL5Wao8KxcZcT7s,2016
134
- ultralytics/models/rtdetr/predict.py,sha256=ymZS4ocUuec7zEOOnKFr2xaAr48NwljibO8DE_VrTwY,3596
134
+ ultralytics/models/rtdetr/predict.py,sha256=zT4rc2M0drf1ge1FhWc6RG7tg6xgRdCroXlnl2tJJCI,3598
135
135
  ultralytics/models/rtdetr/train.py,sha256=TGawTiBD0SkNaCS8mWc3KbhfiviPuA7GWkvpZ8xVpGM,3875
136
- ultralytics/models/rtdetr/val.py,sha256=A2Um_J7GE6EHDOHCABpcy4ApyBKT_r9IquguCeROQ7I,5594
136
+ ultralytics/models/rtdetr/val.py,sha256=cve1HdfLI-hGM2dkTCDT_cOFfDuzAe2ROkmlJOZC4qw,5595
137
137
  ultralytics/models/sam/__init__.py,sha256=qZwyxJf34UuE5Lu9qfblVXUAvK1fVd66Xyut_ZcTdyc,246
138
138
  ultralytics/models/sam/amg.py,sha256=MsTflp_oyTjQkfgYZCyn_HVpGOw4f-XH7vDSbM9mRRI,8736
139
139
  ultralytics/models/sam/build.py,sha256=Vhml3zBGDcRO-efauNdM0ZlKTV10ADAj_aT823lPJv8,12515
@@ -160,7 +160,7 @@ ultralytics/models/yolo/classify/val.py,sha256=VUYkqGtKnZPig1XE5Qrtqoqm-Y9dDgr5Y
160
160
  ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
161
161
  ultralytics/models/yolo/detect/predict.py,sha256=_RrKS3h-tRR4uJyTOPSIp4HapxXC-c8Ao9yDeAM835I,2852
162
162
  ultralytics/models/yolo/detect/train.py,sha256=Y2SYjywenBLg8j-r4bC_sWqle1DJGQtDL5O6koeqm9U,6738
163
- ultralytics/models/yolo/detect/val.py,sha256=ZzJ2mEKoiUI8yfgE5nx1zUV-51_78z5s8REUbBr7wU8,15253
163
+ ultralytics/models/yolo/detect/val.py,sha256=V06zB_CSKCdVu8r7e_0mi9h749qe32FdZI7VssZPoDk,15231
164
164
  ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
165
165
  ultralytics/models/yolo/obb/predict.py,sha256=SUgLzsxg1O77KxIeCj9IlSiqB9SfIwcoRtNZViqPS2E,1880
166
166
  ultralytics/models/yolo/obb/train.py,sha256=7LJ04dYENfjdt1Jet0Cxh0nyIpmgIUtmz425ZEuZSn8,1550
@@ -181,7 +181,7 @@ ultralytics/nn/autobackend.py,sha256=uVLr4GymWtz4D86QXzmqs7LwoLjv3VycFLfdKq9rG1U
181
181
  ultralytics/nn/tasks.py,sha256=rKyTShwk1RtWBnbHObcSamxXoCUiwzl0K5QFYaw56Hw,49030
182
182
  ultralytics/nn/modules/__init__.py,sha256=pVV5SSu6ktOusdVFr1kHK_WOkVLjCLO2W5XaLH-NF8w,2737
183
183
  ultralytics/nn/modules/activation.py,sha256=oRkhMdqlNpIxQb35pTSUeHV-h0VyLl96GOqvIZ4OvT8,923
184
- ultralytics/nn/modules/block.py,sha256=PZ8_gUoFUcadh0Uo5-JkzELvFnq1tKSh23hHnfvgJvM,52140
184
+ ultralytics/nn/modules/block.py,sha256=z0F0YD07C31VyMdYCeT5KoTgTpazIYW34xH7xgy02J4,52166
185
185
  ultralytics/nn/modules/conv.py,sha256=Wx_tZ56M7iMiNqz3v03oi86C2fatdmdBBDpkrUyzEIU,13132
186
186
  ultralytics/nn/modules/head.py,sha256=RYT31wplr64yDSHLpEZy3fyqg9W8HWlXWKrltwpqGiQ,27962
187
187
  ultralytics/nn/modules/transformer.py,sha256=fdc4xam82Dk8etahkhlc5RHW6dfY00klKj2od4QpdQo,18097
@@ -219,7 +219,7 @@ ultralytics/utils/errors.py,sha256=sXKDEd8ws3L-yIfG_-P_h86axbm37sJNha7kFBJbQMQ,8
219
219
  ultralytics/utils/files.py,sha256=c85NRofjGPMcpkV-yUo1Cwk8ZVquBGCEKlzbSVtXkQA,8252
220
220
  ultralytics/utils/instance.py,sha256=z1oyyvz7wnCSUW_bvi0TbgAL0VxJtAWWXV9KWCoyJ_k,16887
221
221
  ultralytics/utils/loss.py,sha256=paRY8K7R4pcUGJfApVzZx-m_iFzzMbHm5GgiaixfDuU,34179
222
- ultralytics/utils/metrics.py,sha256=6RBMTBbTYa-5nRwTPlbPBX8w9xhpqryZ9tjXsvlRmmM,54184
222
+ ultralytics/utils/metrics.py,sha256=M15LVYzTGgmahkALKwKU3iYDoJIZ3M4824FLqsJ9qeU,54224
223
223
  ultralytics/utils/ops.py,sha256=izQr5GvgzmaD-GXaqxIjLE525JnvgLetOtuq_EOaxM8,34584
224
224
  ultralytics/utils/patches.py,sha256=ARR89dP4YKq7Dd3g2eU-ukbnc2lo3BELukL_1c_d854,3298
225
225
  ultralytics/utils/plotting.py,sha256=hKji4TyxAmCXdSL264VX6dsC2AZYiL9StShI02dcAOM,62990
@@ -230,7 +230,7 @@ ultralytics/utils/tuner.py,sha256=gySDBzTlq_klTOq6CGEyUN58HXzPCulObaMBHacXzHo,62
230
230
  ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
231
231
  ultralytics/utils/callbacks/base.py,sha256=nbeSPjPCOb0M6FsFQ5-uFxXVzUYwmFyE4wFoA66Jpug,5803
232
232
  ultralytics/utils/callbacks/clearml.py,sha256=JH70T1OLPd9GSvC6HnaKkZHTr8fyE9RRcz3ukL62QPw,5961
233
- ultralytics/utils/callbacks/comet.py,sha256=RfijX3oKLdI3zXyleATLmkGfaV--3sBU-V-zyX8-TWU,15607
233
+ ultralytics/utils/callbacks/comet.py,sha256=2fO79Lvl3DqJmM6zX5COU1Xt3IN_GTkzrDQWr9a80Ag,16005
234
234
  ultralytics/utils/callbacks/dvc.py,sha256=4ln4wqU3ZZTK5JfvUmbKfQuIdO6QohDSnFVV4v5Pl8E,5073
235
235
  ultralytics/utils/callbacks/hub.py,sha256=bqU83kBnNZ0U9qjm0I9xvM4DWA0VMxSLxQDgjuTZbKM,3977
236
236
  ultralytics/utils/callbacks/mlflow.py,sha256=3y4xOPLZe1bES0ETWGJYywulTEUGv8I849e2TNms8yI,5420
@@ -238,9 +238,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=waZ_bRu0-qBKujTLuqonC2gx2DkgBuVnfq
238
238
  ultralytics/utils/callbacks/raytune.py,sha256=A_NVWjyPNf2m6iB-mbW7SMpyqM9QBvpbPa-MCMFMtdk,727
239
239
  ultralytics/utils/callbacks/tensorboard.py,sha256=JHOEVlNQ5dYJPd4Z-EvqbXowuK5uA0p8wPgyyaIUQs0,4194
240
240
  ultralytics/utils/callbacks/wb.py,sha256=ayhT2y62AcSOacnawshATU0rWrlSFQ77mrGgBdRl3W4,7086
241
- ultralytics-8.3.78.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
242
- ultralytics-8.3.78.dist-info/METADATA,sha256=SeKO3WpsUETohRJ3eAWwhgf6tzzMilGJg8STkl__vq4,35158
243
- ultralytics-8.3.78.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
244
- ultralytics-8.3.78.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
245
- ultralytics-8.3.78.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
246
- ultralytics-8.3.78.dist-info/RECORD,,
241
+ ultralytics-8.3.79.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
242
+ ultralytics-8.3.79.dist-info/METADATA,sha256=Qg8FyAGAg92474miDCJhNUdGM-siQ8ypdixaKpzYyko,35158
243
+ ultralytics-8.3.79.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
244
+ ultralytics-8.3.79.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
245
+ ultralytics-8.3.79.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
246
+ ultralytics-8.3.79.dist-info/RECORD,,