oidn-web 0.3.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -0
- package/README.md +208 -8
- package/dist/oidn.js +4699 -22516
- package/dist/oidn.umd.cjs +989 -5796
- package/lib/UNet.d.ts +111 -26
- package/lib/UNet.js +310 -329
- package/lib/UNet.js.map +1 -1
- package/lib/WGPUComputePass.d.ts +1 -1
- package/lib/WGPUComputePass.js +6 -4
- package/lib/WGPUComputePass.js.map +1 -1
- package/lib/backend.d.ts +1 -4
- package/lib/backend.js +28 -44
- package/lib/backend.js.map +1 -1
- package/lib/finalRgbShader.d.ts +13 -0
- package/lib/finalRgbShader.js +160 -0
- package/lib/finalRgbShader.js.map +1 -0
- package/lib/graphOptimizer.d.ts +54 -0
- package/lib/graphOptimizer.js +215 -0
- package/lib/graphOptimizer.js.map +1 -0
- package/lib/hdrTransfer.d.ts +14 -0
- package/lib/hdrTransfer.js +61 -0
- package/lib/hdrTransfer.js.map +1 -0
- package/lib/main.d.ts +43 -11
- package/lib/main.js +9 -5
- package/lib/main.js.map +1 -1
- package/lib/modelSpec.d.ts +80 -0
- package/lib/modelSpec.js +270 -0
- package/lib/modelSpec.js.map +1 -0
- package/lib/nativeUNet.d.ts +103 -0
- package/lib/nativeUNet.js +2064 -0
- package/lib/nativeUNet.js.map +1 -0
- package/lib/process.d.ts +5 -11
- package/lib/process.js +38 -49
- package/lib/process.js.map +1 -1
- package/lib/resourceTracker.d.ts +26 -0
- package/lib/resourceTracker.js +65 -0
- package/lib/resourceTracker.js.map +1 -0
- package/lib/tileScheduler.d.ts +61 -0
- package/lib/tileScheduler.js +199 -0
- package/lib/tileScheduler.js.map +1 -0
- package/lib/webnnUNet.d.ts +52 -0
- package/lib/webnnUNet.js +535 -0
- package/lib/webnnUNet.js.map +1 -0
- package/package.json +16 -5
- package/src/UNet.ts +463 -437
- package/src/WGPUComputePass.ts +6 -4
- package/src/backend.ts +33 -59
- package/src/finalRgbShader.ts +186 -0
- package/src/graphOptimizer.ts +300 -0
- package/src/hdrTransfer.ts +88 -0
- package/src/main.ts +95 -20
- package/src/modelSpec.ts +414 -0
- package/src/nativeUNet.ts +2655 -0
- package/src/process.ts +46 -71
- package/src/resourceTracker.ts +94 -0
- package/src/tileScheduler.ts +330 -0
- package/src/webnnUNet.ts +812 -0
- package/lib/helper.d.ts +0 -4
- package/lib/helper.js +0 -33
- package/lib/helper.js.map +0 -1
- package/lib/kernels.d.ts +0 -1
- package/lib/kernels.js +0 -26
- package/lib/kernels.js.map +0 -1
- package/src/helper.ts +0 -43
- package/src/kernels.ts +0 -31
package/lib/UNet.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { HostTensor } from './tza';
|
|
2
|
-
import { Tile } from './process';
|
|
3
|
-
import type
|
|
2
|
+
import { Tile, type HDRTransfer } from './process';
|
|
3
|
+
import { type DynamicTileSetting } from './tileScheduler';
|
|
4
|
+
import { type UNetModelSpec } from './modelSpec';
|
|
5
|
+
import { type NativeUNetGemmOptions, type NativeUNetKernelSetting, type NativeUNetPrecisionSetting } from './nativeUNet';
|
|
6
|
+
export type UNetEngineSetting = 'auto' | 'wgsl' | 'webnn';
|
|
4
7
|
interface HDRImageData {
|
|
5
8
|
data: Float32Array;
|
|
6
9
|
width: number;
|
|
@@ -16,22 +19,41 @@ interface GPUImageDataOutput {
|
|
|
16
19
|
width: number;
|
|
17
20
|
height: number;
|
|
18
21
|
}
|
|
22
|
+
export interface UNetExecutionStats {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
tileCount: number;
|
|
26
|
+
tileColumns: number;
|
|
27
|
+
tileRows: number;
|
|
28
|
+
tileOverlap: number;
|
|
29
|
+
inputPixelCount: number;
|
|
30
|
+
inputShapeCount: number;
|
|
31
|
+
durationMs: number;
|
|
32
|
+
tileTimeMs: {
|
|
33
|
+
min: number;
|
|
34
|
+
median: number;
|
|
35
|
+
mean: number;
|
|
36
|
+
max: number;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
19
39
|
declare class UNet {
|
|
20
|
-
private _hostTensors;
|
|
21
|
-
private _backend;
|
|
22
|
-
private _tfModel;
|
|
23
40
|
private _device;
|
|
24
|
-
private _tileWidth;
|
|
25
|
-
private _tileHeight;
|
|
26
|
-
private _tileOverlapX;
|
|
27
|
-
private _tileOverlapY;
|
|
28
41
|
private _aux;
|
|
29
42
|
private _hdr;
|
|
43
|
+
private _hdrTransfer;
|
|
30
44
|
private _dataProcessGPU?;
|
|
31
|
-
private
|
|
32
|
-
private
|
|
33
|
-
private
|
|
34
|
-
|
|
45
|
+
private _nativeExecutor?;
|
|
46
|
+
private _webNNExecutor?;
|
|
47
|
+
private _modelSpec;
|
|
48
|
+
private _inputChannels;
|
|
49
|
+
private _engine;
|
|
50
|
+
private _dynamicTileController;
|
|
51
|
+
private _lastExecution?;
|
|
52
|
+
private _activeExecutionFailures;
|
|
53
|
+
private _deviceLostObserved;
|
|
54
|
+
private _deviceLostSettled;
|
|
55
|
+
private _deviceLostReason;
|
|
56
|
+
constructor(hostTensors: Map<string, HostTensor>, device: GPUDevice, opts?: {
|
|
35
57
|
/**
|
|
36
58
|
* If use auxiliary data.
|
|
37
59
|
*/
|
|
@@ -40,23 +62,67 @@ declare class UNet {
|
|
|
40
62
|
* If input is HDR image.
|
|
41
63
|
*/
|
|
42
64
|
hdr?: boolean;
|
|
65
|
+
/** HDR transfer function expected by the trained model. */
|
|
66
|
+
hdrTransfer?: HDRTransfer;
|
|
43
67
|
maxTileSize?: number;
|
|
68
|
+
dynamicTile?: DynamicTileSetting;
|
|
69
|
+
/** Native WGSL or the experimental WebNN backend. */
|
|
70
|
+
engine?: UNetEngineSetting;
|
|
71
|
+
/** Arithmetic/storage precision used by the native WGSL executor. */
|
|
72
|
+
precision?: NativeUNetPrecisionSetting;
|
|
73
|
+
/** Model-independent convolution kernel selection. */
|
|
74
|
+
kernel?: NativeUNetKernelSetting;
|
|
75
|
+
gemm?: NativeUNetGemmOptions;
|
|
76
|
+
/** Explicit descriptor for a new OIDN topology not in the built-in registry. */
|
|
77
|
+
modelSpec?: UNetModelSpec;
|
|
44
78
|
});
|
|
45
|
-
getDevice(): GPUDevice
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
getDevice(): GPUDevice;
|
|
80
|
+
/** Completes backend compilation before first interactive use. */
|
|
81
|
+
prepare(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Prepares the input shapes selected for an image before its first denoise.
|
|
84
|
+
* Hosts can call this while they still display their model-loading state.
|
|
85
|
+
*/
|
|
86
|
+
prepareForImage(width: number, height: number, options?: {
|
|
87
|
+
tileOverlap?: number;
|
|
88
|
+
wholeImage?: boolean;
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
getRuntimeInfo(): {
|
|
91
|
+
configuredEngine: UNetEngineSetting;
|
|
92
|
+
gpuEngine: "wgsl" | "webnn";
|
|
93
|
+
precision: import("./nativeUNet").NativeUNetPrecision;
|
|
94
|
+
kernel: {
|
|
95
|
+
configured: NativeUNetKernelSetting;
|
|
96
|
+
gemm: Readonly<Required<NativeUNetGemmOptions>>;
|
|
97
|
+
maxSpatialInputBlocks: number;
|
|
98
|
+
subgroupsAvailable: boolean;
|
|
99
|
+
} | undefined;
|
|
100
|
+
webnn: import("./webnnUNet").WebNNRuntimeSupport | undefined;
|
|
101
|
+
resources: import("./resourceTracker").OIDNResourceSnapshot;
|
|
102
|
+
model: string;
|
|
103
|
+
modelFamily: (string & {}) | "oidn-unet-small" | "oidn-unet-large";
|
|
104
|
+
inputChannels: number;
|
|
105
|
+
hdrTransfer: HDRTransfer;
|
|
106
|
+
dynamicTile: {
|
|
107
|
+
enabled: boolean;
|
|
108
|
+
currentTileSize: number;
|
|
109
|
+
minTileSize: number;
|
|
110
|
+
maxTileSize: number;
|
|
111
|
+
targetTileTimeMs: number;
|
|
112
|
+
};
|
|
113
|
+
lastExecution: UNetExecutionStats | undefined;
|
|
114
|
+
activeExecutionCount: number;
|
|
115
|
+
};
|
|
116
|
+
private _observeDeviceLoss;
|
|
117
|
+
private _registerExecutionFailure;
|
|
118
|
+
/** Captures per-node GPU timestamps for the next native tile execution. */
|
|
119
|
+
profileNextExecution(): boolean;
|
|
120
|
+
getLastExecutionProfile(): Promise<import("./nativeUNet").NativeUNetExecutionProfile> | undefined;
|
|
55
121
|
private _processImageData;
|
|
56
122
|
private _readTile;
|
|
57
123
|
private _writeTile;
|
|
58
124
|
private _executeTile;
|
|
59
|
-
tileExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress, denoiseAlpha }: {
|
|
125
|
+
tileExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress, denoiseAlpha, tileOverlap, wholeImage, scheduling, error }: {
|
|
60
126
|
color: T;
|
|
61
127
|
albedo?: ImageData | GPUImageData;
|
|
62
128
|
normal?: ImageData | GPUImageData;
|
|
@@ -64,8 +130,27 @@ declare class UNet {
|
|
|
64
130
|
* If denoise alpha channel. Otherwise denoise RGB channels.
|
|
65
131
|
*/
|
|
66
132
|
denoiseAlpha?: boolean;
|
|
67
|
-
|
|
68
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Execute the complete input image as one tile, ignoring `maxTileSize`.
|
|
135
|
+
* The image must fit the device's buffer and dispatch limits.
|
|
136
|
+
*/
|
|
137
|
+
wholeImage?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Per-side context for boundaries shared with another tile. Defaults to
|
|
140
|
+
* half of the model receptive field rounded up to 16 pixels.
|
|
141
|
+
*/
|
|
142
|
+
tileOverlap?: number;
|
|
143
|
+
/**
|
|
144
|
+
* How JavaScript yields between completed GPU tiles. `event-loop`
|
|
145
|
+
* (default) continues on the next macrotask. `animation-frame` waits for
|
|
146
|
+
* the next display frame, bounded by a short timer so hidden pages still
|
|
147
|
+
* complete.
|
|
148
|
+
*/
|
|
149
|
+
scheduling?: 'animation-frame' | 'event-loop';
|
|
150
|
+
done: (outputData: T extends GPUImageData ? GPUImageDataOutput : T) => void | Promise<void>;
|
|
151
|
+
/** Receives asynchronous execution, queue, and callback failures. */
|
|
152
|
+
error?: (reason: unknown) => void | Promise<void>;
|
|
153
|
+
progress?: (outputData: T extends GPUImageData ? GPUImageDataOutput : T, tileData: (T extends GPUImageData ? GPUImageDataOutput : T) | undefined, tile: Tile, currentIdx: number, totalIdx: number) => void | Promise<void>;
|
|
69
154
|
}): () => void;
|
|
70
155
|
dispose(): void;
|
|
71
156
|
}
|