ultralytics 8.2.8__py3-none-any.whl → 8.2.9__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.
Potentially problematic release.
This version of ultralytics might be problematic. Click here for more details.
- ultralytics/__init__.py +1 -1
- ultralytics/data/augment.py +1 -2
- ultralytics/data/base.py +1 -2
- ultralytics/data/build.py +2 -4
- ultralytics/engine/exporter.py +37 -29
- ultralytics/engine/model.py +2 -2
- ultralytics/solutions/parking_management.py +35 -22
- ultralytics/utils/benchmarks.py +4 -3
- {ultralytics-8.2.8.dist-info → ultralytics-8.2.9.dist-info}/METADATA +1 -1
- {ultralytics-8.2.8.dist-info → ultralytics-8.2.9.dist-info}/RECORD +14 -14
- {ultralytics-8.2.8.dist-info → ultralytics-8.2.9.dist-info}/LICENSE +0 -0
- {ultralytics-8.2.8.dist-info → ultralytics-8.2.9.dist-info}/WHEEL +0 -0
- {ultralytics-8.2.8.dist-info → ultralytics-8.2.9.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.2.8.dist-info → ultralytics-8.2.9.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
ultralytics/data/augment.py
CHANGED
|
@@ -10,6 +10,7 @@ import numpy as np
|
|
|
10
10
|
import torch
|
|
11
11
|
from PIL import Image
|
|
12
12
|
|
|
13
|
+
from ultralytics.data.utils import polygons2masks, polygons2masks_overlap
|
|
13
14
|
from ultralytics.utils import LOGGER, colorstr
|
|
14
15
|
from ultralytics.utils.checks import check_version
|
|
15
16
|
from ultralytics.utils.instance import Instances
|
|
@@ -17,8 +18,6 @@ from ultralytics.utils.metrics import bbox_ioa
|
|
|
17
18
|
from ultralytics.utils.ops import segment2box, xyxyxyxy2xywhr
|
|
18
19
|
from ultralytics.utils.torch_utils import TORCHVISION_0_10, TORCHVISION_0_11, TORCHVISION_0_13
|
|
19
20
|
|
|
20
|
-
from .utils import polygons2masks, polygons2masks_overlap
|
|
21
|
-
|
|
22
21
|
DEFAULT_MEAN = (0.0, 0.0, 0.0)
|
|
23
22
|
DEFAULT_STD = (1.0, 1.0, 1.0)
|
|
24
23
|
DEFAULT_CROP_FRACTION = 1.0
|
ultralytics/data/base.py
CHANGED
|
@@ -14,10 +14,9 @@ import numpy as np
|
|
|
14
14
|
import psutil
|
|
15
15
|
from torch.utils.data import Dataset
|
|
16
16
|
|
|
17
|
+
from ultralytics.data.utils import FORMATS_HELP_MSG, HELP_URL, IMG_FORMATS
|
|
17
18
|
from ultralytics.utils import DEFAULT_CFG, LOCAL_RANK, LOGGER, NUM_THREADS, TQDM
|
|
18
19
|
|
|
19
|
-
from .utils import FORMATS_HELP_MSG, HELP_URL, IMG_FORMATS
|
|
20
|
-
|
|
21
20
|
|
|
22
21
|
class BaseDataset(Dataset):
|
|
23
22
|
"""
|
ultralytics/data/build.py
CHANGED
|
@@ -9,6 +9,7 @@ import torch
|
|
|
9
9
|
from PIL import Image
|
|
10
10
|
from torch.utils.data import dataloader, distributed
|
|
11
11
|
|
|
12
|
+
from ultralytics.data.dataset import GroundingDataset, YOLODataset, YOLOMultiModalDataset
|
|
12
13
|
from ultralytics.data.loaders import (
|
|
13
14
|
LOADERS,
|
|
14
15
|
LoadImagesAndVideos,
|
|
@@ -19,13 +20,10 @@ from ultralytics.data.loaders import (
|
|
|
19
20
|
SourceTypes,
|
|
20
21
|
autocast_list,
|
|
21
22
|
)
|
|
22
|
-
from ultralytics.data.utils import IMG_FORMATS, VID_FORMATS
|
|
23
|
+
from ultralytics.data.utils import IMG_FORMATS, PIN_MEMORY, VID_FORMATS
|
|
23
24
|
from ultralytics.utils import LINUX, NUM_THREADS, RANK, colorstr
|
|
24
25
|
from ultralytics.utils.checks import check_file
|
|
25
26
|
|
|
26
|
-
from .dataset import GroundingDataset, YOLODataset, YOLOMultiModalDataset
|
|
27
|
-
from .utils import PIN_MEMORY
|
|
28
|
-
|
|
29
27
|
|
|
30
28
|
class InfiniteDataLoader(dataloader.DataLoader):
|
|
31
29
|
"""
|
ultralytics/engine/exporter.py
CHANGED
|
@@ -64,9 +64,10 @@ from pathlib import Path
|
|
|
64
64
|
import numpy as np
|
|
65
65
|
import torch
|
|
66
66
|
|
|
67
|
-
from ultralytics.cfg import get_cfg
|
|
67
|
+
from ultralytics.cfg import TASK2DATA, get_cfg
|
|
68
|
+
from ultralytics.data import build_dataloader
|
|
68
69
|
from ultralytics.data.dataset import YOLODataset
|
|
69
|
-
from ultralytics.data.utils import check_det_dataset
|
|
70
|
+
from ultralytics.data.utils import check_cls_dataset, check_det_dataset
|
|
70
71
|
from ultralytics.nn.autobackend import check_class_names, default_class_names
|
|
71
72
|
from ultralytics.nn.modules import C2f, Detect, RTDETRDecoder
|
|
72
73
|
from ultralytics.nn.tasks import DetectionModel, SegmentationModel, WorldModel
|
|
@@ -169,7 +170,7 @@ class Exporter:
|
|
|
169
170
|
callbacks.add_integration_callbacks(self)
|
|
170
171
|
|
|
171
172
|
@smart_inference_mode()
|
|
172
|
-
def __call__(self, model=None):
|
|
173
|
+
def __call__(self, model=None) -> str:
|
|
173
174
|
"""Returns list of exported files/dirs after running callbacks."""
|
|
174
175
|
self.run_callbacks("on_export_start")
|
|
175
176
|
t = time.time()
|
|
@@ -211,7 +212,12 @@ class Exporter:
|
|
|
211
212
|
"(torchscript, onnx, openvino, engine, coreml) formats. "
|
|
212
213
|
"See https://docs.ultralytics.com/models/yolo-world for details."
|
|
213
214
|
)
|
|
214
|
-
|
|
215
|
+
if self.args.int8 and not self.args.data:
|
|
216
|
+
self.args.data = DEFAULT_CFG.data or TASK2DATA[getattr(model, "task", "detect")] # assign default data
|
|
217
|
+
LOGGER.warning(
|
|
218
|
+
"WARNING ⚠️ INT8 export requires a missing 'data' arg for calibration. "
|
|
219
|
+
f"Using default 'data={self.args.data}'."
|
|
220
|
+
)
|
|
215
221
|
# Input
|
|
216
222
|
im = torch.zeros(self.args.batch, 3, *self.imgsz).to(self.device)
|
|
217
223
|
file = Path(
|
|
@@ -333,6 +339,23 @@ class Exporter:
|
|
|
333
339
|
self.run_callbacks("on_export_end")
|
|
334
340
|
return f # return list of exported files/dirs
|
|
335
341
|
|
|
342
|
+
def get_int8_calibration_dataloader(self, prefix=""):
|
|
343
|
+
"""Build and return a dataloader suitable for calibration of INT8 models."""
|
|
344
|
+
LOGGER.info(f"{prefix} collecting INT8 calibration images from 'data={self.args.data}'")
|
|
345
|
+
data = (check_cls_dataset if self.model.task == "classify" else check_det_dataset)(self.args.data)
|
|
346
|
+
dataset = YOLODataset(
|
|
347
|
+
data[self.args.split or "val"],
|
|
348
|
+
data=data,
|
|
349
|
+
task=self.model.task,
|
|
350
|
+
imgsz=self.imgsz[0],
|
|
351
|
+
augment=False,
|
|
352
|
+
batch_size=self.args.batch,
|
|
353
|
+
)
|
|
354
|
+
n = len(dataset)
|
|
355
|
+
if n < 300:
|
|
356
|
+
LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
|
|
357
|
+
return build_dataloader(dataset, batch=self.args.batch, workers=0) # required for batch loading
|
|
358
|
+
|
|
336
359
|
@try_export
|
|
337
360
|
def export_torchscript(self, prefix=colorstr("TorchScript:")):
|
|
338
361
|
"""YOLOv8 TorchScript model export."""
|
|
@@ -442,37 +465,21 @@ class Exporter:
|
|
|
442
465
|
if self.args.int8:
|
|
443
466
|
fq = str(self.file).replace(self.file.suffix, f"_int8_openvino_model{os.sep}")
|
|
444
467
|
fq_ov = str(Path(fq) / self.file.with_suffix(".xml").name)
|
|
445
|
-
if not self.args.data:
|
|
446
|
-
self.args.data = DEFAULT_CFG.data or "coco128.yaml"
|
|
447
|
-
LOGGER.warning(
|
|
448
|
-
f"{prefix} WARNING ⚠️ INT8 export requires a missing 'data' arg for calibration. "
|
|
449
|
-
f"Using default 'data={self.args.data}'."
|
|
450
|
-
)
|
|
451
468
|
check_requirements("nncf>=2.8.0")
|
|
452
469
|
import nncf
|
|
453
470
|
|
|
454
|
-
def transform_fn(data_item):
|
|
471
|
+
def transform_fn(data_item) -> np.ndarray:
|
|
455
472
|
"""Quantization transform function."""
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
im = data_item["img"].numpy().astype(np.float32) / 255.0 # uint8 to fp16/32 and 0 - 255 to 0.0 - 1.0
|
|
473
|
+
data_item: torch.Tensor = data_item["img"] if isinstance(data_item, dict) else data_item
|
|
474
|
+
assert data_item.dtype == torch.uint8, "Input image must be uint8 for the quantization preprocessing"
|
|
475
|
+
im = data_item.numpy().astype(np.float32) / 255.0 # uint8 to fp16/32 and 0 - 255 to 0.0 - 1.0
|
|
460
476
|
return np.expand_dims(im, 0) if im.ndim == 3 else im
|
|
461
477
|
|
|
462
478
|
# Generate calibration data for integer quantization
|
|
463
|
-
LOGGER.info(f"{prefix} collecting INT8 calibration images from 'data={self.args.data}'")
|
|
464
|
-
data = check_det_dataset(self.args.data)
|
|
465
|
-
dataset = YOLODataset(data["val"], data=data, task=self.model.task, imgsz=self.imgsz[0], augment=False)
|
|
466
|
-
n = len(dataset)
|
|
467
|
-
if n < 300:
|
|
468
|
-
LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
|
|
469
|
-
quantization_dataset = nncf.Dataset(dataset, transform_fn)
|
|
470
|
-
|
|
471
479
|
ignored_scope = None
|
|
472
480
|
if isinstance(self.model.model[-1], Detect):
|
|
473
481
|
# Includes all Detect subclasses like Segment, Pose, OBB, WorldDetect
|
|
474
482
|
head_module_name = ".".join(list(self.model.named_modules())[-1][0].split(".")[:2])
|
|
475
|
-
|
|
476
483
|
ignored_scope = nncf.IgnoredScope( # ignore operations
|
|
477
484
|
patterns=[
|
|
478
485
|
f".*{head_module_name}/.*/Add",
|
|
@@ -485,7 +492,10 @@ class Exporter:
|
|
|
485
492
|
)
|
|
486
493
|
|
|
487
494
|
quantized_ov_model = nncf.quantize(
|
|
488
|
-
ov_model,
|
|
495
|
+
model=ov_model,
|
|
496
|
+
calibration_dataset=nncf.Dataset(self.get_int8_calibration_dataloader(prefix), transform_fn),
|
|
497
|
+
preset=nncf.QuantizationPreset.MIXED,
|
|
498
|
+
ignored_scope=ignored_scope,
|
|
489
499
|
)
|
|
490
500
|
serialize(quantized_ov_model, fq_ov)
|
|
491
501
|
return fq, None
|
|
@@ -787,11 +797,9 @@ class Exporter:
|
|
|
787
797
|
verbosity = "info"
|
|
788
798
|
if self.args.data:
|
|
789
799
|
# Generate calibration data for integer quantization
|
|
790
|
-
|
|
791
|
-
data = check_det_dataset(self.args.data)
|
|
792
|
-
dataset = YOLODataset(data["val"], data=data, imgsz=self.imgsz[0], augment=False)
|
|
800
|
+
dataloader = self.get_int8_calibration_dataloader(prefix)
|
|
793
801
|
images = []
|
|
794
|
-
for i, batch in enumerate(
|
|
802
|
+
for i, batch in enumerate(dataloader):
|
|
795
803
|
if i >= 100: # maximum number of calibration images
|
|
796
804
|
break
|
|
797
805
|
im = batch["img"].permute(1, 2, 0)[None] # list to nparray, CHW to BHWC
|
ultralytics/engine/model.py
CHANGED
|
@@ -572,7 +572,7 @@ class Model(nn.Module):
|
|
|
572
572
|
def export(
|
|
573
573
|
self,
|
|
574
574
|
**kwargs,
|
|
575
|
-
):
|
|
575
|
+
) -> str:
|
|
576
576
|
"""
|
|
577
577
|
Exports the model to a different format suitable for deployment.
|
|
578
578
|
|
|
@@ -588,7 +588,7 @@ class Model(nn.Module):
|
|
|
588
588
|
model's overrides and method defaults.
|
|
589
589
|
|
|
590
590
|
Returns:
|
|
591
|
-
(
|
|
591
|
+
(str): The exported model filename in the specified format, or an object related to the export process.
|
|
592
592
|
|
|
593
593
|
Raises:
|
|
594
594
|
AssertionError: If the model is not a PyTorch model.
|
|
@@ -17,7 +17,20 @@ class ParkingPtsSelection:
|
|
|
17
17
|
"""Initializes the UI for selecting parking zone points in a tkinter window."""
|
|
18
18
|
self.master = master
|
|
19
19
|
master.title("Ultralytics Parking Zones Points Selector")
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
# Resizable false
|
|
22
|
+
master.resizable(False, False)
|
|
23
|
+
|
|
24
|
+
# Setup canvas for image display
|
|
25
|
+
self.canvas = tk.Canvas(master, bg="white")
|
|
26
|
+
|
|
27
|
+
# Setup buttons
|
|
28
|
+
button_frame = tk.Frame(master)
|
|
29
|
+
button_frame.pack(side=tk.TOP)
|
|
30
|
+
|
|
31
|
+
tk.Button(button_frame, text="Upload Image", command=self.upload_image).grid(row=0, column=0)
|
|
32
|
+
tk.Button(button_frame, text="Remove Last BBox", command=self.remove_last_bounding_box).grid(row=0, column=1)
|
|
33
|
+
tk.Button(button_frame, text="Save", command=self.save_to_json).grid(row=0, column=2)
|
|
21
34
|
|
|
22
35
|
# Initialize properties
|
|
23
36
|
self.image_path = None
|
|
@@ -33,21 +46,6 @@ class ParkingPtsSelection:
|
|
|
33
46
|
self.canvas_max_width = 1280
|
|
34
47
|
self.canvas_max_height = 720
|
|
35
48
|
|
|
36
|
-
def initialize_ui(self):
|
|
37
|
-
"""Setup UI components."""
|
|
38
|
-
# Setup buttons
|
|
39
|
-
button_frame = tk.Frame(self.master)
|
|
40
|
-
button_frame.pack(side=tk.TOP)
|
|
41
|
-
|
|
42
|
-
tk.Button(button_frame, text="Upload Image", command=self.upload_image).grid(row=0, column=0)
|
|
43
|
-
tk.Button(button_frame, text="Remove Last BBox", command=self.remove_last_bounding_box).grid(row=0, column=1)
|
|
44
|
-
tk.Button(button_frame, text="Save", command=self.save_to_json).grid(row=0, column=2)
|
|
45
|
-
|
|
46
|
-
# Setup canvas for image display
|
|
47
|
-
self.canvas = tk.Canvas(self.master, bg="white")
|
|
48
|
-
self.canvas.pack(side=tk.BOTTOM)
|
|
49
|
-
self.canvas.bind("<Button-1>", self.on_canvas_click)
|
|
50
|
-
|
|
51
49
|
def upload_image(self):
|
|
52
50
|
"""Upload an image and resize it to fit canvas."""
|
|
53
51
|
self.image_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
|
|
@@ -68,11 +66,18 @@ class ParkingPtsSelection:
|
|
|
68
66
|
canvas_height = min(self.canvas_max_height, self.img_height)
|
|
69
67
|
canvas_width = int(canvas_height * aspect_ratio)
|
|
70
68
|
|
|
71
|
-
|
|
69
|
+
# Check if canvas is already initialized
|
|
70
|
+
if self.canvas:
|
|
71
|
+
self.canvas.destroy() # Destroy previous canvas
|
|
72
|
+
|
|
73
|
+
self.canvas = tk.Canvas(self.master, bg="white", width=canvas_width, height=canvas_height)
|
|
72
74
|
resized_image = self.image.resize((canvas_width, canvas_height), Image.LANCZOS)
|
|
73
75
|
self.canvas_image = ImageTk.PhotoImage(resized_image)
|
|
74
76
|
self.canvas.create_image(0, 0, anchor=tk.NW, image=self.canvas_image)
|
|
75
77
|
|
|
78
|
+
self.canvas.pack(side=tk.BOTTOM)
|
|
79
|
+
self.canvas.bind("<Button-1>", self.on_canvas_click)
|
|
80
|
+
|
|
76
81
|
# Reset bounding boxes and current box
|
|
77
82
|
self.bounding_boxes = []
|
|
78
83
|
self.current_box = []
|
|
@@ -80,6 +85,9 @@ class ParkingPtsSelection:
|
|
|
80
85
|
def on_canvas_click(self, event):
|
|
81
86
|
"""Handle mouse clicks on canvas to create points for bounding boxes."""
|
|
82
87
|
self.current_box.append((event.x, event.y))
|
|
88
|
+
x0, y0 = event.x - 3, event.y - 3
|
|
89
|
+
x1, y1 = event.x + 3, event.y + 3
|
|
90
|
+
self.canvas.create_oval(x0, y0, x1, y1, fill="red")
|
|
83
91
|
|
|
84
92
|
if len(self.current_box) == 4:
|
|
85
93
|
self.bounding_boxes.append(self.current_box)
|
|
@@ -87,7 +95,13 @@ class ParkingPtsSelection:
|
|
|
87
95
|
self.current_box = []
|
|
88
96
|
|
|
89
97
|
def draw_bounding_box(self, box):
|
|
90
|
-
"""
|
|
98
|
+
"""
|
|
99
|
+
Draw bounding box on canvas.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
box (list): Bounding box data
|
|
103
|
+
"""
|
|
104
|
+
|
|
91
105
|
for i in range(4):
|
|
92
106
|
x1, y1 = box[i]
|
|
93
107
|
x2, y2 = box[(i + 1) % 4]
|
|
@@ -115,7 +129,6 @@ class ParkingPtsSelection:
|
|
|
115
129
|
height_scaling_factor = self.img_height / canvas_height
|
|
116
130
|
bounding_boxes_data = []
|
|
117
131
|
for box in self.bounding_boxes:
|
|
118
|
-
print("Bounding Box ", bounding_boxes_data)
|
|
119
132
|
rescaled_box = []
|
|
120
133
|
for x, y in box:
|
|
121
134
|
rescaled_x = int(x * width_scaling_factor)
|
|
@@ -163,7 +176,8 @@ class ParkingManagement:
|
|
|
163
176
|
self.model = YOLO(self.model_path)
|
|
164
177
|
return self.model
|
|
165
178
|
|
|
166
|
-
|
|
179
|
+
@staticmethod
|
|
180
|
+
def parking_regions_extraction(json_file):
|
|
167
181
|
"""
|
|
168
182
|
Extract parking regions from json file.
|
|
169
183
|
|
|
@@ -172,8 +186,7 @@ class ParkingManagement:
|
|
|
172
186
|
"""
|
|
173
187
|
|
|
174
188
|
with open(json_file, "r") as json_file:
|
|
175
|
-
|
|
176
|
-
return json_data
|
|
189
|
+
return json.load(json_file)
|
|
177
190
|
|
|
178
191
|
def process_data(self, json_data, im0, boxes, clss):
|
|
179
192
|
"""
|
ultralytics/utils/benchmarks.py
CHANGED
|
@@ -132,16 +132,17 @@ def benchmark(
|
|
|
132
132
|
data=data, batch=1, imgsz=imgsz, plots=False, device=device, half=half, int8=int8, verbose=False
|
|
133
133
|
)
|
|
134
134
|
metric, speed = results.results_dict[key], results.speed["inference"]
|
|
135
|
-
|
|
135
|
+
fps = round((1000 / speed), 2) # frames per second
|
|
136
|
+
y.append([name, "✅", round(file_size(filename), 1), round(metric, 4), round(speed, 2), fps])
|
|
136
137
|
except Exception as e:
|
|
137
138
|
if verbose:
|
|
138
139
|
assert type(e) is AssertionError, f"Benchmark failure for {name}: {e}"
|
|
139
140
|
LOGGER.warning(f"ERROR ❌️ Benchmark failure for {name}: {e}")
|
|
140
|
-
y.append([name, emoji, round(file_size(filename), 1), None, None]) # mAP, t_inference
|
|
141
|
+
y.append([name, emoji, round(file_size(filename), 1), None, None, None]) # mAP, t_inference
|
|
141
142
|
|
|
142
143
|
# Print results
|
|
143
144
|
check_yolo(device=device) # print system info
|
|
144
|
-
df = pd.DataFrame(y, columns=["Format", "Status❔", "Size (MB)", key, "Inference time (ms/im)"])
|
|
145
|
+
df = pd.DataFrame(y, columns=["Format", "Status❔", "Size (MB)", key, "Inference time (ms/im)", "FPS"])
|
|
145
146
|
|
|
146
147
|
name = Path(model.ckpt_path).name
|
|
147
148
|
s = f"\nBenchmarks complete for {name} on {data} at imgsz={imgsz} ({time.time() - t0:.2f}s)\n{df}\n"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.9
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
6
6
|
Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ultralytics/__init__.py,sha256=
|
|
1
|
+
ultralytics/__init__.py,sha256=oq6eTgCV4Zs-TB07fjVkFZWcv7FY5U4QMgtqyeyRnHA,632
|
|
2
2
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
|
3
3
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
|
4
4
|
ultralytics/cfg/__init__.py,sha256=4ZnvY2ULMGofFhjaRIzKQlGC5YVkvWkEAYAhnsKC1Po,21312
|
|
@@ -64,9 +64,9 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q
|
|
|
64
64
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
|
|
65
65
|
ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
|
|
66
66
|
ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
|
|
67
|
-
ultralytics/data/augment.py,sha256=
|
|
68
|
-
ultralytics/data/base.py,sha256=
|
|
69
|
-
ultralytics/data/build.py,sha256=
|
|
67
|
+
ultralytics/data/augment.py,sha256=OyGg5Ltmhi6sH8ImEiolr6KaiJPPB7bPqqcd3OHo_fQ,57665
|
|
68
|
+
ultralytics/data/base.py,sha256=rgF28Zn7Xw2jJIai5t8sDdmRNmv0DYhcTz9kevsXFIA,13496
|
|
69
|
+
ultralytics/data/build.py,sha256=JqMjNXEzCHKRgsKwaaTrALs3KnoajoaapCJcPP1UxUI,7483
|
|
70
70
|
ultralytics/data/converter.py,sha256=NLDiV67RshbKQnMJUiQQF11boVzEqgi2Hz39nKVAI4U,17528
|
|
71
71
|
ultralytics/data/dataset.py,sha256=NFaXyHRn64TyTEbtSkr7SkqWXK8bEJl6lZ6M1JwO3MY,22201
|
|
72
72
|
ultralytics/data/loaders.py,sha256=UxNLLV6rwUDog9MSOkHpDn52TO-X2g2P4a5ZwvB7Ii8,23142
|
|
@@ -78,8 +78,8 @@ ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yf
|
|
|
78
78
|
ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
79
79
|
ultralytics/data/explorer/gui/dash.py,sha256=2oAbNroR2lfS45v53M1sRqZklLXbbj6qXqNxvplulC0,10087
|
|
80
80
|
ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
81
|
-
ultralytics/engine/exporter.py,sha256=
|
|
82
|
-
ultralytics/engine/model.py,sha256=
|
|
81
|
+
ultralytics/engine/exporter.py,sha256=yCRWmWGrjFCCq0ltoV4Wq52k3ToYu6Fp1fFw99ke3NM,55074
|
|
82
|
+
ultralytics/engine/model.py,sha256=EkLTBSm3RT0mWPsZQpVRShihEvI5vx5X_VnkBHc1fxk,40032
|
|
83
83
|
ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
|
|
84
84
|
ultralytics/engine/results.py,sha256=MvrOBrBlRF7kbL-QwysMf9mIDy_lwQBTTYvy1x1FMME,30667
|
|
85
85
|
ultralytics/engine/trainer.py,sha256=GpseAovVKLRgAoqG4bEVtQqemWdDcxrY7gE3vGRU9gs,35048
|
|
@@ -158,7 +158,7 @@ ultralytics/solutions/ai_gym.py,sha256=IZHpvmNyEQT_aqMTrA5sIjCsl3_5Zl2WG31HxGT6K
|
|
|
158
158
|
ultralytics/solutions/distance_calculation.py,sha256=N1QB5uDG_6sp8jD5uSwp_NTPmyP4UCqJm9G2lNrgpr8,6334
|
|
159
159
|
ultralytics/solutions/heatmap.py,sha256=LDY8cpmsenkaWgDmaKuOPMyQcPCH4jQeMvgbZlTx2fc,11970
|
|
160
160
|
ultralytics/solutions/object_counter.py,sha256=nYwUN_9M5azW9zET_hnV7wIY8gDNR4LtUoWo4C2cbXw,11287
|
|
161
|
-
ultralytics/solutions/parking_management.py,sha256
|
|
161
|
+
ultralytics/solutions/parking_management.py,sha256=-AxUfpBoCCMAaYzeYRohCdBvG0Y7bG37Rvz04sO-6NE,9080
|
|
162
162
|
ultralytics/solutions/queue_management.py,sha256=TBQ2dIKYtymBjhdw0Enxa22KHyH3IdXf2C-1Se21siA,6684
|
|
163
163
|
ultralytics/solutions/speed_estimation.py,sha256=lvaU-F8f3V4KFVKFaNS7isIdYtMSFjh_zF9gl0Mals8,6714
|
|
164
164
|
ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
|
|
@@ -172,7 +172,7 @@ ultralytics/trackers/utils/kalman_filter.py,sha256=0oqhk59NKEiwcJ2FXnw6_sT4bIFC6
|
|
|
172
172
|
ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuUB6PfVNkb4,5404
|
|
173
173
|
ultralytics/utils/__init__.py,sha256=zyk1cbMtgG8LB9s1FRKRaN2ffMlkKQcVWnhGj1EPP5Y,39284
|
|
174
174
|
ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
|
|
175
|
-
ultralytics/utils/benchmarks.py,sha256=
|
|
175
|
+
ultralytics/utils/benchmarks.py,sha256=PlnUqhl2Om7jp7bKICDj9a2ABpJSl31VFI3ESnGdme8,23552
|
|
176
176
|
ultralytics/utils/checks.py,sha256=kwHcB_o8-bieQV2NNNZe2d37QSXyBdIN6XaMlARTUEE,28077
|
|
177
177
|
ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
|
|
178
178
|
ultralytics/utils/downloads.py,sha256=Rx32imHkKyVltEDMiCtCT2N5aA9Cud_0PyIUoTh4ru0,21496
|
|
@@ -199,9 +199,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
|
|
|
199
199
|
ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
|
|
200
200
|
ultralytics/utils/callbacks/tensorboard.py,sha256=Z1veCVcn9THPhdplWuIzwlsW2yF7y-On9IZIk3khM0Y,4135
|
|
201
201
|
ultralytics/utils/callbacks/wb.py,sha256=woCQVuZzqtM5KnwxIibcfM3sFBYojeMPnv11jrRaIQA,6674
|
|
202
|
-
ultralytics-8.2.
|
|
203
|
-
ultralytics-8.2.
|
|
204
|
-
ultralytics-8.2.
|
|
205
|
-
ultralytics-8.2.
|
|
206
|
-
ultralytics-8.2.
|
|
207
|
-
ultralytics-8.2.
|
|
202
|
+
ultralytics-8.2.9.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
203
|
+
ultralytics-8.2.9.dist-info/METADATA,sha256=hrfhGcmLk1eQ0BbrVYCSW6WLCeTgRFa6blqzRLzvyaY,40701
|
|
204
|
+
ultralytics-8.2.9.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
205
|
+
ultralytics-8.2.9.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
206
|
+
ultralytics-8.2.9.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
207
|
+
ultralytics-8.2.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|