HanzoHuang commited on
Commit
f9d127a
·
verified ·
1 Parent(s): 84b1f4c
Files changed (5) hide show
  1. LICENSE +674 -0
  2. manifest.json +134 -0
  3. source/calibration.json +645 -0
  4. source/convert-extended.py +274 -0
  5. source/weights.json +20 -0
LICENSE ADDED
@@ -0,0 +1,674 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU General Public License is a free, copyleft license for
11
+ software and other kinds of works.
12
+
13
+ The licenses for most software and other practical works are designed
14
+ to take away your freedom to share and change the works. By contrast,
15
+ the GNU General Public License is intended to guarantee your freedom to
16
+ share and change all versions of a program--to make sure it remains free
17
+ software for all its users. We, the Free Software Foundation, use the
18
+ GNU General Public License for most of our software; it applies also to
19
+ any other work released this way by its authors. You can apply it to
20
+ your programs, too.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you
30
+ these rights or asking you to surrender the rights. Therefore, you have
31
+ certain responsibilities if you distribute copies of the software, or if
32
+ you modify it: responsibilities to respect the freedom of others.
33
+
34
+ For example, if you distribute copies of such a program, whether
35
+ gratis or for a fee, you must pass on to the recipients the same
36
+ freedoms that you received. You must make sure that they, too, receive
37
+ or can get the source code. And you must show them these terms so they
38
+ know their rights.
39
+
40
+ Developers that use the GNU GPL protect your rights with two steps:
41
+ (1) assert copyright on the software, and (2) offer you this License
42
+ giving you legal permission to copy, distribute and/or modify it.
43
+
44
+ For the developers' and authors' protection, the GPL clearly explains
45
+ that there is no warranty for this free software. For both users' and
46
+ authors' sake, the GPL requires that modified versions be marked as
47
+ changed, so that their problems will not be attributed erroneously to
48
+ authors of previous versions.
49
+
50
+ Some devices are designed to deny users access to install or run
51
+ modified versions of the software inside them, although the manufacturer
52
+ can do so. This is fundamentally incompatible with the aim of
53
+ protecting users' freedom to change the software. The systematic
54
+ pattern of such abuse occurs in the area of products for individuals to
55
+ use, which is precisely where it is most unacceptable. Therefore, we
56
+ have designed this version of the GPL to prohibit the practice for those
57
+ products. If such problems arise substantially in other domains, we
58
+ stand ready to extend this provision to those domains in future versions
59
+ of the GPL, as needed to protect the freedom of users.
60
+
61
+ Finally, every program is threatened constantly by software patents.
62
+ States should not allow patents to restrict development and use of
63
+ software on general-purpose computers, but in those that do, we wish to
64
+ avoid the special danger that patents applied to a free program could
65
+ make it effectively proprietary. To prevent this, the GPL assures that
66
+ patents cannot be used to render the program non-free.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ TERMS AND CONDITIONS
72
+
73
+ 0. Definitions.
74
+
75
+ "This License" refers to version 3 of the GNU General Public License.
76
+
77
+ "Copyright" also means copyright-like laws that apply to other kinds of
78
+ works, such as semiconductor masks.
79
+
80
+ "The Program" refers to any copyrightable work licensed under this
81
+ License. Each licensee is addressed as "you". "Licensees" and
82
+ "recipients" may be individuals or organizations.
83
+
84
+ To "modify" a work means to copy from or adapt all or part of the work
85
+ in a fashion requiring copyright permission, other than the making of an
86
+ exact copy. The resulting work is called a "modified version" of the
87
+ earlier work or a work "based on" the earlier work.
88
+
89
+ A "covered work" means either the unmodified Program or a work based
90
+ on the Program.
91
+
92
+ To "propagate" a work means to do anything with it that, without
93
+ permission, would make you directly or secondarily liable for
94
+ infringement under applicable copyright law, except executing it on a
95
+ computer or modifying a private copy. Propagation includes copying,
96
+ distribution (with or without modification), making available to the
97
+ public, and in some countries other activities as well.
98
+
99
+ To "convey" a work means any kind of propagation that enables other
100
+ parties to make or receive copies. Mere interaction with a user through
101
+ a computer network, with no transfer of a copy, is not conveying.
102
+
103
+ An interactive user interface displays "Appropriate Legal Notices"
104
+ to the extent that it includes a convenient and prominently visible
105
+ feature that (1) displays an appropriate copyright notice, and (2)
106
+ tells the user that there is no warranty for the work (except to the
107
+ extent that warranties are provided), that licensees may convey the
108
+ work under this License, and how to view a copy of this License. If
109
+ the interface presents a list of user commands or options, such as a
110
+ menu, a prominent item in the list meets this criterion.
111
+
112
+ 1. Source Code.
113
+
114
+ The "source code" for a work means the preferred form of the work
115
+ for making modifications to it. "Object code" means any non-source
116
+ form of a work.
117
+
118
+ A "Standard Interface" means an interface that either is an official
119
+ standard defined by a recognized standards body, or, in the case of
120
+ interfaces specified for a particular programming language, one that
121
+ is widely used among developers working in that language.
122
+
123
+ The "System Libraries" of an executable work include anything, other
124
+ than the work as a whole, that (a) is included in the normal form of
125
+ packaging a Major Component, but which is not part of that Major
126
+ Component, and (b) serves only to enable use of the work with that
127
+ Major Component, or to implement a Standard Interface for which an
128
+ implementation is available to the public in source code form. A
129
+ "Major Component", in this context, means a major essential component
130
+ (kernel, window system, and so on) of the specific operating system
131
+ (if any) on which the executable work runs, or a compiler used to
132
+ produce the work, or an object code interpreter used to run it.
133
+
134
+ The "Corresponding Source" for a work in object code form means all
135
+ the source code needed to generate, install, and (for an executable
136
+ work) run the object code and to modify the work, including scripts to
137
+ control those activities. However, it does not include the work's
138
+ System Libraries, or general-purpose tools or generally available free
139
+ programs which are used unmodified in performing those activities but
140
+ which are not part of the work. For example, Corresponding Source
141
+ includes interface definition files associated with source files for
142
+ the work, and the source code for shared libraries and dynamically
143
+ linked subprograms that the work is specifically designed to require,
144
+ such as by intimate data communication or control flow between those
145
+ subprograms and other parts of the work.
146
+
147
+ The Corresponding Source need not include anything that users
148
+ can regenerate automatically from other parts of the Corresponding
149
+ Source.
150
+
151
+ The Corresponding Source for a work in source code form is that
152
+ same work.
153
+
154
+ 2. Basic Permissions.
155
+
156
+ All rights granted under this License are granted for the term of
157
+ copyright on the Program, and are irrevocable provided the stated
158
+ conditions are met. This License explicitly affirms your unlimited
159
+ permission to run the unmodified Program. The output from running a
160
+ covered work is covered by this License only if the output, given its
161
+ content, constitutes a covered work. This License acknowledges your
162
+ rights of fair use or other equivalent, as provided by copyright law.
163
+
164
+ You may make, run and propagate covered works that you do not
165
+ convey, without conditions so long as your license otherwise remains
166
+ in force. You may convey covered works to others for the sole purpose
167
+ of having them make modifications exclusively for you, or provide you
168
+ with facilities for running those works, provided that you comply with
169
+ the terms of this License in conveying all material for which you do
170
+ not control copyright. Those thus making or running the covered works
171
+ for you must do so exclusively on your behalf, under your direction
172
+ and control, on terms that prohibit them from making any copies of
173
+ your copyrighted material outside their relationship with you.
174
+
175
+ Conveying under any other circumstances is permitted solely under
176
+ the conditions stated below. Sublicensing is not allowed; section 10
177
+ makes it unnecessary.
178
+
179
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
+
181
+ No covered work shall be deemed part of an effective technological
182
+ measure under any applicable law fulfilling obligations under article
183
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
+ similar laws prohibiting or restricting circumvention of such
185
+ measures.
186
+
187
+ When you convey a covered work, you waive any legal power to forbid
188
+ circumvention of technological measures to the extent such circumvention
189
+ is effected by exercising rights under this License with respect to
190
+ the covered work, and you disclaim any intention to limit operation or
191
+ modification of the work as a means of enforcing, against the work's
192
+ users, your or third parties' legal rights to forbid circumvention of
193
+ technological measures.
194
+
195
+ 4. Conveying Verbatim Copies.
196
+
197
+ You may convey verbatim copies of the Program's source code as you
198
+ receive it, in any medium, provided that you conspicuously and
199
+ appropriately publish on each copy an appropriate copyright notice;
200
+ keep intact all notices stating that this License and any
201
+ non-permissive terms added in accord with section 7 apply to the code;
202
+ keep intact all notices of the absence of any warranty; and give all
203
+ recipients a copy of this License along with the Program.
204
+
205
+ You may charge any price or no price for each copy that you convey,
206
+ and you may offer support or warranty protection for a fee.
207
+
208
+ 5. Conveying Modified Source Versions.
209
+
210
+ You may convey a work based on the Program, or the modifications to
211
+ produce it from the Program, in the form of source code under the
212
+ terms of section 4, provided that you also meet all of these conditions:
213
+
214
+ a) The work must carry prominent notices stating that you modified
215
+ it, and giving a relevant date.
216
+
217
+ b) The work must carry prominent notices stating that it is
218
+ released under this License and any conditions added under section
219
+ 7. This requirement modifies the requirement in section 4 to
220
+ "keep intact all notices".
221
+
222
+ c) You must license the entire work, as a whole, under this
223
+ License to anyone who comes into possession of a copy. This
224
+ License will therefore apply, along with any applicable section 7
225
+ additional terms, to the whole of the work, and all its parts,
226
+ regardless of how they are packaged. This License gives no
227
+ permission to license the work in any other way, but it does not
228
+ invalidate such permission if you have separately received it.
229
+
230
+ d) If the work has interactive user interfaces, each must display
231
+ Appropriate Legal Notices; however, if the Program has interactive
232
+ interfaces that do not display Appropriate Legal Notices, your
233
+ work need not make them do so.
234
+
235
+ A compilation of a covered work with other separate and independent
236
+ works, which are not by their nature extensions of the covered work,
237
+ and which are not combined with it such as to form a larger program,
238
+ in or on a volume of a storage or distribution medium, is called an
239
+ "aggregate" if the compilation and its resulting copyright are not
240
+ used to limit the access or legal rights of the compilation's users
241
+ beyond what the individual works permit. Inclusion of a covered work
242
+ in an aggregate does not cause this License to apply to the other
243
+ parts of the aggregate.
244
+
245
+ 6. Conveying Non-Source Forms.
246
+
247
+ You may convey a covered work in object code form under the terms
248
+ of sections 4 and 5, provided that you also convey the
249
+ machine-readable Corresponding Source under the terms of this License,
250
+ in one of these ways:
251
+
252
+ a) Convey the object code in, or embodied in, a physical product
253
+ (including a physical distribution medium), accompanied by the
254
+ Corresponding Source fixed on a durable physical medium
255
+ customarily used for software interchange.
256
+
257
+ b) Convey the object code in, or embodied in, a physical product
258
+ (including a physical distribution medium), accompanied by a
259
+ written offer, valid for at least three years and valid for as
260
+ long as you offer spare parts or customer support for that product
261
+ model, to give anyone who possesses the object code either (1) a
262
+ copy of the Corresponding Source for all the software in the
263
+ product that is covered by this License, on a durable physical
264
+ medium customarily used for software interchange, for a price no
265
+ more than your reasonable cost of physically performing this
266
+ conveying of source, or (2) access to copy the
267
+ Corresponding Source from a network server at no charge.
268
+
269
+ c) Convey individual copies of the object code with a copy of the
270
+ written offer to provide the Corresponding Source. This
271
+ alternative is allowed only occasionally and noncommercially, and
272
+ only if you received the object code with such an offer, in accord
273
+ with subsection 6b.
274
+
275
+ d) Convey the object code by offering access from a designated
276
+ place (gratis or for a charge), and offer equivalent access to the
277
+ Corresponding Source in the same way through the same place at no
278
+ further charge. You need not require recipients to copy the
279
+ Corresponding Source along with the object code. If the place to
280
+ copy the object code is a network server, the Corresponding Source
281
+ may be on a different server (operated by you or a third party)
282
+ that supports equivalent copying facilities, provided you maintain
283
+ clear directions next to the object code saying where to find the
284
+ Corresponding Source. Regardless of what server hosts the
285
+ Corresponding Source, you remain obligated to ensure that it is
286
+ available for as long as needed to satisfy these requirements.
287
+
288
+ e) Convey the object code using peer-to-peer transmission, provided
289
+ you inform other peers where the object code and Corresponding
290
+ Source of the work are being offered to the general public at no
291
+ charge under subsection 6d.
292
+
293
+ A separable portion of the object code, whose source code is excluded
294
+ from the Corresponding Source as a System Library, need not be
295
+ included in conveying the object code work.
296
+
297
+ A "User Product" is either (1) a "consumer product", which means any
298
+ tangible personal property which is normally used for personal, family,
299
+ or household purposes, or (2) anything designed or sold for incorporation
300
+ into a dwelling. In determining whether a product is a consumer product,
301
+ doubtful cases shall be resolved in favor of coverage. For a particular
302
+ product received by a particular user, "normally used" refers to a
303
+ typical or common use of that class of product, regardless of the status
304
+ of the particular user or of the way in which the particular user
305
+ actually uses, or expects or is expected to use, the product. A product
306
+ is a consumer product regardless of whether the product has substantial
307
+ commercial, industrial or non-consumer uses, unless such uses represent
308
+ the only significant mode of use of the product.
309
+
310
+ "Installation Information" for a User Product means any methods,
311
+ procedures, authorization keys, or other information required to install
312
+ and execute modified versions of a covered work in that User Product from
313
+ a modified version of its Corresponding Source. The information must
314
+ suffice to ensure that the continued functioning of the modified object
315
+ code is in no case prevented or interfered with solely because
316
+ modification has been made.
317
+
318
+ If you convey an object code work under this section in, or with, or
319
+ specifically for use in, a User Product, and the conveying occurs as
320
+ part of a transaction in which the right of possession and use of the
321
+ User Product is transferred to the recipient in perpetuity or for a
322
+ fixed term (regardless of how the transaction is characterized), the
323
+ Corresponding Source conveyed under this section must be accompanied
324
+ by the Installation Information. But this requirement does not apply
325
+ if neither you nor any third party retains the ability to install
326
+ modified object code on the User Product (for example, the work has
327
+ been installed in ROM).
328
+
329
+ The requirement to provide Installation Information does not include a
330
+ requirement to continue to provide support service, warranty, or updates
331
+ for a work that has been modified or installed by the recipient, or for
332
+ the User Product in which it has been modified or installed. Access to a
333
+ network may be denied when the modification itself materially and
334
+ adversely affects the operation of the network or violates the rules and
335
+ protocols for communication across the network.
336
+
337
+ Corresponding Source conveyed, and Installation Information provided,
338
+ in accord with this section must be in a format that is publicly
339
+ documented (and with an implementation available to the public in
340
+ source code form), and must require no special password or key for
341
+ unpacking, reading or copying.
342
+
343
+ 7. Additional Terms.
344
+
345
+ "Additional permissions" are terms that supplement the terms of this
346
+ License by making exceptions from one or more of its conditions.
347
+ Additional permissions that are applicable to the entire Program shall
348
+ be treated as though they were included in this License, to the extent
349
+ that they are valid under applicable law. If additional permissions
350
+ apply only to part of the Program, that part may be used separately
351
+ under those permissions, but the entire Program remains governed by
352
+ this License without regard to the additional permissions.
353
+
354
+ When you convey a copy of a covered work, you may at your option
355
+ remove any additional permissions from that copy, or from any part of
356
+ it. (Additional permissions may be written to require their own
357
+ removal in certain cases when you modify the work.) You may place
358
+ additional permissions on material, added by you to a covered work,
359
+ for which you have or can give appropriate copyright permission.
360
+
361
+ Notwithstanding any other provision of this License, for material you
362
+ add to a covered work, you may (if authorized by the copyright holders of
363
+ that material) supplement the terms of this License with terms:
364
+
365
+ a) Disclaiming warranty or limiting liability differently from the
366
+ terms of sections 15 and 16 of this License; or
367
+
368
+ b) Requiring preservation of specified reasonable legal notices or
369
+ author attributions in that material or in the Appropriate Legal
370
+ Notices displayed by works containing it; or
371
+
372
+ c) Prohibiting misrepresentation of the origin of that material, or
373
+ requiring that modified versions of such material be marked in
374
+ reasonable ways as different from the original version; or
375
+
376
+ d) Limiting the use for publicity purposes of names of licensors or
377
+ authors of the material; or
378
+
379
+ e) Declining to grant rights under trademark law for use of some
380
+ trade names, trademarks, or service marks; or
381
+
382
+ f) Requiring indemnification of licensors and authors of that
383
+ material by anyone who conveys the material (or modified versions of
384
+ it) with contractual assumptions of liability to the recipient, for
385
+ any liability that these contractual assumptions directly impose on
386
+ those licensors and authors.
387
+
388
+ All other non-permissive additional terms are considered "further
389
+ restrictions" within the meaning of section 10. If the Program as you
390
+ received it, or any part of it, contains a notice stating that it is
391
+ governed by this License along with a term that is a further
392
+ restriction, you may remove that term. If a license document contains
393
+ a further restriction but permits relicensing or conveying under this
394
+ License, you may add to a covered work material governed by the terms
395
+ of that license document, provided that the further restriction does
396
+ not survive such relicensing or conveying.
397
+
398
+ If you add terms to a covered work in accord with this section, you
399
+ must place, in the relevant source files, a statement of the
400
+ additional terms that apply to those files, or a notice indicating
401
+ where to find the applicable terms.
402
+
403
+ Additional terms, permissive or non-permissive, may be stated in the
404
+ form of a separately written license, or stated as exceptions;
405
+ the above requirements apply either way.
406
+
407
+ 8. Termination.
408
+
409
+ You may not propagate or modify a covered work except as expressly
410
+ provided under this License. Any attempt otherwise to propagate or
411
+ modify it is void, and will automatically terminate your rights under
412
+ this License (including any patent licenses granted under the third
413
+ paragraph of section 11).
414
+
415
+ However, if you cease all violation of this License, then your
416
+ license from a particular copyright holder is reinstated (a)
417
+ provisionally, unless and until the copyright holder explicitly and
418
+ finally terminates your license, and (b) permanently, if the copyright
419
+ holder fails to notify you of the violation by some reasonable means
420
+ prior to 60 days after the cessation.
421
+
422
+ Moreover, your license from a particular copyright holder is
423
+ reinstated permanently if the copyright holder notifies you of the
424
+ violation by some reasonable means, this is the first time you have
425
+ received notice of violation of this License (for any work) from that
426
+ copyright holder, and you cure the violation prior to 30 days after
427
+ your receipt of the notice.
428
+
429
+ Termination of your rights under this section does not terminate the
430
+ licenses of parties who have received copies or rights from you under
431
+ this License. If your rights have been terminated and not permanently
432
+ reinstated, you do not qualify to receive new licenses for the same
433
+ material under section 10.
434
+
435
+ 9. Acceptance Not Required for Having Copies.
436
+
437
+ You are not required to accept this License in order to receive or
438
+ run a copy of the Program. Ancillary propagation of a covered work
439
+ occurring solely as a consequence of using peer-to-peer transmission
440
+ to receive a copy likewise does not require acceptance. However,
441
+ nothing other than this License grants you permission to propagate or
442
+ modify any covered work. These actions infringe copyright if you do
443
+ not accept this License. Therefore, by modifying or propagating a
444
+ covered work, you indicate your acceptance of this License to do so.
445
+
446
+ 10. Automatic Licensing of Downstream Recipients.
447
+
448
+ Each time you convey a covered work, the recipient automatically
449
+ receives a license from the original licensors, to run, modify and
450
+ propagate that work, subject to this License. You are not responsible
451
+ for enforcing compliance by third parties with this License.
452
+
453
+ An "entity transaction" is a transaction transferring control of an
454
+ organization, or substantially all assets of one, or subdividing an
455
+ organization, or merging organizations. If propagation of a covered
456
+ work results from an entity transaction, each party to that
457
+ transaction who receives a copy of the work also receives whatever
458
+ licenses to the work the party's predecessor in interest had or could
459
+ give under the previous paragraph, plus a right to possession of the
460
+ Corresponding Source of the work from the predecessor in interest, if
461
+ the predecessor has it or can get it with reasonable efforts.
462
+
463
+ You may not impose any further restrictions on the exercise of the
464
+ rights granted or affirmed under this License. For example, you may
465
+ not impose a license fee, royalty, or other charge for exercise of
466
+ rights granted under this License, and you may not initiate litigation
467
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
468
+ any patent claim is infringed by making, using, selling, offering for
469
+ sale, or importing the Program or any portion of it.
470
+
471
+ 11. Patents.
472
+
473
+ A "contributor" is a copyright holder who authorizes use under this
474
+ License of the Program or a work on which the Program is based. The
475
+ work thus licensed is called the contributor's "contributor version".
476
+
477
+ A contributor's "essential patent claims" are all patent claims
478
+ owned or controlled by the contributor, whether already acquired or
479
+ hereafter acquired, that would be infringed by some manner, permitted
480
+ by this License, of making, using, or selling its contributor version,
481
+ but do not include claims that would be infringed only as a
482
+ consequence of further modification of the contributor version. For
483
+ purposes of this definition, "control" includes the right to grant
484
+ patent sublicenses in a manner consistent with the requirements of
485
+ this License.
486
+
487
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488
+ patent license under the contributor's essential patent claims, to
489
+ make, use, sell, offer for sale, import and otherwise run, modify and
490
+ propagate the contents of its contributor version.
491
+
492
+ In the following three paragraphs, a "patent license" is any express
493
+ agreement or commitment, however denominated, not to enforce a patent
494
+ (such as an express permission to practice a patent or covenant not to
495
+ sue for patent infringement). To "grant" such a patent license to a
496
+ party means to make such an agreement or commitment not to enforce a
497
+ patent against the party.
498
+
499
+ If you convey a covered work, knowingly relying on a patent license,
500
+ and the Corresponding Source of the work is not available for anyone
501
+ to copy, free of charge and under the terms of this License, through a
502
+ publicly available network server or other readily accessible means,
503
+ then you must either (1) cause the Corresponding Source to be so
504
+ available, or (2) arrange to deprive yourself of the benefit of the
505
+ patent license for this particular work, or (3) arrange, in a manner
506
+ consistent with the requirements of this License, to extend the patent
507
+ license to downstream recipients. "Knowingly relying" means you have
508
+ actual knowledge that, but for the patent license, your conveying the
509
+ covered work in a country, or your recipient's use of the covered work
510
+ in a country, would infringe one or more identifiable patents in that
511
+ country that you have reason to believe are valid.
512
+
513
+ If, pursuant to or in connection with a single transaction or
514
+ arrangement, you convey, or propagate by procuring conveyance of, a
515
+ covered work, and grant a patent license to some of the parties
516
+ receiving the covered work authorizing them to use, propagate, modify
517
+ or convey a specific copy of the covered work, then the patent license
518
+ you grant is automatically extended to all recipients of the covered
519
+ work and works based on it.
520
+
521
+ A patent license is "discriminatory" if it does not include within
522
+ the scope of its coverage, prohibits the exercise of, or is
523
+ conditioned on the non-exercise of one or more of the rights that are
524
+ specifically granted under this License. You may not convey a covered
525
+ work if you are a party to an arrangement with a third party that is
526
+ in the business of distributing software, under which you make payment
527
+ to the third party based on the extent of your activity of conveying
528
+ the work, and under which the third party grants, to any of the
529
+ parties who would receive the covered work from you, a discriminatory
530
+ patent license (a) in connection with copies of the covered work
531
+ conveyed by you (or copies made from those copies), or (b) primarily
532
+ for and in connection with specific products or compilations that
533
+ contain the covered work, unless you entered into that arrangement,
534
+ or that patent license was granted, prior to 28 March 2007.
535
+
536
+ Nothing in this License shall be construed as excluding or limiting
537
+ any implied license or other defenses to infringement that may
538
+ otherwise be available to you under applicable patent law.
539
+
540
+ 12. No Surrender of Others' Freedom.
541
+
542
+ If conditions are imposed on you (whether by court order, agreement or
543
+ otherwise) that contradict the conditions of this License, they do not
544
+ excuse you from the conditions of this License. If you cannot convey a
545
+ covered work so as to satisfy simultaneously your obligations under this
546
+ License and any other pertinent obligations, then as a consequence you may
547
+ not convey it at all. For example, if you agree to terms that obligate you
548
+ to collect a royalty for further conveying from those to whom you convey
549
+ the Program, the only way you could satisfy both those terms and this
550
+ License would be to refrain entirely from conveying the Program.
551
+
552
+ 13. Use with the GNU Affero General Public License.
553
+
554
+ Notwithstanding any other provision of this License, you have
555
+ permission to link or combine any covered work with a work licensed
556
+ under version 3 of the GNU Affero General Public License into a single
557
+ combined work, and to convey the resulting work. The terms of this
558
+ License will continue to apply to the part which is the covered work,
559
+ but the special requirements of the GNU Affero General Public License,
560
+ section 13, concerning interaction through a network will apply to the
561
+ combination as such.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU General Public License from time to time. Such new versions will
567
+ be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
622
+
623
+ How to Apply These Terms to Your New Programs
624
+
625
+ If you develop a new program, and you want it to be of the greatest
626
+ possible use to the public, the best way to achieve this is to make it
627
+ free software which everyone can redistribute and change under these terms.
628
+
629
+ To do so, attach the following notices to the program. It is safest
630
+ to attach them to the start of each source file to most effectively
631
+ state the exclusion of warranty; and each file should have at least
632
+ the "copyright" line and a pointer to where the full notice is found.
633
+
634
+ <one line to give the program's name and a brief idea of what it does.>
635
+ Copyright (C) <year> <name of author>
636
+
637
+ This program is free software: you can redistribute it and/or modify
638
+ it under the terms of the GNU General Public License as published by
639
+ the Free Software Foundation, either version 3 of the License, or
640
+ (at your option) any later version.
641
+
642
+ This program is distributed in the hope that it will be useful,
643
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
+ GNU General Public License for more details.
646
+
647
+ You should have received a copy of the GNU General Public License
648
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
649
+
650
+ Also add information on how to contact you by electronic and paper mail.
651
+
652
+ If the program does terminal interaction, make it output a short
653
+ notice like this when it starts in an interactive mode:
654
+
655
+ <program> Copyright (C) <year> <name of author>
656
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
+ This is free software, and you are welcome to redistribute it
658
+ under certain conditions; type `show c' for details.
659
+
660
+ The hypothetical commands `show w' and `show c' should show the appropriate
661
+ parts of the General Public License. Of course, your program's commands
662
+ might be different; for a GUI interface, you would use an "about box".
663
+
664
+ You should also get your employer (if you work as a programmer) or school,
665
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
666
+ For more information on this, and how to apply and follow the GNU GPL, see
667
+ <http://www.gnu.org/licenses/>.
668
+
669
+ The GNU General Public License does not permit incorporating your program
670
+ into proprietary programs. If your program is a subroutine library, you
671
+ may consider it more useful to permit linking proprietary applications with
672
+ the library. If this is what you want to do, use the GNU Lesser General
673
+ Public License instead of this License. But first, please read
674
+ <http://www.gnu.org/philosophy/why-not-lgpl.html>.
manifest.json ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "yolov5m-cls",
4
+ "family": "yolov5",
5
+ "task": "classify",
6
+ "chip": "rk3576",
7
+ "precision": "fp16",
8
+ "path": "models/classify/yolov5m-cls/rk3576/fp16",
9
+ "weights": "source/weights/yolov5m-cls.pt",
10
+ "sha256": "1bb480befd681d8b4d39fba140cb89d56a300aa177e5f292ae629d5b20abec53",
11
+ "metadata_sha256": "4c345953cccc8f64c8bb5cc4d1abba2de8fa914a0052666b2b5bf2fa5ab2c0b7"
12
+ },
13
+ {
14
+ "name": "yolov5m-cls",
15
+ "family": "yolov5",
16
+ "task": "classify",
17
+ "chip": "rk3576",
18
+ "precision": "int8",
19
+ "path": "models/classify/yolov5m-cls/rk3576/int8",
20
+ "weights": "source/weights/yolov5m-cls.pt",
21
+ "sha256": "27c1a46e19435a636e7481f3b4deceae72715e0623645e75f85983976eff1304",
22
+ "metadata_sha256": "817cec2b00fc7d028def92cec388d294b184e4142d3dd45b4f2297b90a1967e1"
23
+ },
24
+ {
25
+ "name": "yolov5n-cls",
26
+ "family": "yolov5",
27
+ "task": "classify",
28
+ "chip": "rk3576",
29
+ "precision": "fp16",
30
+ "path": "models/classify/yolov5n-cls/rk3576/fp16",
31
+ "weights": "source/weights/yolov5n-cls.pt",
32
+ "sha256": "30438f1ec5050fa92c7fb12934a90141d16177a3d5353efe72788b8667d66551",
33
+ "metadata_sha256": "8d8711568c225625aca257275da457598732f08cf20bf6836cafb1c623dac0f9"
34
+ },
35
+ {
36
+ "name": "yolov5n-cls",
37
+ "family": "yolov5",
38
+ "task": "classify",
39
+ "chip": "rk3576",
40
+ "precision": "int8",
41
+ "path": "models/classify/yolov5n-cls/rk3576/int8",
42
+ "weights": "source/weights/yolov5n-cls.pt",
43
+ "sha256": "059697b54a95857cc93b03c5ce78838d7697664953256ba80a593456cd2a2d3d",
44
+ "metadata_sha256": "2fb739abdbe1263eabfeedc29c34cd0c6a8616bcbe72142954c2319f5a345bb7"
45
+ },
46
+ {
47
+ "name": "yolov5s-cls",
48
+ "family": "yolov5",
49
+ "task": "classify",
50
+ "chip": "rk3576",
51
+ "precision": "fp16",
52
+ "path": "models/classify/yolov5s-cls/rk3576/fp16",
53
+ "weights": "source/weights/yolov5s-cls.pt",
54
+ "sha256": "e3aaa516d8550e34aefce3947bc533e888bb7bdb2fd104747e925d883658a52e",
55
+ "metadata_sha256": "07425a1a1ad0406790befa2724d5c8f2786082be0900bf2a354967ba9ef4096f"
56
+ },
57
+ {
58
+ "name": "yolov5s-cls",
59
+ "family": "yolov5",
60
+ "task": "classify",
61
+ "chip": "rk3576",
62
+ "precision": "int8",
63
+ "path": "models/classify/yolov5s-cls/rk3576/int8",
64
+ "weights": "source/weights/yolov5s-cls.pt",
65
+ "sha256": "f47392d425c1e2d76e6ae39f84cf1f0acaa105b9e6f4b55b30764bef89af8a40",
66
+ "metadata_sha256": "d2630b3d41138942eba8bd78d9b6477f84605fd6d3f29e5a4f9a16ed6f3f5c9b"
67
+ },
68
+ {
69
+ "name": "yolov5m-cls",
70
+ "family": "yolov5",
71
+ "task": "classify",
72
+ "chip": "rk3588",
73
+ "precision": "fp16",
74
+ "path": "models/classify/yolov5m-cls/rk3588/fp16",
75
+ "weights": "source/weights/yolov5m-cls.pt",
76
+ "sha256": "d13f0b8878e3946374278121f98a53caa566716db59b8b85478907cac05cbab9",
77
+ "metadata_sha256": "2f5d028de3b6b9054550983ff2a382331385435c0f5bfff9a35429f86a4464cf"
78
+ },
79
+ {
80
+ "name": "yolov5m-cls",
81
+ "family": "yolov5",
82
+ "task": "classify",
83
+ "chip": "rk3588",
84
+ "precision": "int8",
85
+ "path": "models/classify/yolov5m-cls/rk3588/int8",
86
+ "weights": "source/weights/yolov5m-cls.pt",
87
+ "sha256": "1affc434a7e66a9cb7f1c6de416cec5b2894e06a66405dcbf04232958447907b",
88
+ "metadata_sha256": "137d63cfd35692d9f843a6a142d8bd7a7e99dd5119659c7526b0822bd7a82c1e"
89
+ },
90
+ {
91
+ "name": "yolov5n-cls",
92
+ "family": "yolov5",
93
+ "task": "classify",
94
+ "chip": "rk3588",
95
+ "precision": "fp16",
96
+ "path": "models/classify/yolov5n-cls/rk3588/fp16",
97
+ "weights": "source/weights/yolov5n-cls.pt",
98
+ "sha256": "1ce2871b6c02bb46e945db76f824e1144d3c88c1b06ccefa3c96a108a1213daa",
99
+ "metadata_sha256": "5eb38c549fd038be769503a41e9fcb68d17c33be197b4148138b19295a150c3e"
100
+ },
101
+ {
102
+ "name": "yolov5n-cls",
103
+ "family": "yolov5",
104
+ "task": "classify",
105
+ "chip": "rk3588",
106
+ "precision": "int8",
107
+ "path": "models/classify/yolov5n-cls/rk3588/int8",
108
+ "weights": "source/weights/yolov5n-cls.pt",
109
+ "sha256": "b0d66530d0f87b03d96b9f57ebfc72586403655eb775280e9b9f6d1d5d4fd178",
110
+ "metadata_sha256": "64d9a151a7449422957564363725985da16cd618bcee20ecca11119d14b32b54"
111
+ },
112
+ {
113
+ "name": "yolov5s-cls",
114
+ "family": "yolov5",
115
+ "task": "classify",
116
+ "chip": "rk3588",
117
+ "precision": "fp16",
118
+ "path": "models/classify/yolov5s-cls/rk3588/fp16",
119
+ "weights": "source/weights/yolov5s-cls.pt",
120
+ "sha256": "61b7c3b33ac44eaa240cc3e1e4299c9853f514639cabfd60ab75960230447a4b",
121
+ "metadata_sha256": "05077db64170b689c4df100201e6f93cef4f039f5ff6f01a93dbfcb6f06956e9"
122
+ },
123
+ {
124
+ "name": "yolov5s-cls",
125
+ "family": "yolov5",
126
+ "task": "classify",
127
+ "chip": "rk3588",
128
+ "precision": "int8",
129
+ "path": "models/classify/yolov5s-cls/rk3588/int8",
130
+ "weights": "source/weights/yolov5s-cls.pt",
131
+ "sha256": "52bb9d48e6515a304e1f7ac27900cbd358c9de5862ca198f27ed428c0036cf76",
132
+ "metadata_sha256": "9e735a6c2d4ae494bd914e32533fb2e48083f75f65c37f69d8c4df701be02133"
133
+ }
134
+ ]
source/calibration.json ADDED
@@ -0,0 +1,645 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source": "https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.zip",
3
+ "images": [
4
+ {
5
+ "file": "0000.jpg",
6
+ "sha256": "3b0bb6bebad60a3329f1e3484434872e86998aeb7750d779b308e4a064868c2c",
7
+ "coco128_file": "000000000009.jpg"
8
+ },
9
+ {
10
+ "file": "0001.jpg",
11
+ "sha256": "9f016b98f31e4fe826910e56ee39fa0c2889f48d38cc5f4f6b6421c8c5fc7214",
12
+ "coco128_file": "000000000025.jpg"
13
+ },
14
+ {
15
+ "file": "0002.jpg",
16
+ "sha256": "4ec415419155289eefffa7a620ed77bdeee94f477225e87ceaa00cb5f2515fe7",
17
+ "coco128_file": "000000000030.jpg"
18
+ },
19
+ {
20
+ "file": "0003.jpg",
21
+ "sha256": "0e67e637241ac2fbf132aa2b6cc9775b474b520e1c9a99dbef377063a5a48b85",
22
+ "coco128_file": "000000000034.jpg"
23
+ },
24
+ {
25
+ "file": "0004.jpg",
26
+ "sha256": "2bb515b26d250fcdf16effa3a7280babe32ae9b6f7608563e53cd01f5cd66ad4",
27
+ "coco128_file": "000000000036.jpg"
28
+ },
29
+ {
30
+ "file": "0005.jpg",
31
+ "sha256": "9008ddd846fc6002ec47ea6067cb92cf70f294773cc15765b6a14ffb392f52fa",
32
+ "coco128_file": "000000000042.jpg"
33
+ },
34
+ {
35
+ "file": "0006.jpg",
36
+ "sha256": "bc1482d2cba6e4db671c8eedbc7c8d86e0a31c927587a24297647f530349fe7b",
37
+ "coco128_file": "000000000049.jpg"
38
+ },
39
+ {
40
+ "file": "0007.jpg",
41
+ "sha256": "a1a9ac88e4c5cfbdd1cd425a6d262b1e78bf32676a9c17a2861ca6a23a731955",
42
+ "coco128_file": "000000000061.jpg"
43
+ },
44
+ {
45
+ "file": "0008.jpg",
46
+ "sha256": "406f84619f5197d416f60566d41ad4d58f1d10b0a182652bbda266eedbc3f1ab",
47
+ "coco128_file": "000000000064.jpg"
48
+ },
49
+ {
50
+ "file": "0009.jpg",
51
+ "sha256": "5393bf6575c435daa599c1272d9e61e99c099994ae4d3755311684663fed0917",
52
+ "coco128_file": "000000000071.jpg"
53
+ },
54
+ {
55
+ "file": "0010.jpg",
56
+ "sha256": "93d0d304967360bed3bfe2aafc701817e83f494c687e625fb8b765d2be54c9b2",
57
+ "coco128_file": "000000000072.jpg"
58
+ },
59
+ {
60
+ "file": "0011.jpg",
61
+ "sha256": "4a17dd87b487b4b6432d3aa60f6026a5349c8708834a3cae141ff16e0539a32c",
62
+ "coco128_file": "000000000073.jpg"
63
+ },
64
+ {
65
+ "file": "0012.jpg",
66
+ "sha256": "99d864809a7355862032b54283bd4808971da5a2b976b20467203e6c192e755d",
67
+ "coco128_file": "000000000074.jpg"
68
+ },
69
+ {
70
+ "file": "0013.jpg",
71
+ "sha256": "e07c725d9941691ac87386f0f4edd44f62a232696288bf95fb5ddef9384347b1",
72
+ "coco128_file": "000000000077.jpg"
73
+ },
74
+ {
75
+ "file": "0014.jpg",
76
+ "sha256": "3139fdefaa9b4320c8a4eec2032c77306a0fd167dd88633bd73f66f952baf5a7",
77
+ "coco128_file": "000000000078.jpg"
78
+ },
79
+ {
80
+ "file": "0015.jpg",
81
+ "sha256": "9f9dd4dcc774b81fcbb64531eb717859562ff162cf058e12f80c7b4630cbaa6b",
82
+ "coco128_file": "000000000081.jpg"
83
+ },
84
+ {
85
+ "file": "0016.jpg",
86
+ "sha256": "f58a99916783cdf4a7619286dc46adedd4ea1143bcc2cd773c6504aa5280915a",
87
+ "coco128_file": "000000000086.jpg"
88
+ },
89
+ {
90
+ "file": "0017.jpg",
91
+ "sha256": "cc548c7e669fefde96bdb7b1454c90cf518d414b85eb36827cc78f488d622e5a",
92
+ "coco128_file": "000000000089.jpg"
93
+ },
94
+ {
95
+ "file": "0018.jpg",
96
+ "sha256": "886950d096ad454f0bbb9a63167c795bd49eb9d4c0cb24a72888b3429d11900a",
97
+ "coco128_file": "000000000092.jpg"
98
+ },
99
+ {
100
+ "file": "0019.jpg",
101
+ "sha256": "143779e4a70bb6b6e10232aa02c2ce99a9a1246d763da344b424aba4ca71cd9f",
102
+ "coco128_file": "000000000094.jpg"
103
+ },
104
+ {
105
+ "file": "0020.jpg",
106
+ "sha256": "69edeeca53763fb2a4ee51739e4f9a4f053584b4f3ca4ff9911c49fa52ed2762",
107
+ "coco128_file": "000000000109.jpg"
108
+ },
109
+ {
110
+ "file": "0021.jpg",
111
+ "sha256": "39d967c7856965853e90b9283db4a6895a034eb17fe0c84581d17af4a59edcf2",
112
+ "coco128_file": "000000000110.jpg"
113
+ },
114
+ {
115
+ "file": "0022.jpg",
116
+ "sha256": "51d5f657eacbc0f37f0d847f903abc90bb33479fa0459fdc64ebbeb5cac34d99",
117
+ "coco128_file": "000000000113.jpg"
118
+ },
119
+ {
120
+ "file": "0023.jpg",
121
+ "sha256": "0ce2f02f39d5d49260d91762bc9a659f8f9d516d8e416c8120306330bfd58023",
122
+ "coco128_file": "000000000127.jpg"
123
+ },
124
+ {
125
+ "file": "0024.jpg",
126
+ "sha256": "d8d2ea5e94c83ba74bef9dc52d58e0526e08d03355381683fb953db71ec529e6",
127
+ "coco128_file": "000000000133.jpg"
128
+ },
129
+ {
130
+ "file": "0025.jpg",
131
+ "sha256": "e20c569a1e6174fd845a434a3fe3d50fb4f8a0e275fb348cc2c9b42a11600ccc",
132
+ "coco128_file": "000000000136.jpg"
133
+ },
134
+ {
135
+ "file": "0026.jpg",
136
+ "sha256": "0255bce78addf8d82e9f5d434ad2a98fccd5542cbb041980ce7ad00054a3227e",
137
+ "coco128_file": "000000000138.jpg"
138
+ },
139
+ {
140
+ "file": "0027.jpg",
141
+ "sha256": "3c852dc71abcf6cf06ed58202d1b2c850bb783553f05c63cd6ca511936b431aa",
142
+ "coco128_file": "000000000142.jpg"
143
+ },
144
+ {
145
+ "file": "0028.jpg",
146
+ "sha256": "03d4d20019d5abdf6f9314a166f8f8cf582f1d0d2167beef7ec2400d0f1b629e",
147
+ "coco128_file": "000000000143.jpg"
148
+ },
149
+ {
150
+ "file": "0029.jpg",
151
+ "sha256": "6740b5472043073062f46b253399a6bc2fe68ca77d429f652ad956c03d51b0fa",
152
+ "coco128_file": "000000000144.jpg"
153
+ },
154
+ {
155
+ "file": "0030.jpg",
156
+ "sha256": "73a20e38429ba6c78f62a90df787360c4a9ae3d331b002b509a8ee15179788a4",
157
+ "coco128_file": "000000000149.jpg"
158
+ },
159
+ {
160
+ "file": "0031.jpg",
161
+ "sha256": "b92d7d249e574fbd4ad8ba2fbc2c1879ca281b779f1276ac3daa0304b80039e4",
162
+ "coco128_file": "000000000151.jpg"
163
+ },
164
+ {
165
+ "file": "0032.jpg",
166
+ "sha256": "2938c94a9b07cacf10a8343c35949b065ae868190a11020f458f50450bd13552",
167
+ "coco128_file": "000000000154.jpg"
168
+ },
169
+ {
170
+ "file": "0033.jpg",
171
+ "sha256": "186a1427f32ce7e5cf17052f66d5ee7cd57d7f83762001891e16195a6bda586d",
172
+ "coco128_file": "000000000164.jpg"
173
+ },
174
+ {
175
+ "file": "0034.jpg",
176
+ "sha256": "2d3d9e0b4b165c0f783b97cd963097b13effa1af851c9576617fb7c910d63cd8",
177
+ "coco128_file": "000000000165.jpg"
178
+ },
179
+ {
180
+ "file": "0035.jpg",
181
+ "sha256": "93a9d9132aefccbb1f1bfb51198b5b427d1cf4a977ef259c9d0507ee5b0df732",
182
+ "coco128_file": "000000000192.jpg"
183
+ },
184
+ {
185
+ "file": "0036.jpg",
186
+ "sha256": "0713bcf193a25769b047e4dde7820e7fa857bab06f9140a4a64c78d94ed9b4a1",
187
+ "coco128_file": "000000000194.jpg"
188
+ },
189
+ {
190
+ "file": "0037.jpg",
191
+ "sha256": "1e1d801e63ed90d34ee666845ebcc17b56edef1f864d048ff588ce7073bc94a2",
192
+ "coco128_file": "000000000196.jpg"
193
+ },
194
+ {
195
+ "file": "0038.jpg",
196
+ "sha256": "4efc7ce561df432c2d3d9a60040f62b1b8389b36b401269bfc6802065dfcb9d8",
197
+ "coco128_file": "000000000201.jpg"
198
+ },
199
+ {
200
+ "file": "0039.jpg",
201
+ "sha256": "5ef004c8572c1d3a5e7c92ed16edc47529892a5306c7f70216e332a6cd65ad2d",
202
+ "coco128_file": "000000000208.jpg"
203
+ },
204
+ {
205
+ "file": "0040.jpg",
206
+ "sha256": "14007b87745069ed85c6412dffc8ad11a22de98d5f5c9ae896523e12622961c5",
207
+ "coco128_file": "000000000241.jpg"
208
+ },
209
+ {
210
+ "file": "0041.jpg",
211
+ "sha256": "a57c40ee95f73bb493e573bbbd593d037fdf176a02f1d3f6a3f437c8f78f805a",
212
+ "coco128_file": "000000000247.jpg"
213
+ },
214
+ {
215
+ "file": "0042.jpg",
216
+ "sha256": "a4e4243da053d3a958a1f52fd8fe9cc264d39e07077266a7089b281597050a29",
217
+ "coco128_file": "000000000250.jpg"
218
+ },
219
+ {
220
+ "file": "0043.jpg",
221
+ "sha256": "ae711135026cbd548fa1e04edc0ee96bce57162587e0238e7f76b4dc46cf4208",
222
+ "coco128_file": "000000000257.jpg"
223
+ },
224
+ {
225
+ "file": "0044.jpg",
226
+ "sha256": "f70992bbd14794773e27801c4cf4ba34ca4f453eb2efded62c2a558c40e3885b",
227
+ "coco128_file": "000000000260.jpg"
228
+ },
229
+ {
230
+ "file": "0045.jpg",
231
+ "sha256": "4abc27b830dedd072dab619c6b7f2467886f601e41b0cc8c2de888f57cf90d7b",
232
+ "coco128_file": "000000000263.jpg"
233
+ },
234
+ {
235
+ "file": "0046.jpg",
236
+ "sha256": "a668b293598b0097c9b38c136e54b8b43241df22d1c183f6f204a87eaf1f0724",
237
+ "coco128_file": "000000000283.jpg"
238
+ },
239
+ {
240
+ "file": "0047.jpg",
241
+ "sha256": "66bff049c25ed6498e69a51ac65b88d5fc800233fed0f89ee07ab178f7db766d",
242
+ "coco128_file": "000000000294.jpg"
243
+ },
244
+ {
245
+ "file": "0048.jpg",
246
+ "sha256": "c839076b4fa14020f97c8a5909c84a1e85c912ca262a91c8c4648ebe27caf61f",
247
+ "coco128_file": "000000000307.jpg"
248
+ },
249
+ {
250
+ "file": "0049.jpg",
251
+ "sha256": "07c410e96a812351bf385add8645b8dc2ed064902ff2ef01072be6351b428393",
252
+ "coco128_file": "000000000308.jpg"
253
+ },
254
+ {
255
+ "file": "0050.jpg",
256
+ "sha256": "40087a8191fc80eba012c1ba4735402b4890aa0669a84ea0d3dac043ca543247",
257
+ "coco128_file": "000000000309.jpg"
258
+ },
259
+ {
260
+ "file": "0051.jpg",
261
+ "sha256": "cd2fac2dfdc17fb1af0d12228e344d2e828fbe28a7c1e32396a95cb0b129d096",
262
+ "coco128_file": "000000000312.jpg"
263
+ },
264
+ {
265
+ "file": "0052.jpg",
266
+ "sha256": "5804350236bc0d52715f9354498d52f8d260b0e3d8f965526cd85ca6a18b7caa",
267
+ "coco128_file": "000000000315.jpg"
268
+ },
269
+ {
270
+ "file": "0053.jpg",
271
+ "sha256": "60f0acad099ad5cf55f44968cea66e125e0beb7eb20a1d78888ee9db34e28cd8",
272
+ "coco128_file": "000000000321.jpg"
273
+ },
274
+ {
275
+ "file": "0054.jpg",
276
+ "sha256": "4dddb450ab0a84a458c3da0cfa868a42b9b146de1cda3dd13c34b3599c7b80d3",
277
+ "coco128_file": "000000000322.jpg"
278
+ },
279
+ {
280
+ "file": "0055.jpg",
281
+ "sha256": "d8c9b6803795082707fcd62f2d1d38826709836504e330db3e7b4713c3316d59",
282
+ "coco128_file": "000000000326.jpg"
283
+ },
284
+ {
285
+ "file": "0056.jpg",
286
+ "sha256": "8ba0ed80d34589221b1243e0764471d91716b3a267827cb37ecfc3cfae52cc90",
287
+ "coco128_file": "000000000328.jpg"
288
+ },
289
+ {
290
+ "file": "0057.jpg",
291
+ "sha256": "8d4946138c446940ed080738744214cd75948a98fd3a1933d0031bd14144f541",
292
+ "coco128_file": "000000000332.jpg"
293
+ },
294
+ {
295
+ "file": "0058.jpg",
296
+ "sha256": "fdf5b5b2f8227082a5542fbc33b5f8740b040d345653c33bec6158d835542d6b",
297
+ "coco128_file": "000000000338.jpg"
298
+ },
299
+ {
300
+ "file": "0059.jpg",
301
+ "sha256": "8ad9716416dc27aeff76bb09d936949f67627cb30948288b61c117df34501049",
302
+ "coco128_file": "000000000349.jpg"
303
+ },
304
+ {
305
+ "file": "0060.jpg",
306
+ "sha256": "939b5473ea4787a01c2293a3e62979442eea5c9b3dcaab8803c07a5b6d47e087",
307
+ "coco128_file": "000000000357.jpg"
308
+ },
309
+ {
310
+ "file": "0061.jpg",
311
+ "sha256": "8da8a8320518a8adadbbd79615e066fd60b31c6025919665264ff9d0f746a5dd",
312
+ "coco128_file": "000000000359.jpg"
313
+ },
314
+ {
315
+ "file": "0062.jpg",
316
+ "sha256": "1a5d039418eacc09510efabcd466dc05701f0dac9ae0040b05a1b30b796ef96e",
317
+ "coco128_file": "000000000360.jpg"
318
+ },
319
+ {
320
+ "file": "0063.jpg",
321
+ "sha256": "a10be0a1beb5a34b50af22cc657dbf186a944db7ce8924e570295f35bd954036",
322
+ "coco128_file": "000000000368.jpg"
323
+ },
324
+ {
325
+ "file": "0064.jpg",
326
+ "sha256": "0d3719ec6f6f54229f498f7b01b113a864cd1eeccac196086741d98e23ae2455",
327
+ "coco128_file": "000000000370.jpg"
328
+ },
329
+ {
330
+ "file": "0065.jpg",
331
+ "sha256": "9455b8af106ef7a2a3b6c4c7ceeda5f4e81b5e364a2aef8e6cf68abc1396f8bd",
332
+ "coco128_file": "000000000382.jpg"
333
+ },
334
+ {
335
+ "file": "0066.jpg",
336
+ "sha256": "dfbae064fadcaa79bd319410903bc92052349472115e2d515e0ecf3c944d1048",
337
+ "coco128_file": "000000000384.jpg"
338
+ },
339
+ {
340
+ "file": "0067.jpg",
341
+ "sha256": "079af237aafcdddfe5a528ef5e40f38ca449fce9ad5a49fbdaaeef068fac7c76",
342
+ "coco128_file": "000000000387.jpg"
343
+ },
344
+ {
345
+ "file": "0068.jpg",
346
+ "sha256": "f6d313afba47fe0747d1d78cd342f420eb305de8faadb5cb164de428522b40d6",
347
+ "coco128_file": "000000000389.jpg"
348
+ },
349
+ {
350
+ "file": "0069.jpg",
351
+ "sha256": "2cf78c1cfa98714d2ed8a643f931c39511bbb6085fddf157b27ed709089e0343",
352
+ "coco128_file": "000000000394.jpg"
353
+ },
354
+ {
355
+ "file": "0070.jpg",
356
+ "sha256": "8d823d141724cc8656ccd48b49d6e44556ca399fbbd8458cc488f0d9816809a4",
357
+ "coco128_file": "000000000395.jpg"
358
+ },
359
+ {
360
+ "file": "0071.jpg",
361
+ "sha256": "5011e5e9eac564d30fa652281a7fd1d7693545077971741a241f400611e4c33e",
362
+ "coco128_file": "000000000397.jpg"
363
+ },
364
+ {
365
+ "file": "0072.jpg",
366
+ "sha256": "7b78338d4c7a30f7c38eb3bf11a7623a195e10926359adfd7281d6ce99e42dcb",
367
+ "coco128_file": "000000000400.jpg"
368
+ },
369
+ {
370
+ "file": "0073.jpg",
371
+ "sha256": "c46b3242d195c8c81b6776f4bfa385ef886ff1e7cb814e2c29e03303b85403b2",
372
+ "coco128_file": "000000000404.jpg"
373
+ },
374
+ {
375
+ "file": "0074.jpg",
376
+ "sha256": "cc75d90eac7419395e81ddd7e33c81dbec387892e086b40cbf12dc3fe09f8bb1",
377
+ "coco128_file": "000000000415.jpg"
378
+ },
379
+ {
380
+ "file": "0075.jpg",
381
+ "sha256": "4b4e5c24a3aafa6d591ab385cc3756f90a804212a8e060ba374d1658b69b308e",
382
+ "coco128_file": "000000000419.jpg"
383
+ },
384
+ {
385
+ "file": "0076.jpg",
386
+ "sha256": "49e87dbacfb3911d83fde336b7c01b79cc7bc77a021a601f2eb8d861f170a466",
387
+ "coco128_file": "000000000428.jpg"
388
+ },
389
+ {
390
+ "file": "0077.jpg",
391
+ "sha256": "1ecf0c6810ad0972f867b0f53f94c03d3398fc6958af4cac60dde350533f7b8c",
392
+ "coco128_file": "000000000431.jpg"
393
+ },
394
+ {
395
+ "file": "0078.jpg",
396
+ "sha256": "84b778ac377b3fb394edee6f6c3e688c600a3ac440247b64942b1e6e116ff9a3",
397
+ "coco128_file": "000000000436.jpg"
398
+ },
399
+ {
400
+ "file": "0079.jpg",
401
+ "sha256": "ee66d39f65c8ce3421fda1ca85b1942f6dff29813c97b6fb4ea4ed015c3a822a",
402
+ "coco128_file": "000000000438.jpg"
403
+ },
404
+ {
405
+ "file": "0080.jpg",
406
+ "sha256": "f6483d57885c348a27dcdc272e4bd5296c75596d7c64fe638b24dbb503209902",
407
+ "coco128_file": "000000000443.jpg"
408
+ },
409
+ {
410
+ "file": "0081.jpg",
411
+ "sha256": "41f3d2ce74148a9628d29ac8ddb5eeed3a07394a55b72e75df5d418d5887ef50",
412
+ "coco128_file": "000000000446.jpg"
413
+ },
414
+ {
415
+ "file": "0082.jpg",
416
+ "sha256": "3b1fe58cb414f373c61990a5fed4f1a6418a02b2e8a3ed3ecef613f4e7198068",
417
+ "coco128_file": "000000000450.jpg"
418
+ },
419
+ {
420
+ "file": "0083.jpg",
421
+ "sha256": "9dac859e6bc3eaf091e94593a005735f9c3c3e71c1c40a708b4c24da99b2e06c",
422
+ "coco128_file": "000000000459.jpg"
423
+ },
424
+ {
425
+ "file": "0084.jpg",
426
+ "sha256": "8f473ca6e651f74a74efea3673445230f6bb7d6ae92f76bf3c1e523853ec3995",
427
+ "coco128_file": "000000000471.jpg"
428
+ },
429
+ {
430
+ "file": "0085.jpg",
431
+ "sha256": "e86077ae0fa75248880ca12cdc9ef09bb68fa68083313ce280fd77082c780769",
432
+ "coco128_file": "000000000472.jpg"
433
+ },
434
+ {
435
+ "file": "0086.jpg",
436
+ "sha256": "e5a6b72ea2fda1cd1ea969018036e6da16fa491f9a2ac974a7361b539b00a155",
437
+ "coco128_file": "000000000474.jpg"
438
+ },
439
+ {
440
+ "file": "0087.jpg",
441
+ "sha256": "cb30e9ff9b1182fc9aa328f601f0ca640236eea29ec695b57edc11a572dfbfed",
442
+ "coco128_file": "000000000486.jpg"
443
+ },
444
+ {
445
+ "file": "0088.jpg",
446
+ "sha256": "9e1c9d4c88d38e6a2cd2f775bea82c137c14dc3b13f8430bcdadcb89ab0b7022",
447
+ "coco128_file": "000000000488.jpg"
448
+ },
449
+ {
450
+ "file": "0089.jpg",
451
+ "sha256": "1274c3c4010d45ddd84faf1c56f7c997c0c2533e4f25c6ccea25e8233e5684e5",
452
+ "coco128_file": "000000000490.jpg"
453
+ },
454
+ {
455
+ "file": "0090.jpg",
456
+ "sha256": "9d5732e879b066bfe8a38e3fcad64836fa1a5ac9f507625082c4b14fe449f993",
457
+ "coco128_file": "000000000491.jpg"
458
+ },
459
+ {
460
+ "file": "0091.jpg",
461
+ "sha256": "f7ce0feeb7699cd56886c64ac4ea923c76be97b34ee3a2ea0909c45e08411ec0",
462
+ "coco128_file": "000000000502.jpg"
463
+ },
464
+ {
465
+ "file": "0092.jpg",
466
+ "sha256": "0fc73f660a10ed91c52f76a2b34b5fa252bf70ff84f7b2a35374726388528ca2",
467
+ "coco128_file": "000000000508.jpg"
468
+ },
469
+ {
470
+ "file": "0093.jpg",
471
+ "sha256": "c2fcc1d44e81016f4c53e7e610c44dc28a2ca1bc5e73f73623129d261bff15e2",
472
+ "coco128_file": "000000000510.jpg"
473
+ },
474
+ {
475
+ "file": "0094.jpg",
476
+ "sha256": "073520d67d44551b4e0bc24d4eb3a6bb68bf00481a8b15d9f34479e787d2cba9",
477
+ "coco128_file": "000000000514.jpg"
478
+ },
479
+ {
480
+ "file": "0095.jpg",
481
+ "sha256": "2b971302ba56e1049294f9e0b198f37316148c8257b8d7344002aed624c45844",
482
+ "coco128_file": "000000000520.jpg"
483
+ },
484
+ {
485
+ "file": "0096.jpg",
486
+ "sha256": "5d9958bdec3062b05090258293a19af01d231de69b943d1ff0bb4a7b943e6db3",
487
+ "coco128_file": "000000000529.jpg"
488
+ },
489
+ {
490
+ "file": "0097.jpg",
491
+ "sha256": "111bb407e512f23fcc14bbc51ad4b312b0797332aab86ecd9373808286ed30b1",
492
+ "coco128_file": "000000000531.jpg"
493
+ },
494
+ {
495
+ "file": "0098.jpg",
496
+ "sha256": "60745e50cb857e4683d3622ac6c1e7ade63bd73ee458eb76a70455badaee2869",
497
+ "coco128_file": "000000000532.jpg"
498
+ },
499
+ {
500
+ "file": "0099.jpg",
501
+ "sha256": "745e538b3979ffa93f63bb294163e173d9a99413bce6cf3289215b541c9f1eb1",
502
+ "coco128_file": "000000000536.jpg"
503
+ },
504
+ {
505
+ "file": "0100.jpg",
506
+ "sha256": "32099f009fcb436bad1bd59b5d48b3e5620fa667a83db5a09879e158dd346103",
507
+ "coco128_file": "000000000540.jpg"
508
+ },
509
+ {
510
+ "file": "0101.jpg",
511
+ "sha256": "ef93fd2248a41119a34a86d11478b87bd0c715ff3c2c65f3f5f54a3f31a3dedf",
512
+ "coco128_file": "000000000542.jpg"
513
+ },
514
+ {
515
+ "file": "0102.jpg",
516
+ "sha256": "f599082d9c87db6029fc3d6e468074d1294dc98a8755152ca7324811aa1d10cd",
517
+ "coco128_file": "000000000544.jpg"
518
+ },
519
+ {
520
+ "file": "0103.jpg",
521
+ "sha256": "96801af258ded041845af111c4535dcb12a512cf22f6fd9854e5723920532d60",
522
+ "coco128_file": "000000000560.jpg"
523
+ },
524
+ {
525
+ "file": "0104.jpg",
526
+ "sha256": "e31320272d768add7113d41a9c65407fd4868da1229f8658fc877e9b07c4c794",
527
+ "coco128_file": "000000000562.jpg"
528
+ },
529
+ {
530
+ "file": "0105.jpg",
531
+ "sha256": "1f67bf49851ff43dba866f0cd6cc1b6f1d35ee75255a6092483550548584f477",
532
+ "coco128_file": "000000000564.jpg"
533
+ },
534
+ {
535
+ "file": "0106.jpg",
536
+ "sha256": "07655c58e2286ec5e8b74eee71a03841ccf732cbc502d6c380d894a14041ad5f",
537
+ "coco128_file": "000000000569.jpg"
538
+ },
539
+ {
540
+ "file": "0107.jpg",
541
+ "sha256": "b779e782a66c196373580de6ede5c4faacabf05fb521eab8df4d11b71d8d2770",
542
+ "coco128_file": "000000000572.jpg"
543
+ },
544
+ {
545
+ "file": "0108.jpg",
546
+ "sha256": "839789fe6192bbd5776761d675aa76017b67810b556f3e25e2f3a31acffd86f3",
547
+ "coco128_file": "000000000575.jpg"
548
+ },
549
+ {
550
+ "file": "0109.jpg",
551
+ "sha256": "60ad7a794ae3032c302c4e1d5111099921ce7e8df23df4401f60bdc74dc83bf1",
552
+ "coco128_file": "000000000581.jpg"
553
+ },
554
+ {
555
+ "file": "0110.jpg",
556
+ "sha256": "f1ae69b71470e4d4e88e342b69fa47187fe5c7a56882eac0e548107075f4716f",
557
+ "coco128_file": "000000000584.jpg"
558
+ },
559
+ {
560
+ "file": "0111.jpg",
561
+ "sha256": "b028805b2fb2c666ef72d4a7a01677bcf0ed56fb4d14cadc8646acdf379999c7",
562
+ "coco128_file": "000000000589.jpg"
563
+ },
564
+ {
565
+ "file": "0112.jpg",
566
+ "sha256": "dd687875b5ff4fd0a91dcc910690da36858271562ea908ff61661b4cec9b4cee",
567
+ "coco128_file": "000000000590.jpg"
568
+ },
569
+ {
570
+ "file": "0113.jpg",
571
+ "sha256": "8152ff314326c47105e065ec16ef28e1baa9dd640f40475fe385b612d5e65cf1",
572
+ "coco128_file": "000000000595.jpg"
573
+ },
574
+ {
575
+ "file": "0114.jpg",
576
+ "sha256": "f611f233ff6657baa61f32f573a213ef1b1af031e892f8b4e287c21a856497e7",
577
+ "coco128_file": "000000000597.jpg"
578
+ },
579
+ {
580
+ "file": "0115.jpg",
581
+ "sha256": "9d924b4353cca7295c149e3659866a18e78234f0dc701df119191152f4a31fec",
582
+ "coco128_file": "000000000599.jpg"
583
+ },
584
+ {
585
+ "file": "0116.jpg",
586
+ "sha256": "9135dd0723240d2d4f64ce2173901a0f23a222dea98b72e1259c28f28fa2aab6",
587
+ "coco128_file": "000000000605.jpg"
588
+ },
589
+ {
590
+ "file": "0117.jpg",
591
+ "sha256": "9ee977eaa2947ffa1508dfc8b6e3c179a9945ee3a55529f91ede04689f00e667",
592
+ "coco128_file": "000000000612.jpg"
593
+ },
594
+ {
595
+ "file": "0118.jpg",
596
+ "sha256": "4c7d0e5b1ac23a287f95640c4aaab93a0e120c384558e3fff70b96f6f1eb80ce",
597
+ "coco128_file": "000000000620.jpg"
598
+ },
599
+ {
600
+ "file": "0119.jpg",
601
+ "sha256": "c11d16bc49acabc2a52b990174110753dbe3a9a71eb7aa37af8f5fc4c616fb20",
602
+ "coco128_file": "000000000623.jpg"
603
+ },
604
+ {
605
+ "file": "0120.jpg",
606
+ "sha256": "0938276afa762c367dac4968bc9a3d4abf9d83db1f4bea67262bff976568e24c",
607
+ "coco128_file": "000000000625.jpg"
608
+ },
609
+ {
610
+ "file": "0121.jpg",
611
+ "sha256": "47b4a3b3fe24c6b1f77a9d89aa2e5d1a3b410b7ba611f54c252c2e13e975afc8",
612
+ "coco128_file": "000000000626.jpg"
613
+ },
614
+ {
615
+ "file": "0122.jpg",
616
+ "sha256": "be76e3e5bed8c8a9a0d8081844bfca7ce013093e746b66aad13922373644ad32",
617
+ "coco128_file": "000000000629.jpg"
618
+ },
619
+ {
620
+ "file": "0123.jpg",
621
+ "sha256": "d769636e9b9d22fa6fd4dcc2e683b2c95a5a9c247b3cc95df7367b1dba52f9bc",
622
+ "coco128_file": "000000000634.jpg"
623
+ },
624
+ {
625
+ "file": "0124.jpg",
626
+ "sha256": "8e948d6888e7bf449e91883d3a2b0d61804308aada31fbf289add4da4dd978e8",
627
+ "coco128_file": "000000000636.jpg"
628
+ },
629
+ {
630
+ "file": "0125.jpg",
631
+ "sha256": "8eae4239a000d602acb4c58801a3c070e4bf3da608e57e7a3dcbd5ef719895cc",
632
+ "coco128_file": "000000000641.jpg"
633
+ },
634
+ {
635
+ "file": "0126.jpg",
636
+ "sha256": "53d61e69ccf08b42a1cefa414c69a1c03d72aba2852e1fde35c4da3df8753b3f",
637
+ "coco128_file": "000000000643.jpg"
638
+ },
639
+ {
640
+ "file": "0127.jpg",
641
+ "sha256": "9bb45795336c1d05189fe51a77e04270cd1da8929d62060926798f3dd2d25204",
642
+ "coco128_file": "000000000650.jpg"
643
+ }
644
+ ]
645
+ }
source/convert-extended.py ADDED
@@ -0,0 +1,274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Export task heads that have no Model Zoo example and compile them with RKNN."""
3
+
4
+ import argparse
5
+ import hashlib
6
+ import os
7
+ from pathlib import Path
8
+ import sys
9
+ import tempfile
10
+
11
+
12
+ TASKS = {
13
+ "yolov5n-cls": "classify",
14
+ "yolov8n-cls": "classify",
15
+ "yolo11n-cls": "classify",
16
+ }
17
+ YOLO26_TASKS = {"cls": "classify", "seg": "segment", "pose": "pose", "obb": "obb",
18
+ "sem": "semantic", "depth": "depth"}
19
+ TASKS.update({f"{family}{size}-cls": "classify"
20
+ for family in ("yolov5", "yolov8", "yolo11") for size in "sm"})
21
+ TASKS.update({f"yolo26{size}-{suffix}": task
22
+ for size in "nsm" for suffix, task in YOLO26_TASKS.items()})
23
+ SIZES = {"classify": 224, "semantic": 512, "depth": 384}
24
+ CHIPS = ("rk3576", "rk3588")
25
+ IMAGENET_MEAN = (0.485, 0.456, 0.406)
26
+ IMAGENET_STD = (0.229, 0.224, 0.225)
27
+
28
+
29
+ def load_yolov5_classifier(checkpoint, source):
30
+ """Bake YOLOv5's ImageNet normalization into the input graph."""
31
+ import torch
32
+
33
+ sys.path.insert(0, str(source))
34
+ try:
35
+ from models.experimental import attempt_load
36
+
37
+ classifier = attempt_load(str(checkpoint), device=torch.device("cpu"), fuse=True)
38
+ finally:
39
+ sys.path.pop(0)
40
+
41
+ class NormalizeClassifier(torch.nn.Module):
42
+ def __init__(self, model):
43
+ super().__init__()
44
+ self.model = model
45
+ self.register_buffer("mean", torch.tensor(IMAGENET_MEAN).reshape(1, 3, 1, 1))
46
+ self.register_buffer("std", torch.tensor(IMAGENET_STD).reshape(1, 3, 1, 1))
47
+
48
+ def forward(self, images):
49
+ return self.model((images - self.mean) / self.std).softmax(dim=1)
50
+
51
+ return NormalizeClassifier(classifier).eval(), classifier.names
52
+
53
+
54
+ def split_yolo26(head, task, size):
55
+ """Expose one-to-one heads before TopK, following the Zoo YOLO26 detection layout."""
56
+ import torch
57
+ from ultralytics.utils.tal import make_anchors
58
+
59
+ def forward(features):
60
+ predictions = head.forward_head(features, **head.one2one)
61
+ anchors, strides = make_anchors(features, head.stride, 0.5)
62
+ head.anchors = anchors.transpose(0, 1)
63
+ head.strides = strides.transpose(0, 1)
64
+ raw_boxes = predictions["boxes"]
65
+ left_top, right_bottom = raw_boxes.split(2, dim=1)
66
+ anchor = head.anchors.unsqueeze(0)
67
+ if task == "obb":
68
+ angle = predictions["angle"]
69
+ offset_x, offset_y = ((right_bottom - left_top) / 2).split(1, dim=1)
70
+ cosine, sine = angle.cos(), angle.sin()
71
+ rotated = torch.cat((offset_x * cosine - offset_y * sine,
72
+ offset_x * sine + offset_y * cosine), dim=1)
73
+ boxes = torch.cat((anchor + rotated, left_top + right_bottom), dim=1)
74
+ else:
75
+ boxes = torch.cat((anchor - left_top, anchor + right_bottom), dim=1)
76
+
77
+ outputs = (predictions["scores"].sigmoid(), boxes * (head.strides / size))
78
+ if task == "segment":
79
+ return (*outputs, predictions["mask_coefficient"], head.proto(features))
80
+ if task == "obb":
81
+ return (*outputs, angle)
82
+
83
+ points = head.kpts_decode(predictions["kpts"]).reshape(1, *head.kpt_shape, -1)
84
+ # Keep visibility and x/y on comparable scales for INT8 quantization.
85
+ points = torch.cat((points[:, :, :2] / size, points[:, :, 2:]), dim=2)
86
+ return (*outputs, points.reshape(1, head.nk, -1))
87
+
88
+ return forward
89
+
90
+
91
+ def export_checkpoint(checkpoint, destination, size, yolov5_source):
92
+ os.environ.setdefault("YOLO_AUTOINSTALL", "false")
93
+ import onnx
94
+ import torch
95
+ import ultralytics
96
+ import yaml
97
+ from ultralytics import YOLO
98
+
99
+ task = TASKS[checkpoint.stem]
100
+ if checkpoint.stem.startswith("yolov5"):
101
+ model, names = load_yolov5_classifier(checkpoint, yolov5_source)
102
+ head = None
103
+ else:
104
+ model = YOLO(str(checkpoint), task=task).model.cpu().float().eval()
105
+ head = model.model[-1]
106
+ names = getattr(model, "names", None) or {0: "depth"}
107
+ split = task in {"segment", "pose", "obb"}
108
+ if split:
109
+ if head.reg_max != 1 or getattr(head, "one2one_cv2", None) is None:
110
+ raise ValueError("Expected a DFL-free, one-to-one YOLO26 head")
111
+ # Fusion removes whichever trained branch is inactive.
112
+ head.end2end = True
113
+ if head is not None:
114
+ model.fuse(verbose=False)
115
+ with checkpoint.open("rb") as file:
116
+ digest = hashlib.file_digest(file, "sha256").hexdigest()
117
+ metadata = {
118
+ "task": task,
119
+ "batch": 1,
120
+ "channels": 3,
121
+ "imgsz": [size, size],
122
+ "names": names,
123
+ "preprocess": "center_crop" if task == "classify" else "letterbox",
124
+ "coordinates": "pixels",
125
+ "end2end": False,
126
+ "export_source": "model-zoo-inspired-pytorch",
127
+ "checkpoint": checkpoint.name,
128
+ "checkpoint_sha256": digest,
129
+ "ultralytics": ultralytics.__version__,
130
+ "pytorch": str(torch.__version__),
131
+ }
132
+ if split:
133
+ head.export = True
134
+ head.forward = split_yolo26(head, task, size)
135
+ metadata.update(coordinates="normalized", end2end=True)
136
+ output_names = ["Sigmoid_scores", "boxes"]
137
+ if task == "segment":
138
+ output_names.extend(("mask_coefficients", "prototypes"))
139
+ elif task == "pose":
140
+ output_names.append("keypoints")
141
+ metadata["kpt_shape"] = list(head.kpt_shape)
142
+ else:
143
+ output_names.append("angle")
144
+ elif task == "classify":
145
+ if head is not None:
146
+ head.export = True
147
+ else:
148
+ metadata["checkpoint_source"] = (
149
+ f"https://github.com/ultralytics/yolov5/releases/download/v7.0/{checkpoint.name}"
150
+ )
151
+ metadata["normalization"] = "ImageNet mean/std baked into ONNX"
152
+ output_names = ["probabilities"]
153
+ else:
154
+ # Evaluation mode emits the native grid before terminal full-image resize.
155
+ head.export = False
156
+ metadata["dense_resize"] = "half_pixel" if task == "semantic" else "align_corners"
157
+ output_names = ["logits" if task == "semantic" else "depth"]
158
+
159
+ image = torch.zeros(1, 3, size, size)
160
+ with torch.inference_mode():
161
+ expected = model(image)
162
+ tensors = expected if isinstance(expected, tuple) else (expected,)
163
+ if len(tensors) != len(output_names) or not all(torch.is_tensor(x) for x in tensors):
164
+ raise ValueError("Unexpected output contract from checkpoint head")
165
+ for name, tensor in zip(output_names, tensors):
166
+ print(f"{name}: {tuple(tensor.shape)}")
167
+ torch.onnx.export(model, image, str(destination / "model.onnx"), opset_version=13,
168
+ input_names=["images"], output_names=output_names,
169
+ dynamo=False, do_constant_folding=True)
170
+
171
+ graph = onnx.load(destination / "model.onnx")
172
+ onnx.checker.check_model(graph)
173
+ (destination / "metadata.yaml").write_text(yaml.safe_dump(metadata, sort_keys=False))
174
+
175
+
176
+ def compile_graph(source, destination, chip, precision, dataset):
177
+ import yaml
178
+ from rknn.api import RKNN
179
+
180
+ metadata = yaml.safe_load((source / "metadata.yaml").read_text())
181
+ metadata.update(target_platform=chip, precision="int8" if precision == "i8" else "fp16")
182
+
183
+ def check(code, step):
184
+ if code != 0:
185
+ raise RuntimeError(f"RKNN {step} failed ({code})")
186
+
187
+ toolkit = RKNN(verbose=False)
188
+ try:
189
+ check(toolkit.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]],
190
+ target_platform=chip), "config")
191
+ check(toolkit.load_onnx(model=str(source / "model.onnx")), "load ONNX")
192
+ with tempfile.TemporaryDirectory(prefix="nvr-calibration-") as directory:
193
+ if precision == "i8" and metadata["checkpoint"].startswith("yolov5"):
194
+ dataset = center_crop_calibration(dataset, Path(directory), metadata["imgsz"][0])
195
+ check(toolkit.build(do_quantization=precision == "i8",
196
+ dataset=str(dataset) if dataset else None), "build")
197
+ check(toolkit.export_rknn(str(destination / "model.rknn")), "export")
198
+ finally:
199
+ toolkit.release()
200
+ (destination / "metadata.yaml").write_text(yaml.safe_dump(metadata, sort_keys=False))
201
+
202
+
203
+ def center_crop_calibration(dataset, directory, size):
204
+ """Use the same square crop and linear resize as YOLOv5 classify/predict.py."""
205
+ import cv2
206
+
207
+ paths = []
208
+ for index, line in enumerate(dataset.read_text().splitlines()):
209
+ if not line.strip():
210
+ continue
211
+ source = dataset.parent / line.strip()
212
+ image = cv2.imread(str(source), cv2.IMREAD_COLOR)
213
+ if image is None:
214
+ raise ValueError(f"Cannot read calibration image: {source}")
215
+ height, width = image.shape[:2]
216
+ side = min(height, width)
217
+ top, left = (height - side) // 2, (width - side) // 2
218
+ image = cv2.resize(image[top:top + side, left:left + side], (size, size))
219
+ output = directory / f"{index:04}.png"
220
+ if not cv2.imwrite(str(output), image):
221
+ raise RuntimeError(f"Cannot write calibration image: {output}")
222
+ paths.append(str(output))
223
+ cropped = directory / "images.txt"
224
+ cropped.write_text("\n".join(paths) + "\n")
225
+ return cropped
226
+
227
+
228
+ def main():
229
+ parser = argparse.ArgumentParser(description=__doc__)
230
+ commands = parser.add_subparsers(dest="command", required=True)
231
+ export = commands.add_parser("export", help="Export one original checkpoint to ONNX")
232
+ export.add_argument("checkpoint", type=Path)
233
+ export.add_argument("output", type=Path, help="New directory for the ONNX and metadata")
234
+ export.add_argument("--imgsz", type=int, help="Override the square input size")
235
+ export.add_argument("--yolov5-source", type=Path, help="YOLOv5 v7.0 source checkout")
236
+ compile_parser = commands.add_parser("compile", help="Build one RKNN from an exported directory")
237
+ compile_parser.add_argument("onnx_directory", type=Path)
238
+ compile_parser.add_argument("output", type=Path, help="New directory for the RKNN and metadata")
239
+ compile_parser.add_argument("--chip", required=True, choices=CHIPS)
240
+ compile_parser.add_argument("--precision", required=True, choices=("fp", "i8"))
241
+ compile_parser.add_argument("--dataset", type=Path, help="RKNN calibration image list")
242
+ args = parser.parse_args()
243
+
244
+ destination = args.output.resolve()
245
+ if destination.exists():
246
+ parser.error(f"Output already exists: {destination}")
247
+ destination.parent.mkdir(parents=True, exist_ok=True)
248
+ with tempfile.TemporaryDirectory(prefix=".convert-", dir=destination.parent) as directory:
249
+ work = Path(directory) / "output"
250
+ work.mkdir()
251
+ if args.command == "export":
252
+ checkpoint = args.checkpoint.resolve()
253
+ if not checkpoint.is_file() or checkpoint.stem not in TASKS:
254
+ parser.error("Provide one of these local checkpoints: " + ", ".join(TASKS))
255
+ size = args.imgsz or SIZES.get(TASKS[checkpoint.stem], 640)
256
+ if size < 32 or size > 4096 or size % 32:
257
+ parser.error("--imgsz must be a multiple of 32 from 32 to 4096")
258
+ yolov5_source = args.yolov5_source.resolve() if args.yolov5_source else None
259
+ if checkpoint.stem.startswith("yolov5") and (
260
+ yolov5_source is None or not (yolov5_source / "models/experimental.py").is_file()
261
+ ):
262
+ parser.error("YOLOv5 classification requires a --yolov5-source v7.0 checkout")
263
+ export_checkpoint(checkpoint, work, size, yolov5_source)
264
+ else:
265
+ dataset = args.dataset.resolve() if args.dataset else None
266
+ if args.precision == "i8" and (dataset is None or not dataset.is_file()):
267
+ parser.error("INT8 requires an existing --dataset image list")
268
+ compile_graph(args.onnx_directory.resolve(), work, args.chip, args.precision, dataset)
269
+ work.rename(destination)
270
+ print(destination)
271
+
272
+
273
+ if __name__ == "__main__":
274
+ main()
source/weights.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "yolov5m-cls",
4
+ "source": "https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m-cls.pt",
5
+ "sha256": "dbfdf14826b47fd45b178f652048339d83dc437d93a893f5dfbea6729578794d",
6
+ "file": "source/weights/yolov5m-cls.pt"
7
+ },
8
+ {
9
+ "name": "yolov5n-cls",
10
+ "source": "https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n-cls.pt",
11
+ "sha256": "77b15f65325b37c24e616cbe0e5349d63c35508607458b9f2bcb03875ab75f33",
12
+ "file": "source/weights/yolov5n-cls.pt"
13
+ },
14
+ {
15
+ "name": "yolov5s-cls",
16
+ "source": "https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s-cls.pt",
17
+ "sha256": "53ebfe1c19d60bea82c821b93b52bf58d81d5a06b693668e516fd8d44769881e",
18
+ "file": "source/weights/yolov5s-cls.pt"
19
+ }
20
+ ]