dgenerate-ultralytics-headless 8.3.249__py3-none-any.whl → 8.3.250__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.
- {dgenerate_ultralytics_headless-8.3.249.dist-info → dgenerate_ultralytics_headless-8.3.250.dist-info}/METADATA +1 -1
- {dgenerate_ultralytics_headless-8.3.249.dist-info → dgenerate_ultralytics_headless-8.3.250.dist-info}/RECORD +12 -11
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/__init__.py +3 -1
- ultralytics/cfg/datasets/TT100K.yaml +356 -0
- ultralytics/engine/trainer.py +7 -3
- ultralytics/utils/callbacks/platform.py +1 -1
- ultralytics/utils/metrics.py +1 -1
- {dgenerate_ultralytics_headless-8.3.249.dist-info → dgenerate_ultralytics_headless-8.3.250.dist-info}/WHEEL +0 -0
- {dgenerate_ultralytics_headless-8.3.249.dist-info → dgenerate_ultralytics_headless-8.3.250.dist-info}/entry_points.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.249.dist-info → dgenerate_ultralytics_headless-8.3.250.dist-info}/licenses/LICENSE +0 -0
- {dgenerate_ultralytics_headless-8.3.249.dist-info → dgenerate_ultralytics_headless-8.3.250.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dgenerate-ultralytics-headless
|
|
3
|
-
Version: 8.3.
|
|
3
|
+
Version: 8.3.250
|
|
4
4
|
Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
|
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
dgenerate_ultralytics_headless-8.3.
|
|
1
|
+
dgenerate_ultralytics_headless-8.3.250.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
2
2
|
tests/__init__.py,sha256=bCox_hLdGRFYGLb2kd722VdNP2zEXNYNuLLYtqZSrbw,804
|
|
3
3
|
tests/conftest.py,sha256=mOy9lGpNp7lk1hHl6_pVE0f9cU-72gnkoSm4TO-CNZU,2318
|
|
4
4
|
tests/test_cli.py,sha256=GhIFHi-_WIJpDgoGNRi0DnjbfwP1wHbklBMnkCM-P_4,5464
|
|
@@ -8,11 +8,11 @@ tests/test_exports.py,sha256=5G5EgDmars6d-N7TVnJdDFWId0IJs-yw03DvdQIjrNU,14246
|
|
|
8
8
|
tests/test_integrations.py,sha256=6QgSh9n0J04RdUYz08VeVOnKmf4S5MDEQ0chzS7jo_c,6220
|
|
9
9
|
tests/test_python.py,sha256=viMvRajIbDZdm64hRRg9i8qZ1sU9frwB69e56mxwEXk,29266
|
|
10
10
|
tests/test_solutions.py,sha256=CIaphpmOXgz9AE9xcm1RWODKrwGfZLCc84IggGXArNM,14122
|
|
11
|
-
ultralytics/__init__.py,sha256=
|
|
11
|
+
ultralytics/__init__.py,sha256=v-hVhlejM2hHyVyOWQ59-HPirtK5Go1IZS0C8EMKfKY,1302
|
|
12
12
|
ultralytics/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
|
13
13
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
|
14
14
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
|
15
|
-
ultralytics/cfg/__init__.py,sha256=
|
|
15
|
+
ultralytics/cfg/__init__.py,sha256=T5bv7NdySatnqEvtOW4_qojIC3pmAbp0GlCwyk0RazU,40368
|
|
16
16
|
ultralytics/cfg/default.yaml,sha256=KKENSHolDSto1HJVGjBvTXvz9ae-XMcYRzKrjU3QfZc,8912
|
|
17
17
|
ultralytics/cfg/datasets/Argoverse.yaml,sha256=QGpdh3Hj5dFrvbsaE_8rAVj9BO4XpKTB7uhXaTTnE-o,3364
|
|
18
18
|
ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=KE7VC-ZMDSei1pLPm-pdk_ZAMRU_gLwGgtIQNbwp6dA,1212
|
|
@@ -22,6 +22,7 @@ ultralytics/cfg/datasets/HomeObjects-3K.yaml,sha256=xEtSqEad-rtfGuIrERjjhdISggmP
|
|
|
22
22
|
ultralytics/cfg/datasets/ImageNet.yaml,sha256=N9NHhIgnlNIBqZZbzQZAW3aCnz6RSXQABnopaDs5BmE,42529
|
|
23
23
|
ultralytics/cfg/datasets/Objects365.yaml,sha256=8Bl-NAm0mlMW8EfMsz39JZo-HCvmp0ejJXaMeoHTpqw,9649
|
|
24
24
|
ultralytics/cfg/datasets/SKU-110K.yaml,sha256=xvRkq3SdDOwBA91U85bln7HTXkod5MvFX6pt1PxTjJE,2609
|
|
25
|
+
ultralytics/cfg/datasets/TT100K.yaml,sha256=me7mEq3qDeL9_DpQBRS9jCVxsuByKuDBOwB0ePX0_LE,7369
|
|
25
26
|
ultralytics/cfg/datasets/VOC.yaml,sha256=XpaegRHjp7xZnenOuA9zgg2lQURSL-o7mLQwzIKKuqM,3803
|
|
26
27
|
ultralytics/cfg/datasets/VisDrone.yaml,sha256=PfudojW5av_5q-dC9VsG_xhvuv9cTGEpRp4loXCJ4Ng,3397
|
|
27
28
|
ultralytics/cfg/datasets/african-wildlife.yaml,sha256=6UfO_gnwJEDVq05p72IMJfkTIKZlXKNLSeKru-JyTrQ,915
|
|
@@ -127,7 +128,7 @@ ultralytics/engine/exporter.py,sha256=Ncf5GK5xAqSu0DH-6z5V53qZB7LstDJFTMF5a-7VQf
|
|
|
127
128
|
ultralytics/engine/model.py,sha256=61ea1rB0wmL0CCaEr8p5gzneH0eL55OOMaTcFt8fR80,53079
|
|
128
129
|
ultralytics/engine/predictor.py,sha256=neYmNDX27Vv3ggk9xqaKlH6XzB2vlFIghU5o7ZC0zFo,22838
|
|
129
130
|
ultralytics/engine/results.py,sha256=DomI01voqR_i7v8LhDGb6jWCprWB4H6I436GSO2NMBY,68030
|
|
130
|
-
ultralytics/engine/trainer.py,sha256=
|
|
131
|
+
ultralytics/engine/trainer.py,sha256=UQfxbcT983v9bXYNYH5MvzZmuega0ZUW-KqUoq4vxjE,45798
|
|
131
132
|
ultralytics/engine/tuner.py,sha256=qiozSxYC-Hk1TQgyftrYTKkqLrrwFzjjkT6mOYR3Vjc,21460
|
|
132
133
|
ultralytics/engine/validator.py,sha256=2rqdVt4hB9ruMJq-L7PbaCNFwuERS7ZHdVSg91RM3wk,17761
|
|
133
134
|
ultralytics/hub/__init__.py,sha256=Z0K_E00jzQh90b18q3IDChwVmTvyIYp6C00sCV-n2F8,6709
|
|
@@ -265,7 +266,7 @@ ultralytics/utils/git.py,sha256=UdqeIiiEzg1qkerAZrg5YtTYPuJYwrpxW9N_6Pq6s8U,5501
|
|
|
265
266
|
ultralytics/utils/instance.py,sha256=11mhefvTI9ftMqSirXuiViAi0Fxlo6v84qvNxfRNUoE,18862
|
|
266
267
|
ultralytics/utils/logger.py,sha256=T5iaNnaqbCvx_FZf1dhVkr5FVxyxb4vO17t4SJfCIhg,19132
|
|
267
268
|
ultralytics/utils/loss.py,sha256=t-z7qkvqF8OtuRHrj2wmvClZV2CCumIRi9jnqkc9i_A,39573
|
|
268
|
-
ultralytics/utils/metrics.py,sha256=
|
|
269
|
+
ultralytics/utils/metrics.py,sha256=SpyMGnuRwwmorJqSdUsDQquVpGmgfj1X3PNDiw_ZZWM,69152
|
|
269
270
|
ultralytics/utils/nms.py,sha256=zv1rOzMF6WU8Kdk41VzNf1H1EMt_vZHcbDFbg3mnN2o,14248
|
|
270
271
|
ultralytics/utils/ops.py,sha256=nWvTLJSBeW_XrxCy5Ytxl7sZJHp2sRqyCv4mm8QwYnw,25797
|
|
271
272
|
ultralytics/utils/patches.py,sha256=mD3slAMAhcezzP42_fOWmacNMU6zXB68Br4_EBCyIjs,7117
|
|
@@ -283,7 +284,7 @@ ultralytics/utils/callbacks/dvc.py,sha256=YT0Sa5P8Huj8Fn9jM2P6MYzUY3PIVxsa5BInVi
|
|
|
283
284
|
ultralytics/utils/callbacks/hub.py,sha256=fVLqqr3ZM6hoYFlVMEeejfq1MWDrkWCskPFOG3HGILQ,4159
|
|
284
285
|
ultralytics/utils/callbacks/mlflow.py,sha256=wCXjQgdufp9LYujqMzLZOmIOur6kvrApHNeo9dA7t_g,5323
|
|
285
286
|
ultralytics/utils/callbacks/neptune.py,sha256=_vt3cMwDHCR-LyT3KtRikGpj6AG11oQ-skUUUUdZ74o,4391
|
|
286
|
-
ultralytics/utils/callbacks/platform.py,sha256=
|
|
287
|
+
ultralytics/utils/callbacks/platform.py,sha256=R9KcdNQUKs-mS_oOxXeKK51uYWlGhVkvQnarKO6qmOk,14804
|
|
287
288
|
ultralytics/utils/callbacks/raytune.py,sha256=Y0dFyNZVRuFovSh7nkgUIHTQL3xIXOACElgHuYbg_5I,1278
|
|
288
289
|
ultralytics/utils/callbacks/tensorboard.py,sha256=PTJYvD2gqRUN8xw5VoTjvKnu2adukLfvhMlDgTnTiFU,4952
|
|
289
290
|
ultralytics/utils/callbacks/wb.py,sha256=ghmL3gigOa-z_F54-TzMraKw9MAaYX-Wk4H8dLoRvX8,7705
|
|
@@ -291,8 +292,8 @@ ultralytics/utils/export/__init__.py,sha256=Cfh-PwVfTF_lwPp-Ss4wiX4z8Sm1XRPklsqd
|
|
|
291
292
|
ultralytics/utils/export/engine.py,sha256=23-lC6dNsmz5vprSJzaN7UGNXrFlVedNcqhlOH_IXes,9956
|
|
292
293
|
ultralytics/utils/export/imx.py,sha256=2_mcNzqRIk5LB92JofqNYLN0kkQke1UgKT2jWmEy_l4,13300
|
|
293
294
|
ultralytics/utils/export/tensorflow.py,sha256=igYzwbdblb9YgfV4Jgl5lMvynuVRcF51dAzI7j-BBI0,9966
|
|
294
|
-
dgenerate_ultralytics_headless-8.3.
|
|
295
|
-
dgenerate_ultralytics_headless-8.3.
|
|
296
|
-
dgenerate_ultralytics_headless-8.3.
|
|
297
|
-
dgenerate_ultralytics_headless-8.3.
|
|
298
|
-
dgenerate_ultralytics_headless-8.3.
|
|
295
|
+
dgenerate_ultralytics_headless-8.3.250.dist-info/METADATA,sha256=iK_C4dYeMXmNoXQZhkhEq_uxDjF4SDef5-gWVXAZEgc,38799
|
|
296
|
+
dgenerate_ultralytics_headless-8.3.250.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
297
|
+
dgenerate_ultralytics_headless-8.3.250.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
298
|
+
dgenerate_ultralytics_headless-8.3.250.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
299
|
+
dgenerate_ultralytics_headless-8.3.250.dist-info/RECORD,,
|
ultralytics/__init__.py
CHANGED
ultralytics/cfg/__init__.py
CHANGED
|
@@ -410,7 +410,9 @@ def get_save_dir(args: SimpleNamespace, name: str | None = None) -> Path:
|
|
|
410
410
|
else:
|
|
411
411
|
from ultralytics.utils.files import increment_path
|
|
412
412
|
|
|
413
|
-
|
|
413
|
+
runs = (ROOT.parent / "tests/tmp/runs" if TESTS_RUNNING else RUNS_DIR) / args.task
|
|
414
|
+
nested = args.project and len(Path(args.project).parts) > 1 # e.g. "user/project" or "org\repo"
|
|
415
|
+
project = runs / args.project if nested else args.project or runs
|
|
414
416
|
name = name or args.name or f"{args.mode}"
|
|
415
417
|
save_dir = increment_path(Path(project) / name, exist_ok=args.exist_ok if RANK in {-1, 0} else True)
|
|
416
418
|
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
|
2
|
+
# Tsinghua-Tencent 100K Traffic Sign Detection Dataset
|
|
3
|
+
# Dataset: https://cg.cs.tsinghua.edu.cn/traffic-sign/
|
|
4
|
+
# Paper: Traffic-Sign Detection and Classification in the Wild (CVPR 2016)
|
|
5
|
+
# Documentation: 100,000 images with 30,000+ traffic sign annotations
|
|
6
|
+
# Example usage: yolo train data=TT100K.yaml
|
|
7
|
+
# parent
|
|
8
|
+
# ├── ultralytics
|
|
9
|
+
# └── datasets
|
|
10
|
+
# └── TT100K ← downloads here (~30 GB with images)
|
|
11
|
+
|
|
12
|
+
# Train/val/test sets
|
|
13
|
+
path: TT100K # dataset root dir
|
|
14
|
+
train: images/train # train images (relative to 'path')
|
|
15
|
+
val: images/val # val images (relative to 'path')
|
|
16
|
+
test: images/test # test images (relative to 'path')
|
|
17
|
+
|
|
18
|
+
# Classes
|
|
19
|
+
nc: 221
|
|
20
|
+
names:
|
|
21
|
+
0: pl5
|
|
22
|
+
1: pl10
|
|
23
|
+
2: pl15
|
|
24
|
+
3: pl20
|
|
25
|
+
4: pl25
|
|
26
|
+
5: pl30
|
|
27
|
+
6: pl40
|
|
28
|
+
7: pl50
|
|
29
|
+
8: pl60
|
|
30
|
+
9: pl70
|
|
31
|
+
10: pl80
|
|
32
|
+
11: pl90
|
|
33
|
+
12: pl100
|
|
34
|
+
13: pl110
|
|
35
|
+
14: pl120
|
|
36
|
+
15: pm5
|
|
37
|
+
16: pm10
|
|
38
|
+
17: pm13
|
|
39
|
+
18: pm15
|
|
40
|
+
19: pm20
|
|
41
|
+
20: pm25
|
|
42
|
+
21: pm30
|
|
43
|
+
22: pm35
|
|
44
|
+
23: pm40
|
|
45
|
+
24: pm46
|
|
46
|
+
25: pm50
|
|
47
|
+
26: pm55
|
|
48
|
+
27: pm8
|
|
49
|
+
28: pn
|
|
50
|
+
29: pne
|
|
51
|
+
30: ph4
|
|
52
|
+
31: ph4.5
|
|
53
|
+
32: ph5
|
|
54
|
+
33: ps
|
|
55
|
+
34: pg
|
|
56
|
+
35: ph1.5
|
|
57
|
+
36: ph2
|
|
58
|
+
37: ph2.1
|
|
59
|
+
38: ph2.2
|
|
60
|
+
39: ph2.4
|
|
61
|
+
40: ph2.5
|
|
62
|
+
41: ph2.8
|
|
63
|
+
42: ph2.9
|
|
64
|
+
43: ph3
|
|
65
|
+
44: ph3.2
|
|
66
|
+
45: ph3.5
|
|
67
|
+
46: ph3.8
|
|
68
|
+
47: ph4.2
|
|
69
|
+
48: ph4.3
|
|
70
|
+
49: ph4.8
|
|
71
|
+
50: ph5.3
|
|
72
|
+
51: ph5.5
|
|
73
|
+
52: pb
|
|
74
|
+
53: pr10
|
|
75
|
+
54: pr100
|
|
76
|
+
55: pr20
|
|
77
|
+
56: pr30
|
|
78
|
+
57: pr40
|
|
79
|
+
58: pr45
|
|
80
|
+
59: pr50
|
|
81
|
+
60: pr60
|
|
82
|
+
61: pr70
|
|
83
|
+
62: pr80
|
|
84
|
+
63: pr90
|
|
85
|
+
64: p1
|
|
86
|
+
65: p2
|
|
87
|
+
66: p3
|
|
88
|
+
67: p4
|
|
89
|
+
68: p5
|
|
90
|
+
69: p6
|
|
91
|
+
70: p7
|
|
92
|
+
71: p8
|
|
93
|
+
72: p9
|
|
94
|
+
73: p10
|
|
95
|
+
74: p11
|
|
96
|
+
75: p12
|
|
97
|
+
76: p13
|
|
98
|
+
77: p14
|
|
99
|
+
78: p15
|
|
100
|
+
79: p16
|
|
101
|
+
80: p17
|
|
102
|
+
81: p18
|
|
103
|
+
82: p19
|
|
104
|
+
83: p20
|
|
105
|
+
84: p21
|
|
106
|
+
85: p22
|
|
107
|
+
86: p23
|
|
108
|
+
87: p24
|
|
109
|
+
88: p25
|
|
110
|
+
89: p26
|
|
111
|
+
90: p27
|
|
112
|
+
91: p28
|
|
113
|
+
92: pa8
|
|
114
|
+
93: pa10
|
|
115
|
+
94: pa12
|
|
116
|
+
95: pa13
|
|
117
|
+
96: pa14
|
|
118
|
+
97: pb5
|
|
119
|
+
98: pc
|
|
120
|
+
99: pg
|
|
121
|
+
100: ph1
|
|
122
|
+
101: ph1.3
|
|
123
|
+
102: ph1.5
|
|
124
|
+
103: ph2
|
|
125
|
+
104: ph3
|
|
126
|
+
105: ph4
|
|
127
|
+
106: ph5
|
|
128
|
+
107: pi
|
|
129
|
+
108: pl0
|
|
130
|
+
109: pl4
|
|
131
|
+
110: pl5
|
|
132
|
+
111: pl8
|
|
133
|
+
112: pl10
|
|
134
|
+
113: pl15
|
|
135
|
+
114: pl20
|
|
136
|
+
115: pl25
|
|
137
|
+
116: pl30
|
|
138
|
+
117: pl35
|
|
139
|
+
118: pl40
|
|
140
|
+
119: pl50
|
|
141
|
+
120: pl60
|
|
142
|
+
121: pl65
|
|
143
|
+
122: pl70
|
|
144
|
+
123: pl80
|
|
145
|
+
124: pl90
|
|
146
|
+
125: pl100
|
|
147
|
+
126: pl110
|
|
148
|
+
127: pl120
|
|
149
|
+
128: pm2
|
|
150
|
+
129: pm8
|
|
151
|
+
130: pm10
|
|
152
|
+
131: pm13
|
|
153
|
+
132: pm15
|
|
154
|
+
133: pm20
|
|
155
|
+
134: pm25
|
|
156
|
+
135: pm30
|
|
157
|
+
136: pm35
|
|
158
|
+
137: pm40
|
|
159
|
+
138: pm46
|
|
160
|
+
139: pm50
|
|
161
|
+
140: pm55
|
|
162
|
+
141: pn
|
|
163
|
+
142: pne
|
|
164
|
+
143: po
|
|
165
|
+
144: pr10
|
|
166
|
+
145: pr100
|
|
167
|
+
146: pr20
|
|
168
|
+
147: pr30
|
|
169
|
+
148: pr40
|
|
170
|
+
149: pr45
|
|
171
|
+
150: pr50
|
|
172
|
+
151: pr60
|
|
173
|
+
152: pr70
|
|
174
|
+
153: pr80
|
|
175
|
+
154: ps
|
|
176
|
+
155: w1
|
|
177
|
+
156: w2
|
|
178
|
+
157: w3
|
|
179
|
+
158: w5
|
|
180
|
+
159: w8
|
|
181
|
+
160: w10
|
|
182
|
+
161: w12
|
|
183
|
+
162: w13
|
|
184
|
+
163: w16
|
|
185
|
+
164: w18
|
|
186
|
+
165: w20
|
|
187
|
+
166: w21
|
|
188
|
+
167: w22
|
|
189
|
+
168: w24
|
|
190
|
+
169: w28
|
|
191
|
+
170: w30
|
|
192
|
+
171: w31
|
|
193
|
+
172: w32
|
|
194
|
+
173: w34
|
|
195
|
+
174: w35
|
|
196
|
+
175: w37
|
|
197
|
+
176: w38
|
|
198
|
+
177: w41
|
|
199
|
+
178: w42
|
|
200
|
+
179: w43
|
|
201
|
+
180: w44
|
|
202
|
+
181: w45
|
|
203
|
+
182: w46
|
|
204
|
+
183: w47
|
|
205
|
+
184: w48
|
|
206
|
+
185: w49
|
|
207
|
+
186: w50
|
|
208
|
+
187: w51
|
|
209
|
+
188: w52
|
|
210
|
+
189: w53
|
|
211
|
+
190: w54
|
|
212
|
+
191: w55
|
|
213
|
+
192: w56
|
|
214
|
+
193: w57
|
|
215
|
+
194: w58
|
|
216
|
+
195: w59
|
|
217
|
+
196: w60
|
|
218
|
+
197: w62
|
|
219
|
+
198: w63
|
|
220
|
+
199: w66
|
|
221
|
+
200: i1
|
|
222
|
+
201: i2
|
|
223
|
+
202: i3
|
|
224
|
+
203: i4
|
|
225
|
+
204: i5
|
|
226
|
+
205: i6
|
|
227
|
+
206: i7
|
|
228
|
+
207: i8
|
|
229
|
+
208: i9
|
|
230
|
+
209: i10
|
|
231
|
+
210: i11
|
|
232
|
+
211: i12
|
|
233
|
+
212: i13
|
|
234
|
+
213: i14
|
|
235
|
+
214: i15
|
|
236
|
+
215: il60
|
|
237
|
+
216: il80
|
|
238
|
+
217: il100
|
|
239
|
+
218: il110
|
|
240
|
+
219: io
|
|
241
|
+
220: ip
|
|
242
|
+
|
|
243
|
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
|
244
|
+
download: |
|
|
245
|
+
import os
|
|
246
|
+
import json
|
|
247
|
+
import shutil
|
|
248
|
+
from pathlib import Path
|
|
249
|
+
from ultralytics.utils.downloads import download
|
|
250
|
+
from ultralytics.utils import TQDM
|
|
251
|
+
|
|
252
|
+
def tt100k2yolo(dir):
|
|
253
|
+
"""Convert TT100K annotations to YOLO format."""
|
|
254
|
+
from PIL import Image
|
|
255
|
+
|
|
256
|
+
data_dir = dir / "data"
|
|
257
|
+
anno_file = data_dir / "annotations.json"
|
|
258
|
+
|
|
259
|
+
print("Loading annotations...")
|
|
260
|
+
with open(anno_file, 'r', encoding='utf-8') as f:
|
|
261
|
+
data = json.load(f)
|
|
262
|
+
|
|
263
|
+
# Get all unique classes
|
|
264
|
+
classes = set()
|
|
265
|
+
for img_id, img_data in data['imgs'].items():
|
|
266
|
+
for obj in img_data.get('objects', []):
|
|
267
|
+
classes.add(obj['category'])
|
|
268
|
+
class_to_idx = {cls: idx for idx, cls in enumerate(yaml["names"]) if cls in classes}
|
|
269
|
+
class_to_idx = {cls: idx for idx, cls in enumerate(classes)}
|
|
270
|
+
|
|
271
|
+
print(f"Found {len(classes)} traffic sign classes")
|
|
272
|
+
|
|
273
|
+
# Create directories
|
|
274
|
+
for split in ['train', 'val', 'test']:
|
|
275
|
+
(dir / 'images' / split).mkdir(parents=True, exist_ok=True)
|
|
276
|
+
(dir / 'labels' / split).mkdir(parents=True, exist_ok=True)
|
|
277
|
+
|
|
278
|
+
print("Converting annotations to YOLO format...")
|
|
279
|
+
for img_id, img_data in TQDM(data['imgs'].items(), desc="Processing"):
|
|
280
|
+
img_path_str = img_data['path']
|
|
281
|
+
if 'train' in img_path_str:
|
|
282
|
+
split = 'train'
|
|
283
|
+
elif 'test' in img_path_str:
|
|
284
|
+
split = 'test'
|
|
285
|
+
else:
|
|
286
|
+
split = 'val'
|
|
287
|
+
|
|
288
|
+
# Source and destination paths
|
|
289
|
+
src_img = data_dir / img_path_str
|
|
290
|
+
if not src_img.exists():
|
|
291
|
+
continue
|
|
292
|
+
|
|
293
|
+
img_name = src_img.name
|
|
294
|
+
dst_img = dir / 'images' / split / img_name
|
|
295
|
+
|
|
296
|
+
# Get image dimensions
|
|
297
|
+
try:
|
|
298
|
+
with Image.open(src_img) as img:
|
|
299
|
+
img_width, img_height = img.size
|
|
300
|
+
except Exception as e:
|
|
301
|
+
print(f"Error reading {src_img}: {e}")
|
|
302
|
+
continue
|
|
303
|
+
shutil.copy2(src_img, dst_img)
|
|
304
|
+
label_file = dir / 'labels' / split / f"{src_img.stem}.txt"
|
|
305
|
+
lines = []
|
|
306
|
+
|
|
307
|
+
for obj in img_data.get('objects', []):
|
|
308
|
+
category = obj['category']
|
|
309
|
+
if category not in class_to_idx:
|
|
310
|
+
continue
|
|
311
|
+
|
|
312
|
+
bbox = obj['bbox']
|
|
313
|
+
xmin, ymin = bbox['xmin'], bbox['ymin']
|
|
314
|
+
xmax, ymax = bbox['xmax'], bbox['ymax']
|
|
315
|
+
|
|
316
|
+
# Convert to YOLO format (normalized center coordinates and dimensions)
|
|
317
|
+
x_center = ((xmin + xmax) / 2.0) / img_width
|
|
318
|
+
y_center = ((ymin + ymax) / 2.0) / img_height
|
|
319
|
+
width = (xmax - xmin) / img_width
|
|
320
|
+
height = (ymax - ymin) / img_height
|
|
321
|
+
|
|
322
|
+
# Ensure valid coordinates
|
|
323
|
+
x_center = max(0, min(1, x_center))
|
|
324
|
+
y_center = max(0, min(1, y_center))
|
|
325
|
+
width = max(0, min(1, width))
|
|
326
|
+
height = max(0, min(1, height))
|
|
327
|
+
|
|
328
|
+
cls_idx = class_to_idx[category]
|
|
329
|
+
lines.append(f"{cls_idx} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")
|
|
330
|
+
|
|
331
|
+
# Write label file
|
|
332
|
+
if lines:
|
|
333
|
+
label_file.write_text("".join(lines), encoding="utf-8")
|
|
334
|
+
|
|
335
|
+
print(f"Conversion complete!")
|
|
336
|
+
print(f"Found {len(classes)} classes: {classes[:10]}..." if len(classes) > 10 else f"Classes: {classes}")
|
|
337
|
+
|
|
338
|
+
return classes
|
|
339
|
+
|
|
340
|
+
# Download dataset
|
|
341
|
+
dir = Path(yaml['path']) # dataset root dir
|
|
342
|
+
|
|
343
|
+
# TT100K dataset URLs
|
|
344
|
+
urls = [
|
|
345
|
+
'https://cg.cs.tsinghua.edu.cn/traffic-sign/data_model_code/data.zip', # Main dataset with annotations
|
|
346
|
+
]
|
|
347
|
+
|
|
348
|
+
print("Downloading TT100K dataset...")
|
|
349
|
+
print("Note: This dataset is large (~30GB). Download may take some time.")
|
|
350
|
+
print("Dataset is under CC-BY-NC license for non-commercial use only.")
|
|
351
|
+
|
|
352
|
+
# Download and extract
|
|
353
|
+
download(urls, dir=dir, unzip=True, delete=False, curl=False, threads=1)
|
|
354
|
+
|
|
355
|
+
# Convert dataset in YOLO format
|
|
356
|
+
classes = tt100k2yolo(dir)
|
ultralytics/engine/trainer.py
CHANGED
|
@@ -631,13 +631,17 @@ class BaseTrainer:
|
|
|
631
631
|
try:
|
|
632
632
|
if self.args.task == "classify":
|
|
633
633
|
data = check_cls_dataset(self.args.data)
|
|
634
|
-
elif str(self.args.data).rsplit(".", 1)[-1] == "ndjson"
|
|
635
|
-
|
|
634
|
+
elif str(self.args.data).rsplit(".", 1)[-1] == "ndjson" or (
|
|
635
|
+
str(self.args.data).startswith("ul://") and "/datasets/" in str(self.args.data)
|
|
636
|
+
):
|
|
637
|
+
# Convert NDJSON to YOLO format (including ul:// platform dataset URIs)
|
|
636
638
|
import asyncio
|
|
637
639
|
|
|
638
640
|
from ultralytics.data.converter import convert_ndjson_to_yolo
|
|
641
|
+
from ultralytics.utils.checks import check_file
|
|
639
642
|
|
|
640
|
-
|
|
643
|
+
ndjson_file = check_file(self.args.data) # Resolve ul:// or URL to local .ndjson file
|
|
644
|
+
yaml_path = asyncio.run(convert_ndjson_to_yolo(ndjson_file))
|
|
641
645
|
self.args.data = str(yaml_path)
|
|
642
646
|
data = check_det_dataset(self.args.data)
|
|
643
647
|
elif str(self.args.data).rsplit(".", 1)[-1] in {"yaml", "yml"} or self.args.task in {
|
|
@@ -62,7 +62,7 @@ def resolve_platform_uri(uri, hard=True):
|
|
|
62
62
|
if not api_key:
|
|
63
63
|
raise ValueError(f"ULTRALYTICS_API_KEY required for '{uri}'. Get key at https://alpha.ultralytics.com/settings")
|
|
64
64
|
|
|
65
|
-
base = "https://alpha.ultralytics.com/api/
|
|
65
|
+
base = "https://alpha.ultralytics.com/api/webhooks"
|
|
66
66
|
headers = {"Authorization": f"Bearer {api_key}"}
|
|
67
67
|
|
|
68
68
|
# ul://username/datasets/slug
|
ultralytics/utils/metrics.py
CHANGED
|
@@ -315,7 +315,7 @@ class ConfusionMatrix(DataExportMixin):
|
|
|
315
315
|
matches (dict): Contains the indices of ground truths and predictions categorized into TP, FP and FN.
|
|
316
316
|
"""
|
|
317
317
|
|
|
318
|
-
def __init__(self, names: dict[int, str] =
|
|
318
|
+
def __init__(self, names: dict[int, str] = {}, task: str = "detect", save_matches: bool = False):
|
|
319
319
|
"""Initialize a ConfusionMatrix instance.
|
|
320
320
|
|
|
321
321
|
Args:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|