alastorid commited on
Commit
56fcfbb
·
1 Parent(s): 0bfb108

Publish WaifuFinder Core ML bundle

Browse files
BasicSR-LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 2018-2022 BasicSR Authors
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.
LICENSE ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2021, Xintao Wang
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
NOTICE ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Real-ESRGAN x2plus, optimized Core ML package for WaifuFinder
2
+ Model weights copyright (c) 2021 Xintao Wang. BSD 3-Clause; see LICENSE.
3
+
4
+ Original weights: https://github.com/xinntao/Real-ESRGAN (RealESRGAN_x2plus.pth)
5
+ Reference architecture: https://github.com/XPixelGroup/BasicSR (revision 8d56e3a);
6
+ the architecture source and its Apache-2.0 licence are included as
7
+ BasicSR-LICENSE.
8
+
9
+ WaifuFinder converts these weights to Core ML offline. The conversion fuses the
10
+ network's first convolution into the following upsampling stage, expresses the
11
+ network's input and output shapes as enumerated Core ML shapes, and records the
12
+ native validation result in the model's metadata. The weights themselves are
13
+ unchanged: manifest.json pins the SHA-256 of the original checkpoint and of the
14
+ architecture definition.
15
+
16
+ This package replaces the pre-converted RealESRGAN_x2plus_522_fp16 model from
17
+ hanxiao/real-esrgan-coreml that earlier builds downloaded. WaifuFinder's version
18
+ adds validated 256 and 384 pixel inputs, so small tiles spend far less work than
19
+ padding to 522, and it is the only variant with a recorded original-model
20
+ parity result. See validation.json.
21
+
22
+ Inference uses only native Swift and Core ML. Conversion used coremltools and
23
+ PyTorch offline.
README.md ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: bsd-3-clause
3
+ library_name: coreml
4
+ tags:
5
+ - coreml
6
+ - coremltools
7
+ - apple-silicon
8
+ - waifufinder
9
+ - real-esrgan
10
+ - image-super-resolution
11
+ ---
12
+
13
+ Published by WaifuFinder. `manifest.json` pins 3 model files by SHA-256;
14
+ the app verifies every one of them, plus the licence, attribution and validation files,
15
+ before installation.
16
+ # Real-ESRGAN x2plus — optimized Core ML
17
+
18
+ Self-contained framewise 2× upscaler for
19
+ [WaifuFinder](https://github.com/alastorid/WaifuFinder). WaifuFinder downloads
20
+ these files directly: no Python, no source checkpoint, no conversion step.
21
+
22
+ ## Contents
23
+
24
+ | Path | What |
25
+ | --- | --- |
26
+ | `RealESRGANValidated.mlpackage` | Converted, original-model-validated model |
27
+ | `manifest.json` | Architecture, original fingerprints, SHA-256 of every file |
28
+ | `validation.json` | Original-model parity, tile and product checks |
29
+ | `LICENSE` | Real-ESRGAN weights, BSD 3-Clause |
30
+ | `BasicSR-LICENSE` | Reference architecture, Apache-2.0 |
31
+ | `NOTICE` | Attribution and conversion summary |
32
+
33
+ The app compiles the package once at install time, on the machine that will run
34
+ it, because compiled Core ML is tied to the local compiler and macOS version.
35
+
36
+ ## What "optimized" means
37
+
38
+ The network is the unmodified Real-ESRGAN x2plus. The conversion:
39
+
40
+ - fuses the first convolution into the following stage;
41
+ - expresses 256, 384 and 522 pixel inputs as enumerated Core ML shapes, so a
42
+ small tile is upscaled at its own size instead of being padded to 522;
43
+ - records the measured parity against the original PyTorch network in the model
44
+ metadata, and the app refuses to use a package that is not that validated one.
45
+
46
+ `validation.json` records the measurements: maximum absolute error against the
47
+ original network stays at or below 0.0069 across every supported input size,
48
+ against a 0.01 acceptance bound.
49
+
50
+ ## Provenance
51
+
52
+ Weights: [xinntao/Real-ESRGAN](https://github.com/xinntao/Real-ESRGAN),
53
+ `RealESRGAN_x2plus.pth`. Architecture reference:
54
+ [XPixelGroup/BasicSR](https://github.com/XPixelGroup/BasicSR) revision
55
+ `8d56e3a`.
56
+
57
+ ## Licence
58
+
59
+ BSD 3-Clause (weights). See `LICENSE`, `BasicSR-LICENSE` and `NOTICE`.
RealESRGANValidated.mlpackage/Data/com.apple.CoreML/model.mlmodel ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d30588759a34c8b5ff8e599df7ee2b26e8903c9411c4478dd1626fa6af5df766
3
+ size 639795
RealESRGANValidated.mlpackage/Data/com.apple.CoreML/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b6bf1281034f6b1070d4c3e49c16b468585012aaeb462cdc612f72cf572c08f0
3
+ size 33451264
RealESRGANValidated.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "05F6EBF5-20B3-4836-9B70-068F937BB95B": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "10A29F25-2152-4BA6-9ADF-DCC736B44330": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "10A29F25-2152-4BA6-9ADF-DCC736B44330"
18
+ }
manifest.json ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "format": 1,
3
+ "fileSHA256": {
4
+ "RealESRGANValidated.mlpackage/Data/com.apple.CoreML/model.mlmodel": "d30588759a34c8b5ff8e599df7ee2b26e8903c9411c4478dd1626fa6af5df766",
5
+ "RealESRGANValidated.mlpackage/Data/com.apple.CoreML/weights/weight.bin": "b6bf1281034f6b1070d4c3e49c16b468585012aaeb462cdc612f72cf572c08f0",
6
+ "RealESRGANValidated.mlpackage/Manifest.json": "83d163b928f9176628dc9d0542a07e5e18f43f3c720814f19da42ef3f523fcfb"
7
+ },
8
+ "algorithm": "realesrgan-x2plus",
9
+ "weightsSHA256": "49fafd45f8fd7aa8d31ab2a22d14d91b536c34494a5cfe31eb5d89c2fa266abb",
10
+ "architectureSHA256": "6aa8eb3f77e918b90eeff4ebfaf8745abe0c40eb8fcc03abbc1928693d70ab58",
11
+ "basicsrRevision": "8d56e3a045f9fb3e1d8872f92ee4a4f07f886b0a",
12
+ "blocks": 23,
13
+ "features": 64,
14
+ "growth": 32,
15
+ "scale": 2,
16
+ "firstConvFusion": true,
17
+ "inputSizes": [
18
+ 256,
19
+ 384,
20
+ 522
21
+ ],
22
+ "adaptiveContextMinimum": 160,
23
+ "contextValidation": [
24
+ {
25
+ "name": "face48",
26
+ "size": 256,
27
+ "maximumAbsoluteError": 4.00543212890625e-05,
28
+ "meanAbsoluteError": 2.171963842556579e-06
29
+ },
30
+ {
31
+ "name": "face96",
32
+ "size": 256,
33
+ "maximumAbsoluteError": 0.0007748603820800781,
34
+ "meanAbsoluteError": 2.0570882043102756e-05
35
+ },
36
+ {
37
+ "name": "edge33",
38
+ "size": 256,
39
+ "maximumAbsoluteError": 2.1576881408691406e-05,
40
+ "meanAbsoluteError": 1.8246862509840867e-06
41
+ },
42
+ {
43
+ "name": "texture224",
44
+ "size": 384,
45
+ "maximumAbsoluteError": 0.0018247365951538086,
46
+ "meanAbsoluteError": 2.1278896383591928e-05
47
+ }
48
+ ],
49
+ "computeUnits": "all",
50
+ "nativeValidation": {
51
+ "loadSeconds": 6.234876990318298,
52
+ "measurements": [
53
+ {
54
+ "iteration": 0,
55
+ "maximumAbsoluteError": 0.0021944642066955566,
56
+ "meanAbsoluteError": 0.0002783815238753159,
57
+ "name": "face48-522",
58
+ "passed": true,
59
+ "seconds": 0.17321908473968506,
60
+ "size": 522
61
+ },
62
+ {
63
+ "iteration": 1,
64
+ "maximumAbsoluteError": 0.0021944642066955566,
65
+ "meanAbsoluteError": 0.0002783815238753159,
66
+ "name": "face48-522",
67
+ "passed": true,
68
+ "seconds": 0.16553306579589844,
69
+ "size": 522
70
+ },
71
+ {
72
+ "iteration": 0,
73
+ "maximumAbsoluteError": 0.003055870532989502,
74
+ "meanAbsoluteError": 0.00028002674377321284,
75
+ "name": "face48-256",
76
+ "passed": true,
77
+ "seconds": 0.09531795978546143,
78
+ "size": 256
79
+ },
80
+ {
81
+ "iteration": 1,
82
+ "maximumAbsoluteError": 0.003055870532989502,
83
+ "meanAbsoluteError": 0.00028002674377321284,
84
+ "name": "face48-256",
85
+ "passed": true,
86
+ "seconds": 0.04058504104614258,
87
+ "size": 256
88
+ },
89
+ {
90
+ "iteration": 0,
91
+ "maximumAbsoluteError": 0.004576981067657471,
92
+ "meanAbsoluteError": 0.0002645799325811968,
93
+ "name": "face96-522",
94
+ "passed": true,
95
+ "seconds": 0.23144400119781494,
96
+ "size": 522
97
+ },
98
+ {
99
+ "iteration": 1,
100
+ "maximumAbsoluteError": 0.004576981067657471,
101
+ "meanAbsoluteError": 0.0002645799325811968,
102
+ "name": "face96-522",
103
+ "passed": true,
104
+ "seconds": 0.17217397689819336,
105
+ "size": 522
106
+ },
107
+ {
108
+ "iteration": 0,
109
+ "maximumAbsoluteError": 0.0029477179050445557,
110
+ "meanAbsoluteError": 0.000265068670820648,
111
+ "name": "face96-256",
112
+ "passed": true,
113
+ "seconds": 0.11030101776123047,
114
+ "size": 256
115
+ },
116
+ {
117
+ "iteration": 1,
118
+ "maximumAbsoluteError": 0.0029477179050445557,
119
+ "meanAbsoluteError": 0.000265068670820648,
120
+ "name": "face96-256",
121
+ "passed": true,
122
+ "seconds": 0.04122304916381836,
123
+ "size": 256
124
+ },
125
+ {
126
+ "iteration": 0,
127
+ "maximumAbsoluteError": 0.0038352608680725098,
128
+ "meanAbsoluteError": 0.0004266473578050503,
129
+ "name": "edge33-522",
130
+ "passed": true,
131
+ "seconds": 0.2315129041671753,
132
+ "size": 522
133
+ },
134
+ {
135
+ "iteration": 1,
136
+ "maximumAbsoluteError": 0.0038352608680725098,
137
+ "meanAbsoluteError": 0.0004266473578050503,
138
+ "name": "edge33-522",
139
+ "passed": true,
140
+ "seconds": 0.16815698146820068,
141
+ "size": 522
142
+ },
143
+ {
144
+ "iteration": 0,
145
+ "maximumAbsoluteError": 0.0033462047576904297,
146
+ "meanAbsoluteError": 0.00042569128413234603,
147
+ "name": "edge33-256",
148
+ "passed": true,
149
+ "seconds": 0.11911606788635254,
150
+ "size": 256
151
+ },
152
+ {
153
+ "iteration": 1,
154
+ "maximumAbsoluteError": 0.0033462047576904297,
155
+ "meanAbsoluteError": 0.00042569128413234603,
156
+ "name": "edge33-256",
157
+ "passed": true,
158
+ "seconds": 0.040802955627441406,
159
+ "size": 256
160
+ },
161
+ {
162
+ "iteration": 0,
163
+ "maximumAbsoluteError": 0.00668102502822876,
164
+ "meanAbsoluteError": 0.00047618807855966154,
165
+ "name": "texture224-522",
166
+ "passed": true,
167
+ "seconds": 0.2438809871673584,
168
+ "size": 522
169
+ },
170
+ {
171
+ "iteration": 1,
172
+ "maximumAbsoluteError": 0.00668102502822876,
173
+ "meanAbsoluteError": 0.00047618807855966154,
174
+ "name": "texture224-522",
175
+ "passed": true,
176
+ "seconds": 0.17585992813110352,
177
+ "size": 522
178
+ },
179
+ {
180
+ "iteration": 0,
181
+ "maximumAbsoluteError": 0.006815433502197266,
182
+ "meanAbsoluteError": 0.00048685786295553395,
183
+ "name": "texture224-384",
184
+ "passed": true,
185
+ "seconds": 0.1328589916229248,
186
+ "size": 384
187
+ },
188
+ {
189
+ "iteration": 1,
190
+ "maximumAbsoluteError": 0.006815433502197266,
191
+ "meanAbsoluteError": 0.00048685786295553395,
192
+ "name": "texture224-384",
193
+ "passed": true,
194
+ "seconds": 0.09376001358032227,
195
+ "size": 384
196
+ }
197
+ ],
198
+ "passed": true,
199
+ "peakPhysicalFootprintBytes": 81003144,
200
+ "plan": {
201
+ "evidence": "Core ML anticipated placement; not hardware counters",
202
+ "preferredOperationCounts": {
203
+ "ane": 1024,
204
+ "unknown": 2765
205
+ }
206
+ },
207
+ "thermalStateAtEnd": 0,
208
+ "thermalStateAtStart": 0,
209
+ "units": "all"
210
+ },
211
+ "compiledSourceSHA256": {
212
+ "Manifest.json": "83d163b928f9176628dc9d0542a07e5e18f43f3c720814f19da42ef3f523fcfb",
213
+ "Data/com.apple.CoreML/model.mlmodel": "d30588759a34c8b5ff8e599df7ee2b26e8903c9411c4478dd1626fa6af5df766",
214
+ "Data/com.apple.CoreML/weights/weight.bin": "b6bf1281034f6b1070d4c3e49c16b468585012aaeb462cdc612f72cf572c08f0"
215
+ },
216
+ "validated": true
217
+ }
validation.json ADDED
@@ -0,0 +1,798 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "hardware": {
3
+ "chip": "Apple M3",
4
+ "GPUCores": 8,
5
+ "unifiedMemoryGB": 16
6
+ },
7
+ "architecture": {
8
+ "algorithm": "realesrgan-x2plus",
9
+ "blocks": 23,
10
+ "features": 64,
11
+ "growth": 32,
12
+ "scale": 2,
13
+ "weightsSHA256": "49fafd45f8fd7aa8d31ab2a22d14d91b536c34494a5cfe31eb5d89c2fa266abb",
14
+ "architectureSHA256": "6aa8eb3f77e918b90eeff4ebfaf8745abe0c40eb8fcc03abbc1928693d70ab58",
15
+ "basicsrRevision": "8d56e3a045f9fb3e1d8872f92ee4a4f07f886b0a",
16
+ "firstConvFusion": true,
17
+ "inputSizes": [
18
+ 256,
19
+ 384,
20
+ 522
21
+ ],
22
+ "adaptiveContextMinimum": 160
23
+ },
24
+ "f32AlgebraicFusionChecks": [
25
+ {
26
+ "name": "face48-522",
27
+ "size": 522,
28
+ "width": 48,
29
+ "height": 48,
30
+ "fusionMaximumError": 2.8908252716064453e-06,
31
+ "fusionMeanError": 2.480328191722947e-07
32
+ },
33
+ {
34
+ "name": "face48-256",
35
+ "size": 256,
36
+ "width": 48,
37
+ "height": 48,
38
+ "fusionMaximumError": 2.682209014892578e-06,
39
+ "fusionMeanError": 2.4335980697287596e-07
40
+ },
41
+ {
42
+ "name": "face96-522",
43
+ "size": 522,
44
+ "width": 96,
45
+ "height": 96,
46
+ "fusionMaximumError": 2.4139881134033203e-06,
47
+ "fusionMeanError": 2.1461875121531193e-07
48
+ },
49
+ {
50
+ "name": "face96-256",
51
+ "size": 256,
52
+ "width": 96,
53
+ "height": 96,
54
+ "fusionMaximumError": 2.5033950805664062e-06,
55
+ "fusionMeanError": 2.1421864460080542e-07
56
+ },
57
+ {
58
+ "name": "edge33-522",
59
+ "size": 522,
60
+ "width": 33,
61
+ "height": 19,
62
+ "fusionMaximumError": 3.039836883544922e-06,
63
+ "fusionMeanError": 5.088912757855724e-07
64
+ },
65
+ {
66
+ "name": "edge33-256",
67
+ "size": 256,
68
+ "width": 33,
69
+ "height": 19,
70
+ "fusionMaximumError": 2.9206275939941406e-06,
71
+ "fusionMeanError": 5.049125206824101e-07
72
+ },
73
+ {
74
+ "name": "texture224-522",
75
+ "size": 522,
76
+ "width": 224,
77
+ "height": 167,
78
+ "fusionMaximumError": 8.344650268554688e-06,
79
+ "fusionMeanError": 7.148956910896231e-07
80
+ },
81
+ {
82
+ "name": "texture224-384",
83
+ "size": 384,
84
+ "width": 224,
85
+ "height": 167,
86
+ "fusionMaximumError": 9.804964065551758e-06,
87
+ "fusionMeanError": 7.217369102363591e-07
88
+ }
89
+ ],
90
+ "contextChecks": [
91
+ {
92
+ "name": "face48",
93
+ "size": 256,
94
+ "maximumAbsoluteError": 4.00543212890625e-05,
95
+ "meanAbsoluteError": 2.171963842556579e-06
96
+ },
97
+ {
98
+ "name": "face96",
99
+ "size": 256,
100
+ "maximumAbsoluteError": 0.0007748603820800781,
101
+ "meanAbsoluteError": 2.0570882043102756e-05
102
+ },
103
+ {
104
+ "name": "edge33",
105
+ "size": 256,
106
+ "maximumAbsoluteError": 2.1576881408691406e-05,
107
+ "meanAbsoluteError": 1.8246862509840867e-06
108
+ },
109
+ {
110
+ "name": "texture224",
111
+ "size": 384,
112
+ "maximumAbsoluteError": 0.0018247365951538086,
113
+ "meanAbsoluteError": 2.1278896383591928e-05
114
+ }
115
+ ],
116
+ "rejected160PixelContext": {
117
+ "maximumAbsoluteError": 0.0048264265060424805,
118
+ "meanAbsoluteError": 0.0002025048015639186,
119
+ "gate": [
120
+ 0.002,
121
+ 0.0002
122
+ ]
123
+ },
124
+ "nativeOriginalModelChecks": {
125
+ "previous": {
126
+ "loadSeconds": 2.7526400089263916,
127
+ "measurements": [
128
+ {
129
+ "iteration": 0,
130
+ "maximumAbsoluteError": 0.0021944642066955566,
131
+ "meanAbsoluteError": 0.0002783815238753159,
132
+ "name": "face48-522",
133
+ "passed": true,
134
+ "seconds": 0.17374193668365479,
135
+ "size": 522
136
+ },
137
+ {
138
+ "iteration": 0,
139
+ "maximumAbsoluteError": 0.004576981067657471,
140
+ "meanAbsoluteError": 0.0002645799325811968,
141
+ "name": "face96-522",
142
+ "passed": true,
143
+ "seconds": 0.1685999631881714,
144
+ "size": 522
145
+ },
146
+ {
147
+ "iteration": 0,
148
+ "maximumAbsoluteError": 0.0038352608680725098,
149
+ "meanAbsoluteError": 0.0004266473578050503,
150
+ "name": "edge33-522",
151
+ "passed": true,
152
+ "seconds": 0.16966593265533447,
153
+ "size": 522
154
+ },
155
+ {
156
+ "iteration": 0,
157
+ "maximumAbsoluteError": 0.00668102502822876,
158
+ "meanAbsoluteError": 0.00047618807855966154,
159
+ "name": "texture224-522",
160
+ "passed": true,
161
+ "seconds": 0.16941702365875244,
162
+ "size": 522
163
+ }
164
+ ],
165
+ "passed": true,
166
+ "peakPhysicalFootprintBytes": 76989064,
167
+ "plan": {
168
+ "evidence": "Core ML anticipated placement; not hardware counters",
169
+ "preferredOperationCounts": {
170
+ "ane": 1025,
171
+ "unknown": 2766
172
+ }
173
+ },
174
+ "thermalStateAtEnd": 0,
175
+ "thermalStateAtStart": 0,
176
+ "units": "all"
177
+ },
178
+ "GPU": {
179
+ "loadSeconds": 0.7356719970703125,
180
+ "measurements": [
181
+ {
182
+ "iteration": 0,
183
+ "maximumAbsoluteError": 0.002096235752105713,
184
+ "meanAbsoluteError": 0.00019855283196158603,
185
+ "name": "face48-522",
186
+ "passed": true,
187
+ "seconds": 1.2581199407577515,
188
+ "size": 522
189
+ },
190
+ {
191
+ "iteration": 0,
192
+ "maximumAbsoluteError": 0.0018474459648132324,
193
+ "meanAbsoluteError": 0.00019774417474776945,
194
+ "name": "face48-256",
195
+ "passed": true,
196
+ "seconds": 0.4369699954986572,
197
+ "size": 256
198
+ },
199
+ {
200
+ "iteration": 0,
201
+ "maximumAbsoluteError": 0.0021891146898269653,
202
+ "meanAbsoluteError": 0.00018135056670155644,
203
+ "name": "face96-522",
204
+ "passed": true,
205
+ "seconds": 1.151811957359314,
206
+ "size": 522
207
+ },
208
+ {
209
+ "iteration": 0,
210
+ "maximumAbsoluteError": 0.0019216537475585938,
211
+ "meanAbsoluteError": 0.00018246393744506909,
212
+ "name": "face96-256",
213
+ "passed": true,
214
+ "seconds": 0.42760002613067627,
215
+ "size": 256
216
+ },
217
+ {
218
+ "iteration": 0,
219
+ "maximumAbsoluteError": 0.0018963217735290527,
220
+ "meanAbsoluteError": 0.0003419771180515401,
221
+ "name": "edge33-522",
222
+ "passed": true,
223
+ "seconds": 1.192965030670166,
224
+ "size": 522
225
+ },
226
+ {
227
+ "iteration": 0,
228
+ "maximumAbsoluteError": 0.0018770098686218262,
229
+ "meanAbsoluteError": 0.000333055145820679,
230
+ "name": "edge33-256",
231
+ "passed": true,
232
+ "seconds": 0.4074610471725464,
233
+ "size": 256
234
+ },
235
+ {
236
+ "iteration": 0,
237
+ "maximumAbsoluteError": 0.006647944450378418,
238
+ "meanAbsoluteError": 0.0005955265553250281,
239
+ "name": "texture224-522",
240
+ "passed": true,
241
+ "seconds": 1.1567039489746094,
242
+ "size": 522
243
+ },
244
+ {
245
+ "iteration": 0,
246
+ "maximumAbsoluteError": 0.0075716376304626465,
247
+ "meanAbsoluteError": 0.0005843207291772896,
248
+ "name": "texture224-384",
249
+ "passed": true,
250
+ "seconds": 0.6753689050674438,
251
+ "size": 384
252
+ }
253
+ ],
254
+ "passed": true,
255
+ "peakPhysicalFootprintBytes": 515703648,
256
+ "plan": {
257
+ "evidence": "Core ML anticipated placement; not hardware counters",
258
+ "preferredOperationCounts": {
259
+ "gpu": 1024,
260
+ "unknown": 2765
261
+ }
262
+ },
263
+ "thermalStateAtEnd": 0,
264
+ "thermalStateAtStart": 0,
265
+ "units": "gpu"
266
+ },
267
+ "ANE": {
268
+ "loadSeconds": 0.10446703433990479,
269
+ "measurements": [
270
+ {
271
+ "iteration": 0,
272
+ "maximumAbsoluteError": 0.0021944642066955566,
273
+ "meanAbsoluteError": 0.0002783815238753159,
274
+ "name": "face48-522",
275
+ "passed": true,
276
+ "seconds": 0.17560791969299316,
277
+ "size": 522
278
+ },
279
+ {
280
+ "iteration": 1,
281
+ "maximumAbsoluteError": 0.0021944642066955566,
282
+ "meanAbsoluteError": 0.0002783815238753159,
283
+ "name": "face48-522",
284
+ "passed": true,
285
+ "seconds": 0.16761994361877441,
286
+ "size": 522
287
+ },
288
+ {
289
+ "iteration": 0,
290
+ "maximumAbsoluteError": 0.003055870532989502,
291
+ "meanAbsoluteError": 0.00028002674377321284,
292
+ "name": "face48-256",
293
+ "passed": true,
294
+ "seconds": 0.08003497123718262,
295
+ "size": 256
296
+ },
297
+ {
298
+ "iteration": 1,
299
+ "maximumAbsoluteError": 0.003055870532989502,
300
+ "meanAbsoluteError": 0.00028002674377321284,
301
+ "name": "face48-256",
302
+ "passed": true,
303
+ "seconds": 0.04110407829284668,
304
+ "size": 256
305
+ },
306
+ {
307
+ "iteration": 0,
308
+ "maximumAbsoluteError": 0.004576981067657471,
309
+ "meanAbsoluteError": 0.0002645799325811968,
310
+ "name": "face96-522",
311
+ "passed": true,
312
+ "seconds": 0.2167060375213623,
313
+ "size": 522
314
+ },
315
+ {
316
+ "iteration": 1,
317
+ "maximumAbsoluteError": 0.004576981067657471,
318
+ "meanAbsoluteError": 0.0002645799325811968,
319
+ "name": "face96-522",
320
+ "passed": true,
321
+ "seconds": 0.16805803775787354,
322
+ "size": 522
323
+ },
324
+ {
325
+ "iteration": 0,
326
+ "maximumAbsoluteError": 0.0029477179050445557,
327
+ "meanAbsoluteError": 0.000265068670820648,
328
+ "name": "face96-256",
329
+ "passed": true,
330
+ "seconds": 0.10328304767608643,
331
+ "size": 256
332
+ },
333
+ {
334
+ "iteration": 1,
335
+ "maximumAbsoluteError": 0.0029477179050445557,
336
+ "meanAbsoluteError": 0.000265068670820648,
337
+ "name": "face96-256",
338
+ "passed": true,
339
+ "seconds": 0.04146707057952881,
340
+ "size": 256
341
+ },
342
+ {
343
+ "iteration": 0,
344
+ "maximumAbsoluteError": 0.0038352608680725098,
345
+ "meanAbsoluteError": 0.0004266473578050503,
346
+ "name": "edge33-522",
347
+ "passed": true,
348
+ "seconds": 0.22254693508148193,
349
+ "size": 522
350
+ },
351
+ {
352
+ "iteration": 1,
353
+ "maximumAbsoluteError": 0.0038352608680725098,
354
+ "meanAbsoluteError": 0.0004266473578050503,
355
+ "name": "edge33-522",
356
+ "passed": true,
357
+ "seconds": 0.16512000560760498,
358
+ "size": 522
359
+ },
360
+ {
361
+ "iteration": 0,
362
+ "maximumAbsoluteError": 0.0033462047576904297,
363
+ "meanAbsoluteError": 0.00042569128413234603,
364
+ "name": "edge33-256",
365
+ "passed": true,
366
+ "seconds": 0.1156010627746582,
367
+ "size": 256
368
+ },
369
+ {
370
+ "iteration": 1,
371
+ "maximumAbsoluteError": 0.0033462047576904297,
372
+ "meanAbsoluteError": 0.00042569128413234603,
373
+ "name": "edge33-256",
374
+ "passed": true,
375
+ "seconds": 0.04026901721954346,
376
+ "size": 256
377
+ },
378
+ {
379
+ "iteration": 0,
380
+ "maximumAbsoluteError": 0.00668102502822876,
381
+ "meanAbsoluteError": 0.00047618807855966154,
382
+ "name": "texture224-522",
383
+ "passed": true,
384
+ "seconds": 0.2337939739227295,
385
+ "size": 522
386
+ },
387
+ {
388
+ "iteration": 1,
389
+ "maximumAbsoluteError": 0.00668102502822876,
390
+ "meanAbsoluteError": 0.00047618807855966154,
391
+ "name": "texture224-522",
392
+ "passed": true,
393
+ "seconds": 0.17451798915863037,
394
+ "size": 522
395
+ },
396
+ {
397
+ "iteration": 0,
398
+ "maximumAbsoluteError": 0.006815433502197266,
399
+ "meanAbsoluteError": 0.00048685786295553395,
400
+ "name": "texture224-384",
401
+ "passed": true,
402
+ "seconds": 0.1444849967956543,
403
+ "size": 384
404
+ },
405
+ {
406
+ "iteration": 1,
407
+ "maximumAbsoluteError": 0.006815433502197266,
408
+ "meanAbsoluteError": 0.00048685786295553395,
409
+ "name": "texture224-384",
410
+ "passed": true,
411
+ "seconds": 0.09445405006408691,
412
+ "size": 384
413
+ }
414
+ ],
415
+ "passed": true,
416
+ "peakPhysicalFootprintBytes": 53822064,
417
+ "plan": {
418
+ "evidence": "Core ML anticipated placement; not hardware counters",
419
+ "preferredOperationCounts": {
420
+ "ane": 1024,
421
+ "unknown": 2765
422
+ }
423
+ },
424
+ "thermalStateAtEnd": 0,
425
+ "thermalStateAtStart": 0,
426
+ "units": "ane"
427
+ },
428
+ "automatic": {
429
+ "loadSeconds": 6.234876990318298,
430
+ "measurements": [
431
+ {
432
+ "iteration": 0,
433
+ "maximumAbsoluteError": 0.0021944642066955566,
434
+ "meanAbsoluteError": 0.0002783815238753159,
435
+ "name": "face48-522",
436
+ "passed": true,
437
+ "seconds": 0.17321908473968506,
438
+ "size": 522
439
+ },
440
+ {
441
+ "iteration": 1,
442
+ "maximumAbsoluteError": 0.0021944642066955566,
443
+ "meanAbsoluteError": 0.0002783815238753159,
444
+ "name": "face48-522",
445
+ "passed": true,
446
+ "seconds": 0.16553306579589844,
447
+ "size": 522
448
+ },
449
+ {
450
+ "iteration": 0,
451
+ "maximumAbsoluteError": 0.003055870532989502,
452
+ "meanAbsoluteError": 0.00028002674377321284,
453
+ "name": "face48-256",
454
+ "passed": true,
455
+ "seconds": 0.09531795978546143,
456
+ "size": 256
457
+ },
458
+ {
459
+ "iteration": 1,
460
+ "maximumAbsoluteError": 0.003055870532989502,
461
+ "meanAbsoluteError": 0.00028002674377321284,
462
+ "name": "face48-256",
463
+ "passed": true,
464
+ "seconds": 0.04058504104614258,
465
+ "size": 256
466
+ },
467
+ {
468
+ "iteration": 0,
469
+ "maximumAbsoluteError": 0.004576981067657471,
470
+ "meanAbsoluteError": 0.0002645799325811968,
471
+ "name": "face96-522",
472
+ "passed": true,
473
+ "seconds": 0.23144400119781494,
474
+ "size": 522
475
+ },
476
+ {
477
+ "iteration": 1,
478
+ "maximumAbsoluteError": 0.004576981067657471,
479
+ "meanAbsoluteError": 0.0002645799325811968,
480
+ "name": "face96-522",
481
+ "passed": true,
482
+ "seconds": 0.17217397689819336,
483
+ "size": 522
484
+ },
485
+ {
486
+ "iteration": 0,
487
+ "maximumAbsoluteError": 0.0029477179050445557,
488
+ "meanAbsoluteError": 0.000265068670820648,
489
+ "name": "face96-256",
490
+ "passed": true,
491
+ "seconds": 0.11030101776123047,
492
+ "size": 256
493
+ },
494
+ {
495
+ "iteration": 1,
496
+ "maximumAbsoluteError": 0.0029477179050445557,
497
+ "meanAbsoluteError": 0.000265068670820648,
498
+ "name": "face96-256",
499
+ "passed": true,
500
+ "seconds": 0.04122304916381836,
501
+ "size": 256
502
+ },
503
+ {
504
+ "iteration": 0,
505
+ "maximumAbsoluteError": 0.0038352608680725098,
506
+ "meanAbsoluteError": 0.0004266473578050503,
507
+ "name": "edge33-522",
508
+ "passed": true,
509
+ "seconds": 0.2315129041671753,
510
+ "size": 522
511
+ },
512
+ {
513
+ "iteration": 1,
514
+ "maximumAbsoluteError": 0.0038352608680725098,
515
+ "meanAbsoluteError": 0.0004266473578050503,
516
+ "name": "edge33-522",
517
+ "passed": true,
518
+ "seconds": 0.16815698146820068,
519
+ "size": 522
520
+ },
521
+ {
522
+ "iteration": 0,
523
+ "maximumAbsoluteError": 0.0033462047576904297,
524
+ "meanAbsoluteError": 0.00042569128413234603,
525
+ "name": "edge33-256",
526
+ "passed": true,
527
+ "seconds": 0.11911606788635254,
528
+ "size": 256
529
+ },
530
+ {
531
+ "iteration": 1,
532
+ "maximumAbsoluteError": 0.0033462047576904297,
533
+ "meanAbsoluteError": 0.00042569128413234603,
534
+ "name": "edge33-256",
535
+ "passed": true,
536
+ "seconds": 0.040802955627441406,
537
+ "size": 256
538
+ },
539
+ {
540
+ "iteration": 0,
541
+ "maximumAbsoluteError": 0.00668102502822876,
542
+ "meanAbsoluteError": 0.00047618807855966154,
543
+ "name": "texture224-522",
544
+ "passed": true,
545
+ "seconds": 0.2438809871673584,
546
+ "size": 522
547
+ },
548
+ {
549
+ "iteration": 1,
550
+ "maximumAbsoluteError": 0.00668102502822876,
551
+ "meanAbsoluteError": 0.00047618807855966154,
552
+ "name": "texture224-522",
553
+ "passed": true,
554
+ "seconds": 0.17585992813110352,
555
+ "size": 522
556
+ },
557
+ {
558
+ "iteration": 0,
559
+ "maximumAbsoluteError": 0.006815433502197266,
560
+ "meanAbsoluteError": 0.00048685786295553395,
561
+ "name": "texture224-384",
562
+ "passed": true,
563
+ "seconds": 0.1328589916229248,
564
+ "size": 384
565
+ },
566
+ {
567
+ "iteration": 1,
568
+ "maximumAbsoluteError": 0.006815433502197266,
569
+ "meanAbsoluteError": 0.00048685786295553395,
570
+ "name": "texture224-384",
571
+ "passed": true,
572
+ "seconds": 0.09376001358032227,
573
+ "size": 384
574
+ }
575
+ ],
576
+ "passed": true,
577
+ "peakPhysicalFootprintBytes": 81003144,
578
+ "plan": {
579
+ "evidence": "Core ML anticipated placement; not hardware counters",
580
+ "preferredOperationCounts": {
581
+ "ane": 1024,
582
+ "unknown": 2765
583
+ }
584
+ },
585
+ "thermalStateAtEnd": 0,
586
+ "thermalStateAtStart": 0,
587
+ "units": "all"
588
+ }
589
+ },
590
+ "ANEHardwareEvidence": {
591
+ "samples": 30,
592
+ "maximumANEPowerWatts": 12.295618057250977,
593
+ "maximumGPUPowerWatts": 0.4145999550819397,
594
+ "scope": "Native ANE predictions overlapping power-counter sampling; automatic configuration also prefers ANE for all 1024 model operations"
595
+ },
596
+ "nativeImageBenchmark": {
597
+ "original": {
598
+ "geometry": [
599
+ "192x192",
600
+ "192x192",
601
+ "192x192",
602
+ "192x192",
603
+ "192x192",
604
+ "192x192",
605
+ "192x192",
606
+ "192x192"
607
+ ],
608
+ "loadSeconds": 0.09122204780578613,
609
+ "passed": true,
610
+ "peakPhysicalFootprintBytes": 34603560,
611
+ "secondsPerImage": [
612
+ 0.18905508518218994,
613
+ 0.17750096321105957,
614
+ 0.17441201210021973,
615
+ 0.17168307304382324,
616
+ 0.1734539270401001,
617
+ 0.1752469539642334,
618
+ 0.1750020980834961,
619
+ 0.17427706718444824
620
+ ],
621
+ "thermalStateAtEnd": 0,
622
+ "thermalStateAtStart": 0,
623
+ "units": "all"
624
+ },
625
+ "optimized": {
626
+ "geometry": [
627
+ "192x192",
628
+ "192x192",
629
+ "192x192",
630
+ "192x192",
631
+ "192x192",
632
+ "192x192",
633
+ "192x192",
634
+ "192x192"
635
+ ],
636
+ "loadSeconds": 0.0954359769821167,
637
+ "passed": true,
638
+ "peakPhysicalFootprintBytes": 38158912,
639
+ "secondsPerImage": [
640
+ 0.0821380615234375,
641
+ 0.05066406726837158,
642
+ 0.0490570068359375,
643
+ 0.049021005630493164,
644
+ 0.04930400848388672,
645
+ 0.05016791820526123,
646
+ 0.04987895488739014,
647
+ 0.049877047538757324
648
+ ],
649
+ "thermalStateAtEnd": 0,
650
+ "thermalStateAtStart": 0,
651
+ "units": "all"
652
+ },
653
+ "medianSpeedup": 3.5026875745386667,
654
+ "inputTensorBytesBefore": 3269808,
655
+ "inputTensorBytesAfter": 393216
656
+ },
657
+ "nativePixelCheck": {
658
+ "passed": true,
659
+ "reference": "Original pretrained FP32 RRDBNet, canonical 522 input",
660
+ "repeatPixelsIdentical": true,
661
+ "errors": {
662
+ "before": {
663
+ "maximumAbsoluteError": 0.004520326852798462,
664
+ "meanAbsoluteError": 0.000994599424302578
665
+ },
666
+ "after": {
667
+ "maximumAbsoluteError": 0.004520326852798462,
668
+ "meanAbsoluteError": 0.0009949258528649807
669
+ }
670
+ }
671
+ },
672
+ "partialTileCheck": {
673
+ "passed": true,
674
+ "geometry": [
675
+ 1090,
676
+ 38
677
+ ],
678
+ "maximumByteDifference": 1,
679
+ "meanByteDifference": 0.0045871559633027525,
680
+ "scope": "Native overlap/blending and odd partial tiles versus previous implementation"
681
+ },
682
+ "productOriginalModelCheck": {
683
+ "passed": true,
684
+ "scope": "Actual native 2x video PNGs versus original FP32 checkpoint with canonical 522 reflection padding",
685
+ "weightsSHA256": "49fafd45f8fd7aa8d31ab2a22d14d91b536c34494a5cfe31eb5d89c2fa266abb",
686
+ "frames": [
687
+ {
688
+ "frame": 0,
689
+ "maximumAbsoluteError": 0.0034214258193969727,
690
+ "meanAbsoluteError": 0.0010005399817600846
691
+ },
692
+ {
693
+ "frame": 1,
694
+ "maximumAbsoluteError": 0.0037658214569091797,
695
+ "meanAbsoluteError": 0.0009972506668418646
696
+ },
697
+ {
698
+ "frame": 2,
699
+ "maximumAbsoluteError": 0.0032511353492736816,
700
+ "meanAbsoluteError": 0.0010040774941444397
701
+ },
702
+ {
703
+ "frame": 3,
704
+ "maximumAbsoluteError": 0.003156222403049469,
705
+ "meanAbsoluteError": 0.0010005950462073088
706
+ },
707
+ {
708
+ "frame": 4,
709
+ "maximumAbsoluteError": 0.0034334659576416016,
710
+ "meanAbsoluteError": 0.0010053260484710336
711
+ },
712
+ {
713
+ "frame": 5,
714
+ "maximumAbsoluteError": 0.003657594323158264,
715
+ "meanAbsoluteError": 0.0010041787754744291
716
+ },
717
+ {
718
+ "frame": 6,
719
+ "maximumAbsoluteError": 0.0038900673389434814,
720
+ "meanAbsoluteError": 0.001005176454782486
721
+ },
722
+ {
723
+ "frame": 7,
724
+ "maximumAbsoluteError": 0.003665834665298462,
725
+ "meanAbsoluteError": 0.0010054343147203326
726
+ }
727
+ ]
728
+ },
729
+ "productTests": {
730
+ "passed": 21,
731
+ "failed": 0,
732
+ "skippedOtherModelFixtures": 3,
733
+ "scales": {
734
+ "1": {
735
+ "backend": "native Swift Core ML",
736
+ "computeUnits": "all",
737
+ "frames": 2,
738
+ "inferenceSeconds": 0.12606394290924072,
739
+ "loadSeconds": 0.08899903297424316,
740
+ "memoryBudgetBytes": 6000000000,
741
+ "memoryScope": "whole application process; sampled every 20 ms; checked between predictions",
742
+ "model": "realesrgan-x2plus",
743
+ "peakPhysicalFootprintBytes": 77300576,
744
+ "predictionSizes": [
745
+ 256,
746
+ 256
747
+ ],
748
+ "pythonRuntime": false,
749
+ "reusedInputBuffers": true,
750
+ "scale": 1,
751
+ "seconds": 0.36799097061157227,
752
+ "singleTileBlendBypass": true,
753
+ "sourceDownsampling": 1,
754
+ "stagesPerFrame": 1
755
+ },
756
+ "2": {
757
+ "backend": "native Swift Core ML",
758
+ "computeUnits": "all",
759
+ "frames": 8,
760
+ "inferenceSeconds": 0.38128209114074707,
761
+ "loadSeconds": 0.08235108852386475,
762
+ "memoryBudgetBytes": 6000000000,
763
+ "memoryScope": "whole application process; sampled every 20 ms; checked between predictions",
764
+ "model": "realesrgan-x2plus",
765
+ "peakPhysicalFootprintBytes": 88114016,
766
+ "predictionSizes": [
767
+ 256,
768
+ 256,
769
+ 256,
770
+ 256,
771
+ 256,
772
+ 256,
773
+ 256,
774
+ 256
775
+ ],
776
+ "pythonRuntime": false,
777
+ "reusedInputBuffers": true,
778
+ "scale": 2,
779
+ "seconds": 0.8323550224304199,
780
+ "singleTileBlendBypass": true,
781
+ "sourceDownsampling": 2,
782
+ "stagesPerFrame": 1
783
+ }
784
+ }
785
+ },
786
+ "coldCompilationObservation": {
787
+ "seconds": 6.407866954803467,
788
+ "peakPhysicalFootprintBytes": 79954592,
789
+ "scope": "First Core ML load of the newly sealed flexible model; subsequent loads reuse the compiled backend cache"
790
+ },
791
+ "limitations": [
792
+ "Measurements apply to these SDR ROI fixtures on this machine.",
793
+ "ANE driver/workspace memory is not fully represented by process footprint. Standalone process footprint stayed roughly 35\u201338 MB; no overall memory reduction is claimed.",
794
+ "Adaptive context is a measured approximation of canonical 522 padding: stricter .002 maximum/.0002 mean context gates passed on the recorded fixtures.",
795
+ "Large tiles retain the existing 522 path. RealESRGAN remains frame-by-frame restoration.",
796
+ "Production app memory is sampled every 20 ms and checked between predictions, rather than terminating the UI process mid-prediction."
797
+ ]
798
+ }