hilaus-arm commited on
Commit
565a0d7
·
verified ·
1 Parent(s): 8924a13

Sync from arm/Optimized-Runtimes via hub-sync

Browse files
Makefile CHANGED
@@ -60,9 +60,13 @@ endif
60
 
61
  # Ultralytics benchmark
62
  ULTRALYTICS_VENV ?= $(ROOT)/benchmarks/ultralytics/.venv
63
- # TODO: Fetch and use the pinned coco-128-by-sa revision by default once the
64
- # dataset is public.
65
- DATA ?= coco128.yaml
 
 
 
 
66
  SOURCE_REVISION ?= $(shell git rev-parse HEAD)
67
  # Evidence is immutable, so each default invocation needs a fresh directory.
68
  BENCHMARK_RUN_ID := $(shell date -u +%Y%m%dT%H%M%S%NZ)-$(shell printf '%.12s' "$(SOURCE_REVISION)")
@@ -232,21 +236,22 @@ release: runtime _release-converter _release-api
232
  # dependencies; callers provide the hash-locked build environment defined by
233
  # requirements-build.txt. CI installs that environment with --require-hashes.
234
  .PHONY: _release-converter
235
- _release-converter:
236
  mkdir -p "$(PACKAGE_DIST)"
237
  @# Give setuptools a self-contained project without writing build state into
238
  @# the converter source directory or duplicating the repository version.
239
  @staging="$$(mktemp -d)"; \
240
  trap 'rm -rf -- "$$staging"' EXIT; \
241
  cp src/converter/*.py src/converter/pyproject.toml \
242
- src/converter/VERSION src/converter/LICENSE "$$staging/"; \
243
- PIP_CONFIG_FILE=/dev/null "$(PYTHON)" -m pip wheel \
 
244
  --no-deps --no-build-isolation --wheel-dir "$(PACKAGE_DIST)" "$$staging"
245
 
246
  .PHONY: _release-api
247
- _release-api:
248
  mkdir -p "$(PACKAGE_DIST)"
249
- PIP_CONFIG_FILE=/dev/null "$(PYTHON)" -m pip wheel \
250
  --no-deps --no-build-isolation --wheel-dir "$(PACKAGE_DIST)" .
251
 
252
  # Examples
@@ -350,9 +355,14 @@ $(ULTRALYTICS_VENV)/pyvenv.cfg: benchmarks/ultralytics/patch.sh \
350
  $(wildcard src/runtime/api/python/arm_yolo26n/*.py)
351
  ./benchmarks/ultralytics/patch.sh "$(ULTRALYTICS_VENV)"
352
 
 
 
 
 
 
353
  .PHONY: ultralytics-benchmark
354
  ultralytics-benchmark: $(RUNTIME) $(MODEL)/manifest.json $(MODEL)/model.bin \
355
- $(ULTRALYTICS_VENV)/pyvenv.cfg
356
  "$(PYTHON)" -m benchmarks.ultralytics.benchmark \
357
  --runtime "$(RUNTIME)" \
358
  --model "$(MODEL)" \
 
60
 
61
  # Ultralytics benchmark
62
  ULTRALYTICS_VENV ?= $(ROOT)/benchmarks/ultralytics/.venv
63
+ DATASET_REVISION := 97d6ea181e9dd0784db880b705e426ad23d424e1
64
+ DATASET_DIR := $(ROOT)/downloads/datasets/coco-128-by-sa-$(DATASET_REVISION)
65
+ DATASET_CONFIG := $(DATASET_DIR)/benchmark.yaml
66
+ DATA ?= $(DATASET_CONFIG)
67
+ ifeq ($(origin DATA), file)
68
+ DATA_REQUIREMENT := $(DATASET_CONFIG)
69
+ endif
70
  SOURCE_REVISION ?= $(shell git rev-parse HEAD)
71
  # Evidence is immutable, so each default invocation needs a fresh directory.
72
  BENCHMARK_RUN_ID := $(shell date -u +%Y%m%dT%H%M%S%NZ)-$(shell printf '%.12s' "$(SOURCE_REVISION)")
 
236
  # dependencies; callers provide the hash-locked build environment defined by
237
  # requirements-build.txt. CI installs that environment with --require-hashes.
238
  .PHONY: _release-converter
239
+ _release-converter: _dev
240
  mkdir -p "$(PACKAGE_DIST)"
241
  @# Give setuptools a self-contained project without writing build state into
242
  @# the converter source directory or duplicating the repository version.
243
  @staging="$$(mktemp -d)"; \
244
  trap 'rm -rf -- "$$staging"' EXIT; \
245
  cp src/converter/*.py src/converter/pyproject.toml \
246
+ src/converter/VERSION "$$staging/"; \
247
+ install --mode 0644 "$(ROOT)/../LICENSE" "$$staging/LICENSE"; \
248
+ PIP_CONFIG_FILE=/dev/null "$(DEV_VENV)/bin/python" -m pip wheel \
249
  --no-deps --no-build-isolation --wheel-dir "$(PACKAGE_DIST)" "$$staging"
250
 
251
  .PHONY: _release-api
252
+ _release-api: _dev
253
  mkdir -p "$(PACKAGE_DIST)"
254
+ PIP_CONFIG_FILE=/dev/null "$(DEV_VENV)/bin/python" -m pip wheel \
255
  --no-deps --no-build-isolation --wheel-dir "$(PACKAGE_DIST)" .
256
 
257
  # Examples
 
355
  $(wildcard src/runtime/api/python/arm_yolo26n/*.py)
356
  ./benchmarks/ultralytics/patch.sh "$(ULTRALYTICS_VENV)"
357
 
358
+ $(DATASET_CONFIG): benchmarks/ultralytics/download_dataset.sh
359
+ @printf 'Downloading coco-128-by-sa dataset revision %s\n' "$(DATASET_REVISION)"
360
+ ./benchmarks/ultralytics/download_dataset.sh \
361
+ "$(DATASET_REVISION)" "$(DATASET_DIR)"
362
+
363
  .PHONY: ultralytics-benchmark
364
  ultralytics-benchmark: $(RUNTIME) $(MODEL)/manifest.json $(MODEL)/model.bin \
365
+ $(ULTRALYTICS_VENV)/pyvenv.cfg $(DATA_REQUIREMENT)
366
  "$(PYTHON)" -m benchmarks.ultralytics.benchmark \
367
  --runtime "$(RUNTIME)" \
368
  --model "$(MODEL)" \
README.md CHANGED
@@ -53,7 +53,10 @@ sudo apt install --yes --no-install-recommends \
53
  ca-certificates \
54
  curl \
55
  git \
 
 
56
  make \
 
57
  python3 \
58
  python3-venv \
59
  tar \
@@ -106,6 +109,7 @@ sudo apt install --yes --no-install-recommends \
106
  build-essential \
107
  ca-certificates \
108
  cmake \
 
109
  git \
110
  patch \
111
  python3 \
 
53
  ca-certificates \
54
  curl \
55
  git \
56
+ libgl1 \
57
+ libglib2.0-0t64 \
58
  make \
59
+ patch \
60
  python3 \
61
  python3-venv \
62
  tar \
 
109
  build-essential \
110
  ca-certificates \
111
  cmake \
112
+ curl \
113
  git \
114
  patch \
115
  python3 \
benchmarks/reporting/baseline.md CHANGED
@@ -6,8 +6,8 @@ changes must use the same dataset and validation configuration before comparing
6
  their results with this measurement.
7
 
8
  The measurement uses the published Hugging Face dataset revision identified
9
- below. Benchmark operators must download that revision and supply its local
10
- validation configuration explicitly with `DATA=/path/to/data.yaml`.
11
 
12
  ## Measurement
13
 
 
6
  their results with this measurement.
7
 
8
  The measurement uses the published Hugging Face dataset revision identified
9
+ below. The default benchmark target downloads and uses that pinned revision
10
+ automatically.
11
 
12
  ## Measurement
13
 
benchmarks/ultralytics/README.md CHANGED
@@ -7,6 +7,7 @@ runtimes.
7
  ## Usage
8
 
9
  Run these commands from the `yolo26-raspberry-pi-5/` runtime directory.
 
10
 
11
  Run the benchmark:
12
 
@@ -14,8 +15,10 @@ Run the benchmark:
14
  make ultralytics-benchmark
15
  ```
16
 
17
- The target prepares any missing default runtime, converted model, and pinned
18
- benchmark environment.
 
 
19
 
20
  Select another Ultralytics dataset configuration with `DATA`:
21
 
 
7
  ## Usage
8
 
9
  Run these commands from the `yolo26-raspberry-pi-5/` runtime directory.
10
+ Install the [project prerequisites](../../README.md#prerequisites) first.
11
 
12
  Run the benchmark:
13
 
 
15
  make ultralytics-benchmark
16
  ```
17
 
18
+ The target prepares any missing default runtime, converted model, pinned
19
+ benchmark environment, and pinned revision of the public
20
+ [`Arm/coco-128-by-sa`](https://huggingface.co/datasets/Arm/coco-128-by-sa)
21
+ dataset.
22
 
23
  Select another Ultralytics dataset configuration with `DATA`:
24
 
benchmarks/ultralytics/download_dataset.sh ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ revision="$1"
5
+ output="$2"
6
+ base="https://huggingface.co/datasets/Arm/coco-128-by-sa/resolve/$revision"
7
+ manifest="LICENSE_MANIFEST.csv"
8
+
9
+ # The manifest is the dataset's lightweight index of image paths. Publish it
10
+ # only after curl succeeds so an interrupted transfer cannot become the index.
11
+ mkdir -p "$output"
12
+ curl --fail --location --retry 3 --silent --show-error \
13
+ --output "$output/$manifest.part" "$base/$manifest"
14
+ mv "$output/$manifest.part" "$output/$manifest"
15
+
16
+ paths=(
17
+ data.yaml
18
+ )
19
+
20
+ # The first three CSV fields contain no commas. Validate them before using
21
+ # repository-controlled values as local paths and download URLs.
22
+ while IFS=, read -r image_id file_name relative_path _; do
23
+ if [[ "$image_id" == image_id ]]; then
24
+ continue
25
+ fi
26
+ [[ "$image_id" =~ ^[0-9]+$ ]]
27
+ [[ "$file_name" =~ ^[0-9]{12}\.jpg$ ]]
28
+ [[ "$relative_path" == "images/train2017/$file_name" ]]
29
+ paths+=("$relative_path" "labels/train2017/${file_name%.jpg}.txt")
30
+ done < "$output/$manifest"
31
+
32
+ # Build one bounded parallel curl operation. --next separates the options for
33
+ # each transfer, and every transfer writes to a temporary path.
34
+ arguments=(--parallel --parallel-max 8)
35
+ first=true
36
+ for path in "${paths[@]}"; do
37
+ mkdir -p "$(dirname "$output/$path")"
38
+ if ! $first; then
39
+ arguments+=(--next)
40
+ fi
41
+ first=false
42
+ arguments+=(
43
+ --fail --location --retry 3 --silent --show-error
44
+ --url "$base/$path" --output "$output/$path.part"
45
+ )
46
+ done
47
+ curl "${arguments[@]}"
48
+
49
+ # Publish the dataset files only after every parallel transfer has succeeded.
50
+ for path in "${paths[@]}"; do
51
+ mv "$output/$path.part" "$output/$path"
52
+ done
53
+
54
+ # Ultralytics resolves "path: ." against its working directory rather than the
55
+ # source YAML's directory. Generate an absolute-path benchmark configuration,
56
+ # escaping single quotes according to YAML rules. Written last, this file is
57
+ # also the Make target that records successful dataset preparation.
58
+ escaped_output=${output//\'/\'\'}
59
+ {
60
+ printf "path: '%s'\n" "$escaped_output"
61
+ tail -n +2 "$output/data.yaml"
62
+ } > "$output/benchmark.yaml.part"
63
+ mv "$output/benchmark.yaml.part" "$output/benchmark.yaml"
examples/picamera2/README.md CHANGED
@@ -36,6 +36,14 @@ Confirm camera access:
36
  rpicam-hello --list-cameras
37
  ```
38
 
 
 
 
 
 
 
 
 
39
  To use your own compatible model, see [Acquiring a model](../../README.md#acquiring-a-model).
40
  Otherwise, the pinned standard YOLO26n checkpoint is downloaded and converted
41
  automatically.
 
36
  rpicam-hello --list-cameras
37
  ```
38
 
39
+ For a graphical preview, also install the Qt and OpenGL Python bindings:
40
+
41
+ ```bash
42
+ sudo apt install --yes --no-install-recommends \
43
+ python3-opengl \
44
+ python3-pyqt5
45
+ ```
46
+
47
  To use your own compatible model, see [Acquiring a model](../../README.md#acquiring-a-model).
48
  Otherwise, the pinned standard YOLO26n checkpoint is downloaded and converted
49
  automatically.
src/converter/LICENSE DELETED
@@ -1,201 +0,0 @@
1
- Apache License
2
- Version 2.0, January 2004
3
- http://www.apache.org/licenses/
4
-
5
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
-
7
- 1. Definitions.
8
-
9
- "License" shall mean the terms and conditions for use, reproduction,
10
- and distribution as defined by Sections 1 through 9 of this document.
11
-
12
- "Licensor" shall mean the copyright owner or entity authorized by
13
- the copyright owner that is granting the License.
14
-
15
- "Legal Entity" shall mean the union of the acting entity and all
16
- other entities that control, are controlled by, or are under common
17
- control with that entity. For the purposes of this definition,
18
- "control" means (i) the power, direct or indirect, to cause the
19
- direction or management of such entity, whether by contract or
20
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
- outstanding shares, or (iii) beneficial ownership of such entity.
22
-
23
- "You" (or "Your") shall mean an individual or Legal Entity
24
- exercising permissions granted by this License.
25
-
26
- "Source" form shall mean the preferred form for making modifications,
27
- including but not limited to software source code, documentation
28
- source, and configuration files.
29
-
30
- "Object" form shall mean any form resulting from mechanical
31
- transformation or translation of a Source form, including but
32
- not limited to compiled object code, generated documentation,
33
- and conversions to other media types.
34
-
35
- "Work" shall mean the work of authorship, whether in Source or
36
- Object form, made available under the License, as indicated by a
37
- copyright notice that is included in or attached to the work
38
- (an example is provided in the Appendix below).
39
-
40
- "Derivative Works" shall mean any work, whether in Source or Object
41
- form, that is based on (or derived from) the Work and for which the
42
- editorial revisions, annotations, elaborations, or other modifications
43
- represent, as a whole, an original work of authorship. For the purposes
44
- of this License, Derivative Works shall not include works that remain
45
- separable from, or merely link (or bind by name) to the interfaces of,
46
- the Work and Derivative Works thereof.
47
-
48
- "Contribution" shall mean any work of authorship, including
49
- the original version of the Work and any modifications or additions
50
- to that Work or Derivative Works thereof, that is intentionally
51
- submitted to Licensor for inclusion in the Work by the copyright owner
52
- or by an individual or Legal Entity authorized to submit on behalf of
53
- the copyright owner. For the purposes of this definition, "submitted"
54
- means any form of electronic, verbal, or written communication sent
55
- to the Licensor or its representatives, including but not limited to
56
- communication on electronic mailing lists, source code control systems,
57
- and issue tracking systems that are managed by, or on behalf of, the
58
- Licensor for the purpose of discussing and improving the Work, but
59
- excluding communication that is conspicuously marked or otherwise
60
- designated in writing by the copyright owner as "Not a Contribution."
61
-
62
- "Contributor" shall mean Licensor and any individual or Legal Entity
63
- on behalf of whom a Contribution has been received by Licensor and
64
- subsequently incorporated within the Work.
65
-
66
- 2. Grant of Copyright License. Subject to the terms and conditions of
67
- this License, each Contributor hereby grants to You a perpetual,
68
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
- copyright license to reproduce, prepare Derivative Works of,
70
- publicly display, publicly perform, sublicense, and distribute the
71
- Work and such Derivative Works in Source or Object form.
72
-
73
- 3. Grant of Patent License. Subject to the terms and conditions of
74
- this License, each Contributor hereby grants to You a perpetual,
75
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
- (except as stated in this section) patent license to make, have made,
77
- use, offer to sell, sell, import, and otherwise transfer the Work,
78
- where such license applies only to those patent claims licensable
79
- by such Contributor that are necessarily infringed by their
80
- Contribution(s) alone or by combination of their Contribution(s)
81
- with the Work to which such Contribution(s) was submitted. If You
82
- institute patent litigation against any entity (including a
83
- cross-claim or counterclaim in a lawsuit) alleging that the Work
84
- or a Contribution incorporated within the Work constitutes direct
85
- or contributory patent infringement, then any patent licenses
86
- granted to You under this License for that Work shall terminate
87
- as of the date such litigation is filed.
88
-
89
- 4. Redistribution. You may reproduce and distribute copies of the
90
- Work or Derivative Works thereof in any medium, with or without
91
- modifications, and in Source or Object form, provided that You
92
- meet the following conditions:
93
-
94
- (a) You must give any other recipients of the Work or
95
- Derivative Works a copy of this License; and
96
-
97
- (b) You must cause any modified files to carry prominent notices
98
- stating that You changed the files; and
99
-
100
- (c) You must retain, in the Source form of any Derivative Works
101
- that You distribute, all copyright, patent, trademark, and
102
- attribution notices from the Source form of the Work,
103
- excluding those notices that do not pertain to any part of
104
- the Derivative Works; and
105
-
106
- (d) If the Work includes a "NOTICE" text file as part of its
107
- distribution, then any Derivative Works that You distribute must
108
- include a readable copy of the attribution notices contained
109
- within such NOTICE file, excluding those notices that do not
110
- pertain to any part of the Derivative Works, in at least one
111
- of the following places: within a NOTICE text file distributed
112
- as part of the Derivative Works; within the Source form or
113
- documentation, if provided along with the Derivative Works; or,
114
- within a display generated by the Derivative Works, if and
115
- wherever such third-party notices normally appear. The contents
116
- of the NOTICE file are for informational purposes only and
117
- do not modify the License. You may add Your own attribution
118
- notices within Derivative Works that You distribute, alongside
119
- or as an addendum to the NOTICE text from the Work, provided
120
- that such additional attribution notices cannot be construed
121
- as modifying the License.
122
-
123
- You may add Your own copyright statement to Your modifications and
124
- may provide additional or different license terms and conditions
125
- for use, reproduction, or distribution of Your modifications, or
126
- for any such Derivative Works as a whole, provided Your use,
127
- reproduction, and distribution of the Work otherwise complies with
128
- the conditions stated in this License.
129
-
130
- 5. Submission of Contributions. Unless You explicitly state otherwise,
131
- any Contribution intentionally submitted for inclusion in the Work
132
- by You to the Licensor shall be under the terms and conditions of
133
- this License, without any additional terms or conditions.
134
- Notwithstanding the above, nothing herein shall supersede or modify
135
- the terms of any separate license agreement you may have executed
136
- with Licensor regarding such Contributions.
137
-
138
- 6. Trademarks. This License does not grant permission to use the trade
139
- names, trademarks, service marks, or product names of the Licensor,
140
- except as required for reasonable and customary use in describing the
141
- origin of the Work and reproducing the content of the NOTICE file.
142
-
143
- 7. Disclaimer of Warranty. Unless required by applicable law or
144
- agreed to in writing, Licensor provides the Work (and each
145
- Contributor provides its Contributions) on an "AS IS" BASIS,
146
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
- implied, including, without limitation, any warranties or conditions
148
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
- PARTICULAR PURPOSE. You are solely responsible for determining the
150
- appropriateness of using or redistributing the Work and assume any
151
- risks associated with Your exercise of permissions under this License.
152
-
153
- 8. Limitation of Liability. In no event and under no legal theory,
154
- whether in tort (including negligence), contract, or otherwise,
155
- unless required by applicable law (such as deliberate and grossly
156
- negligent acts) or agreed to in writing, shall any Contributor be
157
- liable to You for damages, including any direct, indirect, special,
158
- incidental, or consequential damages of any character arising as a
159
- result of this License or out of the use or inability to use the
160
- Work (including but not limited to damages for loss of goodwill,
161
- work stoppage, computer failure or malfunction, or any and all
162
- other commercial damages or losses), even if such Contributor
163
- has been advised of the possibility of such damages.
164
-
165
- 9. Accepting Warranty or Additional Liability. While redistributing
166
- the Work or Derivative Works thereof, You may choose to offer,
167
- and charge a fee for, acceptance of support, warranty, indemnity,
168
- or other liability obligations and/or rights consistent with this
169
- License. However, in accepting such obligations, You may act only
170
- on Your own behalf and on Your sole responsibility, not on behalf
171
- of any other Contributor, and only if You agree to indemnify,
172
- defend, and hold each Contributor harmless for any liability
173
- incurred by, or claims asserted against, such Contributor by reason
174
- of your accepting any such warranty or additional liability.
175
-
176
- END OF TERMS AND CONDITIONS
177
-
178
- APPENDIX: How to apply the Apache License to your work.
179
-
180
- To apply the Apache License to your work, attach the following
181
- boilerplate notice, with the fields enclosed by brackets "[]"
182
- replaced with your own identifying information. (Don't include
183
- the brackets!) The text should be enclosed in the appropriate
184
- comment syntax for the file format. We also recommend that a
185
- file or class name and description of purpose be included on the
186
- same "printed page" as the copyright notice for easier
187
- identification within third-party archives.
188
-
189
- Copyright [yyyy] [name of copyright owner]
190
-
191
- Licensed under the Apache License, Version 2.0 (the "License");
192
- you may not use this file except in compliance with the License.
193
- You may obtain a copy of the License at
194
-
195
- http://www.apache.org/licenses/LICENSE-2.0
196
-
197
- Unless required by applicable law or agreed to in writing, software
198
- distributed under the License is distributed on an "AS IS" BASIS,
199
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
- See the License for the specific language governing permissions and
201
- limitations under the License.