From a0965101e1bb12c00720f18332eca75ca38145ec Mon Sep 17 00:00:00 2001 From: 3dtours Date: Wed, 23 Sep 2026 09:02:53 +0700 Subject: [PATCH] web: hand the upscaler's activations to the chip that is running them The WebGPU execution provider has no PReLU kernel. The model is 34 convolutions with a PReLU after every one of them, so an export that took the GPU path was split 33 times: each activation came off the chip to be activated on the processor and went straight back, a 64-channel map in both directions, per tile. A machine with a good graphics chip was not exporting any faster for having it. PReLU(x) is exactly Relu(x) - slope * Relu(-x), and Relu, Neg, Mul and Sub the provider does implement, so scripts/realesr-gpu.py writes the 33 activations out as those four and drops the slopes nobody reads any more. The model file is the output of that script, not the file as published. One 256x256 tile through the model before and after, on a WebGPU session: the runtime no longer reports nodes left off the preferred provider (it did, once, before) and the processor path answers bit for bit what it answered before. The warning itself cannot be switched off from here - env.logLevel is read when the runtime module initialises, before any of this runs - so the graph was fixed rather than the lines hidden. --- .../public/models/realesr-general-x4v3.onnx | 531 ++++++++++++++---- docker/frontend/scripts/realesr-gpu.py | 73 +++ docker/frontend/src/engine/superRes.ts | 9 + 3 files changed, 496 insertions(+), 117 deletions(-) create mode 100644 docker/frontend/scripts/realesr-gpu.py diff --git a/docker/frontend/public/models/realesr-general-x4v3.onnx b/docker/frontend/public/models/realesr-general-x4v3.onnx index 0d49330..b65abc9 100644 --- a/docker/frontend/public/models/realesr-general-x4v3.onnx +++ b/docker/frontend/public/models/realesr-general-x4v3.onnx @@ -1,4 +1,4 @@ -pytorch2.8.0:Ö‚© +pytorch2.8.0:Éò© ¬ input body.0.weight @@ -8,9 +8,18 @@ kernel_shape@@ * pads@@@@ * strides@@  -V -/body.0/Conv_output_0 -onnx::PRelu_242/body.1/PRelu_output_0 /body.1/PRelu"PRelu +U +/body.0/Conv_output_0/body.1/PRelu_output_0.pos/body.1/PRelu_output_0.pos"Relu +T +/body.0/Conv_output_0/body.1/PRelu_output_0.neg/body.1/PRelu_output_0.neg"Neg +\ +/body.1/PRelu_output_0.neg/body.1/PRelu_output_0.relu/body.1/PRelu_output_0.relu"Relu +| +/body.1/PRelu_output_0.relu +onnx::PRelu_242__broadcast/body.1/PRelu_output_0.scaled/body.1/PRelu_output_0.scaled"Mul +g +/body.1/PRelu_output_0.pos +/body.1/PRelu_output_0.scaled/body.1/PRelu_output_0 /body.1/PRelu"Sub ½ /body.1/PRelu_output_0 body.2.weight @@ -20,9 +29,18 @@ V kernel_shape@@ * pads@@@@ * strides@@  -V -/body.2/Conv_output_0 -onnx::PRelu_243/body.3/PRelu_output_0 /body.3/PRelu"PRelu +U +/body.2/Conv_output_0/body.3/PRelu_output_0.pos/body.3/PRelu_output_0.pos"Relu +T +/body.2/Conv_output_0/body.3/PRelu_output_0.neg/body.3/PRelu_output_0.neg"Neg +\ +/body.3/PRelu_output_0.neg/body.3/PRelu_output_0.relu/body.3/PRelu_output_0.relu"Relu +| +/body.3/PRelu_output_0.relu +onnx::PRelu_243__broadcast/body.3/PRelu_output_0.scaled/body.3/PRelu_output_0.scaled"Mul +g +/body.3/PRelu_output_0.pos +/body.3/PRelu_output_0.scaled/body.3/PRelu_output_0 /body.3/PRelu"Sub ½ /body.3/PRelu_output_0 body.4.weight @@ -32,9 +50,18 @@ V kernel_shape@@ * pads@@@@ * strides@@  -V -/body.4/Conv_output_0 -onnx::PRelu_244/body.5/PRelu_output_0 /body.5/PRelu"PRelu +U +/body.4/Conv_output_0/body.5/PRelu_output_0.pos/body.5/PRelu_output_0.pos"Relu +T +/body.4/Conv_output_0/body.5/PRelu_output_0.neg/body.5/PRelu_output_0.neg"Neg +\ +/body.5/PRelu_output_0.neg/body.5/PRelu_output_0.relu/body.5/PRelu_output_0.relu"Relu +| +/body.5/PRelu_output_0.relu +onnx::PRelu_244__broadcast/body.5/PRelu_output_0.scaled/body.5/PRelu_output_0.scaled"Mul +g +/body.5/PRelu_output_0.pos +/body.5/PRelu_output_0.scaled/body.5/PRelu_output_0 /body.5/PRelu"Sub ½ /body.5/PRelu_output_0 body.6.weight @@ -44,9 +71,18 @@ V kernel_shape@@ * pads@@@@ * strides@@  -V -/body.6/Conv_output_0 -onnx::PRelu_245/body.7/PRelu_output_0 /body.7/PRelu"PRelu +U +/body.6/Conv_output_0/body.7/PRelu_output_0.pos/body.7/PRelu_output_0.pos"Relu +T +/body.6/Conv_output_0/body.7/PRelu_output_0.neg/body.7/PRelu_output_0.neg"Neg +\ +/body.7/PRelu_output_0.neg/body.7/PRelu_output_0.relu/body.7/PRelu_output_0.relu"Relu +| +/body.7/PRelu_output_0.relu +onnx::PRelu_245__broadcast/body.7/PRelu_output_0.scaled/body.7/PRelu_output_0.scaled"Mul +g +/body.7/PRelu_output_0.pos +/body.7/PRelu_output_0.scaled/body.7/PRelu_output_0 /body.7/PRelu"Sub ½ /body.7/PRelu_output_0 body.8.weight @@ -56,9 +92,18 @@ V kernel_shape@@ * pads@@@@ * strides@@  -V -/body.8/Conv_output_0 -onnx::PRelu_246/body.9/PRelu_output_0 /body.9/PRelu"PRelu +U +/body.8/Conv_output_0/body.9/PRelu_output_0.pos/body.9/PRelu_output_0.pos"Relu +T +/body.8/Conv_output_0/body.9/PRelu_output_0.neg/body.9/PRelu_output_0.neg"Neg +\ +/body.9/PRelu_output_0.neg/body.9/PRelu_output_0.relu/body.9/PRelu_output_0.relu"Relu +| +/body.9/PRelu_output_0.relu +onnx::PRelu_246__broadcast/body.9/PRelu_output_0.scaled/body.9/PRelu_output_0.scaled"Mul +g +/body.9/PRelu_output_0.pos +/body.9/PRelu_output_0.scaled/body.9/PRelu_output_0 /body.9/PRelu"Sub Á /body.9/PRelu_output_0 body.10.weight @@ -68,9 +113,18 @@ V kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.10/Conv_output_0 -onnx::PRelu_247/body.11/PRelu_output_0/body.11/PRelu"PRelu +X +/body.10/Conv_output_0/body.11/PRelu_output_0.pos/body.11/PRelu_output_0.pos"Relu +W +/body.10/Conv_output_0/body.11/PRelu_output_0.neg/body.11/PRelu_output_0.neg"Neg +_ +/body.11/PRelu_output_0.neg/body.11/PRelu_output_0.relu/body.11/PRelu_output_0.relu"Relu + +/body.11/PRelu_output_0.relu +onnx::PRelu_247__broadcast/body.11/PRelu_output_0.scaled/body.11/PRelu_output_0.scaled"Mul +k +/body.11/PRelu_output_0.pos +/body.11/PRelu_output_0.scaled/body.11/PRelu_output_0/body.11/PRelu"Sub  /body.11/PRelu_output_0 body.12.weight @@ -80,9 +134,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.12/Conv_output_0 -onnx::PRelu_248/body.13/PRelu_output_0/body.13/PRelu"PRelu +X +/body.12/Conv_output_0/body.13/PRelu_output_0.pos/body.13/PRelu_output_0.pos"Relu +W +/body.12/Conv_output_0/body.13/PRelu_output_0.neg/body.13/PRelu_output_0.neg"Neg +_ +/body.13/PRelu_output_0.neg/body.13/PRelu_output_0.relu/body.13/PRelu_output_0.relu"Relu + +/body.13/PRelu_output_0.relu +onnx::PRelu_248__broadcast/body.13/PRelu_output_0.scaled/body.13/PRelu_output_0.scaled"Mul +k +/body.13/PRelu_output_0.pos +/body.13/PRelu_output_0.scaled/body.13/PRelu_output_0/body.13/PRelu"Sub  /body.13/PRelu_output_0 body.14.weight @@ -92,9 +155,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.14/Conv_output_0 -onnx::PRelu_249/body.15/PRelu_output_0/body.15/PRelu"PRelu +X +/body.14/Conv_output_0/body.15/PRelu_output_0.pos/body.15/PRelu_output_0.pos"Relu +W +/body.14/Conv_output_0/body.15/PRelu_output_0.neg/body.15/PRelu_output_0.neg"Neg +_ +/body.15/PRelu_output_0.neg/body.15/PRelu_output_0.relu/body.15/PRelu_output_0.relu"Relu + +/body.15/PRelu_output_0.relu +onnx::PRelu_249__broadcast/body.15/PRelu_output_0.scaled/body.15/PRelu_output_0.scaled"Mul +k +/body.15/PRelu_output_0.pos +/body.15/PRelu_output_0.scaled/body.15/PRelu_output_0/body.15/PRelu"Sub  /body.15/PRelu_output_0 body.16.weight @@ -104,9 +176,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.16/Conv_output_0 -onnx::PRelu_250/body.17/PRelu_output_0/body.17/PRelu"PRelu +X +/body.16/Conv_output_0/body.17/PRelu_output_0.pos/body.17/PRelu_output_0.pos"Relu +W +/body.16/Conv_output_0/body.17/PRelu_output_0.neg/body.17/PRelu_output_0.neg"Neg +_ +/body.17/PRelu_output_0.neg/body.17/PRelu_output_0.relu/body.17/PRelu_output_0.relu"Relu + +/body.17/PRelu_output_0.relu +onnx::PRelu_250__broadcast/body.17/PRelu_output_0.scaled/body.17/PRelu_output_0.scaled"Mul +k +/body.17/PRelu_output_0.pos +/body.17/PRelu_output_0.scaled/body.17/PRelu_output_0/body.17/PRelu"Sub  /body.17/PRelu_output_0 body.18.weight @@ -116,9 +197,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.18/Conv_output_0 -onnx::PRelu_251/body.19/PRelu_output_0/body.19/PRelu"PRelu +X +/body.18/Conv_output_0/body.19/PRelu_output_0.pos/body.19/PRelu_output_0.pos"Relu +W +/body.18/Conv_output_0/body.19/PRelu_output_0.neg/body.19/PRelu_output_0.neg"Neg +_ +/body.19/PRelu_output_0.neg/body.19/PRelu_output_0.relu/body.19/PRelu_output_0.relu"Relu + +/body.19/PRelu_output_0.relu +onnx::PRelu_251__broadcast/body.19/PRelu_output_0.scaled/body.19/PRelu_output_0.scaled"Mul +k +/body.19/PRelu_output_0.pos +/body.19/PRelu_output_0.scaled/body.19/PRelu_output_0/body.19/PRelu"Sub  /body.19/PRelu_output_0 body.20.weight @@ -128,9 +218,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.20/Conv_output_0 -onnx::PRelu_252/body.21/PRelu_output_0/body.21/PRelu"PRelu +X +/body.20/Conv_output_0/body.21/PRelu_output_0.pos/body.21/PRelu_output_0.pos"Relu +W +/body.20/Conv_output_0/body.21/PRelu_output_0.neg/body.21/PRelu_output_0.neg"Neg +_ +/body.21/PRelu_output_0.neg/body.21/PRelu_output_0.relu/body.21/PRelu_output_0.relu"Relu + +/body.21/PRelu_output_0.relu +onnx::PRelu_252__broadcast/body.21/PRelu_output_0.scaled/body.21/PRelu_output_0.scaled"Mul +k +/body.21/PRelu_output_0.pos +/body.21/PRelu_output_0.scaled/body.21/PRelu_output_0/body.21/PRelu"Sub  /body.21/PRelu_output_0 body.22.weight @@ -140,9 +239,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.22/Conv_output_0 -onnx::PRelu_253/body.23/PRelu_output_0/body.23/PRelu"PRelu +X +/body.22/Conv_output_0/body.23/PRelu_output_0.pos/body.23/PRelu_output_0.pos"Relu +W +/body.22/Conv_output_0/body.23/PRelu_output_0.neg/body.23/PRelu_output_0.neg"Neg +_ +/body.23/PRelu_output_0.neg/body.23/PRelu_output_0.relu/body.23/PRelu_output_0.relu"Relu + +/body.23/PRelu_output_0.relu +onnx::PRelu_253__broadcast/body.23/PRelu_output_0.scaled/body.23/PRelu_output_0.scaled"Mul +k +/body.23/PRelu_output_0.pos +/body.23/PRelu_output_0.scaled/body.23/PRelu_output_0/body.23/PRelu"Sub  /body.23/PRelu_output_0 body.24.weight @@ -152,9 +260,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.24/Conv_output_0 -onnx::PRelu_254/body.25/PRelu_output_0/body.25/PRelu"PRelu +X +/body.24/Conv_output_0/body.25/PRelu_output_0.pos/body.25/PRelu_output_0.pos"Relu +W +/body.24/Conv_output_0/body.25/PRelu_output_0.neg/body.25/PRelu_output_0.neg"Neg +_ +/body.25/PRelu_output_0.neg/body.25/PRelu_output_0.relu/body.25/PRelu_output_0.relu"Relu + +/body.25/PRelu_output_0.relu +onnx::PRelu_254__broadcast/body.25/PRelu_output_0.scaled/body.25/PRelu_output_0.scaled"Mul +k +/body.25/PRelu_output_0.pos +/body.25/PRelu_output_0.scaled/body.25/PRelu_output_0/body.25/PRelu"Sub  /body.25/PRelu_output_0 body.26.weight @@ -164,9 +281,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.26/Conv_output_0 -onnx::PRelu_255/body.27/PRelu_output_0/body.27/PRelu"PRelu +X +/body.26/Conv_output_0/body.27/PRelu_output_0.pos/body.27/PRelu_output_0.pos"Relu +W +/body.26/Conv_output_0/body.27/PRelu_output_0.neg/body.27/PRelu_output_0.neg"Neg +_ +/body.27/PRelu_output_0.neg/body.27/PRelu_output_0.relu/body.27/PRelu_output_0.relu"Relu + +/body.27/PRelu_output_0.relu +onnx::PRelu_255__broadcast/body.27/PRelu_output_0.scaled/body.27/PRelu_output_0.scaled"Mul +k +/body.27/PRelu_output_0.pos +/body.27/PRelu_output_0.scaled/body.27/PRelu_output_0/body.27/PRelu"Sub  /body.27/PRelu_output_0 body.28.weight @@ -176,9 +302,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.28/Conv_output_0 -onnx::PRelu_256/body.29/PRelu_output_0/body.29/PRelu"PRelu +X +/body.28/Conv_output_0/body.29/PRelu_output_0.pos/body.29/PRelu_output_0.pos"Relu +W +/body.28/Conv_output_0/body.29/PRelu_output_0.neg/body.29/PRelu_output_0.neg"Neg +_ +/body.29/PRelu_output_0.neg/body.29/PRelu_output_0.relu/body.29/PRelu_output_0.relu"Relu + +/body.29/PRelu_output_0.relu +onnx::PRelu_256__broadcast/body.29/PRelu_output_0.scaled/body.29/PRelu_output_0.scaled"Mul +k +/body.29/PRelu_output_0.pos +/body.29/PRelu_output_0.scaled/body.29/PRelu_output_0/body.29/PRelu"Sub  /body.29/PRelu_output_0 body.30.weight @@ -188,9 +323,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.30/Conv_output_0 -onnx::PRelu_257/body.31/PRelu_output_0/body.31/PRelu"PRelu +X +/body.30/Conv_output_0/body.31/PRelu_output_0.pos/body.31/PRelu_output_0.pos"Relu +W +/body.30/Conv_output_0/body.31/PRelu_output_0.neg/body.31/PRelu_output_0.neg"Neg +_ +/body.31/PRelu_output_0.neg/body.31/PRelu_output_0.relu/body.31/PRelu_output_0.relu"Relu + +/body.31/PRelu_output_0.relu +onnx::PRelu_257__broadcast/body.31/PRelu_output_0.scaled/body.31/PRelu_output_0.scaled"Mul +k +/body.31/PRelu_output_0.pos +/body.31/PRelu_output_0.scaled/body.31/PRelu_output_0/body.31/PRelu"Sub  /body.31/PRelu_output_0 body.32.weight @@ -200,9 +344,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.32/Conv_output_0 -onnx::PRelu_258/body.33/PRelu_output_0/body.33/PRelu"PRelu +X +/body.32/Conv_output_0/body.33/PRelu_output_0.pos/body.33/PRelu_output_0.pos"Relu +W +/body.32/Conv_output_0/body.33/PRelu_output_0.neg/body.33/PRelu_output_0.neg"Neg +_ +/body.33/PRelu_output_0.neg/body.33/PRelu_output_0.relu/body.33/PRelu_output_0.relu"Relu + +/body.33/PRelu_output_0.relu +onnx::PRelu_258__broadcast/body.33/PRelu_output_0.scaled/body.33/PRelu_output_0.scaled"Mul +k +/body.33/PRelu_output_0.pos +/body.33/PRelu_output_0.scaled/body.33/PRelu_output_0/body.33/PRelu"Sub  /body.33/PRelu_output_0 body.34.weight @@ -212,9 +365,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.34/Conv_output_0 -onnx::PRelu_259/body.35/PRelu_output_0/body.35/PRelu"PRelu +X +/body.34/Conv_output_0/body.35/PRelu_output_0.pos/body.35/PRelu_output_0.pos"Relu +W +/body.34/Conv_output_0/body.35/PRelu_output_0.neg/body.35/PRelu_output_0.neg"Neg +_ +/body.35/PRelu_output_0.neg/body.35/PRelu_output_0.relu/body.35/PRelu_output_0.relu"Relu + +/body.35/PRelu_output_0.relu +onnx::PRelu_259__broadcast/body.35/PRelu_output_0.scaled/body.35/PRelu_output_0.scaled"Mul +k +/body.35/PRelu_output_0.pos +/body.35/PRelu_output_0.scaled/body.35/PRelu_output_0/body.35/PRelu"Sub  /body.35/PRelu_output_0 body.36.weight @@ -224,9 +386,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.36/Conv_output_0 -onnx::PRelu_260/body.37/PRelu_output_0/body.37/PRelu"PRelu +X +/body.36/Conv_output_0/body.37/PRelu_output_0.pos/body.37/PRelu_output_0.pos"Relu +W +/body.36/Conv_output_0/body.37/PRelu_output_0.neg/body.37/PRelu_output_0.neg"Neg +_ +/body.37/PRelu_output_0.neg/body.37/PRelu_output_0.relu/body.37/PRelu_output_0.relu"Relu + +/body.37/PRelu_output_0.relu +onnx::PRelu_260__broadcast/body.37/PRelu_output_0.scaled/body.37/PRelu_output_0.scaled"Mul +k +/body.37/PRelu_output_0.pos +/body.37/PRelu_output_0.scaled/body.37/PRelu_output_0/body.37/PRelu"Sub  /body.37/PRelu_output_0 body.38.weight @@ -236,9 +407,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.38/Conv_output_0 -onnx::PRelu_261/body.39/PRelu_output_0/body.39/PRelu"PRelu +X +/body.38/Conv_output_0/body.39/PRelu_output_0.pos/body.39/PRelu_output_0.pos"Relu +W +/body.38/Conv_output_0/body.39/PRelu_output_0.neg/body.39/PRelu_output_0.neg"Neg +_ +/body.39/PRelu_output_0.neg/body.39/PRelu_output_0.relu/body.39/PRelu_output_0.relu"Relu + +/body.39/PRelu_output_0.relu +onnx::PRelu_261__broadcast/body.39/PRelu_output_0.scaled/body.39/PRelu_output_0.scaled"Mul +k +/body.39/PRelu_output_0.pos +/body.39/PRelu_output_0.scaled/body.39/PRelu_output_0/body.39/PRelu"Sub  /body.39/PRelu_output_0 body.40.weight @@ -248,9 +428,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.40/Conv_output_0 -onnx::PRelu_262/body.41/PRelu_output_0/body.41/PRelu"PRelu +X +/body.40/Conv_output_0/body.41/PRelu_output_0.pos/body.41/PRelu_output_0.pos"Relu +W +/body.40/Conv_output_0/body.41/PRelu_output_0.neg/body.41/PRelu_output_0.neg"Neg +_ +/body.41/PRelu_output_0.neg/body.41/PRelu_output_0.relu/body.41/PRelu_output_0.relu"Relu + +/body.41/PRelu_output_0.relu +onnx::PRelu_262__broadcast/body.41/PRelu_output_0.scaled/body.41/PRelu_output_0.scaled"Mul +k +/body.41/PRelu_output_0.pos +/body.41/PRelu_output_0.scaled/body.41/PRelu_output_0/body.41/PRelu"Sub  /body.41/PRelu_output_0 body.42.weight @@ -260,9 +449,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.42/Conv_output_0 -onnx::PRelu_263/body.43/PRelu_output_0/body.43/PRelu"PRelu +X +/body.42/Conv_output_0/body.43/PRelu_output_0.pos/body.43/PRelu_output_0.pos"Relu +W +/body.42/Conv_output_0/body.43/PRelu_output_0.neg/body.43/PRelu_output_0.neg"Neg +_ +/body.43/PRelu_output_0.neg/body.43/PRelu_output_0.relu/body.43/PRelu_output_0.relu"Relu + +/body.43/PRelu_output_0.relu +onnx::PRelu_263__broadcast/body.43/PRelu_output_0.scaled/body.43/PRelu_output_0.scaled"Mul +k +/body.43/PRelu_output_0.pos +/body.43/PRelu_output_0.scaled/body.43/PRelu_output_0/body.43/PRelu"Sub  /body.43/PRelu_output_0 body.44.weight @@ -272,9 +470,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.44/Conv_output_0 -onnx::PRelu_264/body.45/PRelu_output_0/body.45/PRelu"PRelu +X +/body.44/Conv_output_0/body.45/PRelu_output_0.pos/body.45/PRelu_output_0.pos"Relu +W +/body.44/Conv_output_0/body.45/PRelu_output_0.neg/body.45/PRelu_output_0.neg"Neg +_ +/body.45/PRelu_output_0.neg/body.45/PRelu_output_0.relu/body.45/PRelu_output_0.relu"Relu + +/body.45/PRelu_output_0.relu +onnx::PRelu_264__broadcast/body.45/PRelu_output_0.scaled/body.45/PRelu_output_0.scaled"Mul +k +/body.45/PRelu_output_0.pos +/body.45/PRelu_output_0.scaled/body.45/PRelu_output_0/body.45/PRelu"Sub  /body.45/PRelu_output_0 body.46.weight @@ -284,9 +491,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.46/Conv_output_0 -onnx::PRelu_265/body.47/PRelu_output_0/body.47/PRelu"PRelu +X +/body.46/Conv_output_0/body.47/PRelu_output_0.pos/body.47/PRelu_output_0.pos"Relu +W +/body.46/Conv_output_0/body.47/PRelu_output_0.neg/body.47/PRelu_output_0.neg"Neg +_ +/body.47/PRelu_output_0.neg/body.47/PRelu_output_0.relu/body.47/PRelu_output_0.relu"Relu + +/body.47/PRelu_output_0.relu +onnx::PRelu_265__broadcast/body.47/PRelu_output_0.scaled/body.47/PRelu_output_0.scaled"Mul +k +/body.47/PRelu_output_0.pos +/body.47/PRelu_output_0.scaled/body.47/PRelu_output_0/body.47/PRelu"Sub  /body.47/PRelu_output_0 body.48.weight @@ -296,9 +512,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.48/Conv_output_0 -onnx::PRelu_266/body.49/PRelu_output_0/body.49/PRelu"PRelu +X +/body.48/Conv_output_0/body.49/PRelu_output_0.pos/body.49/PRelu_output_0.pos"Relu +W +/body.48/Conv_output_0/body.49/PRelu_output_0.neg/body.49/PRelu_output_0.neg"Neg +_ +/body.49/PRelu_output_0.neg/body.49/PRelu_output_0.relu/body.49/PRelu_output_0.relu"Relu + +/body.49/PRelu_output_0.relu +onnx::PRelu_266__broadcast/body.49/PRelu_output_0.scaled/body.49/PRelu_output_0.scaled"Mul +k +/body.49/PRelu_output_0.pos +/body.49/PRelu_output_0.scaled/body.49/PRelu_output_0/body.49/PRelu"Sub  /body.49/PRelu_output_0 body.50.weight @@ -308,9 +533,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.50/Conv_output_0 -onnx::PRelu_267/body.51/PRelu_output_0/body.51/PRelu"PRelu +X +/body.50/Conv_output_0/body.51/PRelu_output_0.pos/body.51/PRelu_output_0.pos"Relu +W +/body.50/Conv_output_0/body.51/PRelu_output_0.neg/body.51/PRelu_output_0.neg"Neg +_ +/body.51/PRelu_output_0.neg/body.51/PRelu_output_0.relu/body.51/PRelu_output_0.relu"Relu + +/body.51/PRelu_output_0.relu +onnx::PRelu_267__broadcast/body.51/PRelu_output_0.scaled/body.51/PRelu_output_0.scaled"Mul +k +/body.51/PRelu_output_0.pos +/body.51/PRelu_output_0.scaled/body.51/PRelu_output_0/body.51/PRelu"Sub  /body.51/PRelu_output_0 body.52.weight @@ -320,9 +554,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.52/Conv_output_0 -onnx::PRelu_268/body.53/PRelu_output_0/body.53/PRelu"PRelu +X +/body.52/Conv_output_0/body.53/PRelu_output_0.pos/body.53/PRelu_output_0.pos"Relu +W +/body.52/Conv_output_0/body.53/PRelu_output_0.neg/body.53/PRelu_output_0.neg"Neg +_ +/body.53/PRelu_output_0.neg/body.53/PRelu_output_0.relu/body.53/PRelu_output_0.relu"Relu + +/body.53/PRelu_output_0.relu +onnx::PRelu_268__broadcast/body.53/PRelu_output_0.scaled/body.53/PRelu_output_0.scaled"Mul +k +/body.53/PRelu_output_0.pos +/body.53/PRelu_output_0.scaled/body.53/PRelu_output_0/body.53/PRelu"Sub  /body.53/PRelu_output_0 body.54.weight @@ -332,9 +575,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.54/Conv_output_0 -onnx::PRelu_269/body.55/PRelu_output_0/body.55/PRelu"PRelu +X +/body.54/Conv_output_0/body.55/PRelu_output_0.pos/body.55/PRelu_output_0.pos"Relu +W +/body.54/Conv_output_0/body.55/PRelu_output_0.neg/body.55/PRelu_output_0.neg"Neg +_ +/body.55/PRelu_output_0.neg/body.55/PRelu_output_0.relu/body.55/PRelu_output_0.relu"Relu + +/body.55/PRelu_output_0.relu +onnx::PRelu_269__broadcast/body.55/PRelu_output_0.scaled/body.55/PRelu_output_0.scaled"Mul +k +/body.55/PRelu_output_0.pos +/body.55/PRelu_output_0.scaled/body.55/PRelu_output_0/body.55/PRelu"Sub  /body.55/PRelu_output_0 body.56.weight @@ -344,9 +596,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.56/Conv_output_0 -onnx::PRelu_270/body.57/PRelu_output_0/body.57/PRelu"PRelu +X +/body.56/Conv_output_0/body.57/PRelu_output_0.pos/body.57/PRelu_output_0.pos"Relu +W +/body.56/Conv_output_0/body.57/PRelu_output_0.neg/body.57/PRelu_output_0.neg"Neg +_ +/body.57/PRelu_output_0.neg/body.57/PRelu_output_0.relu/body.57/PRelu_output_0.relu"Relu + +/body.57/PRelu_output_0.relu +onnx::PRelu_270__broadcast/body.57/PRelu_output_0.scaled/body.57/PRelu_output_0.scaled"Mul +k +/body.57/PRelu_output_0.pos +/body.57/PRelu_output_0.scaled/body.57/PRelu_output_0/body.57/PRelu"Sub  /body.57/PRelu_output_0 body.58.weight @@ -356,9 +617,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.58/Conv_output_0 -onnx::PRelu_271/body.59/PRelu_output_0/body.59/PRelu"PRelu +X +/body.58/Conv_output_0/body.59/PRelu_output_0.pos/body.59/PRelu_output_0.pos"Relu +W +/body.58/Conv_output_0/body.59/PRelu_output_0.neg/body.59/PRelu_output_0.neg"Neg +_ +/body.59/PRelu_output_0.neg/body.59/PRelu_output_0.relu/body.59/PRelu_output_0.relu"Relu + +/body.59/PRelu_output_0.relu +onnx::PRelu_271__broadcast/body.59/PRelu_output_0.scaled/body.59/PRelu_output_0.scaled"Mul +k +/body.59/PRelu_output_0.pos +/body.59/PRelu_output_0.scaled/body.59/PRelu_output_0/body.59/PRelu"Sub  /body.59/PRelu_output_0 body.60.weight @@ -368,9 +638,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.60/Conv_output_0 -onnx::PRelu_272/body.61/PRelu_output_0/body.61/PRelu"PRelu +X +/body.60/Conv_output_0/body.61/PRelu_output_0.pos/body.61/PRelu_output_0.pos"Relu +W +/body.60/Conv_output_0/body.61/PRelu_output_0.neg/body.61/PRelu_output_0.neg"Neg +_ +/body.61/PRelu_output_0.neg/body.61/PRelu_output_0.relu/body.61/PRelu_output_0.relu"Relu + +/body.61/PRelu_output_0.relu +onnx::PRelu_272__broadcast/body.61/PRelu_output_0.scaled/body.61/PRelu_output_0.scaled"Mul +k +/body.61/PRelu_output_0.pos +/body.61/PRelu_output_0.scaled/body.61/PRelu_output_0/body.61/PRelu"Sub  /body.61/PRelu_output_0 body.62.weight @@ -380,9 +659,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.62/Conv_output_0 -onnx::PRelu_273/body.63/PRelu_output_0/body.63/PRelu"PRelu +X +/body.62/Conv_output_0/body.63/PRelu_output_0.pos/body.63/PRelu_output_0.pos"Relu +W +/body.62/Conv_output_0/body.63/PRelu_output_0.neg/body.63/PRelu_output_0.neg"Neg +_ +/body.63/PRelu_output_0.neg/body.63/PRelu_output_0.relu/body.63/PRelu_output_0.relu"Relu + +/body.63/PRelu_output_0.relu +onnx::PRelu_273__broadcast/body.63/PRelu_output_0.scaled/body.63/PRelu_output_0.scaled"Mul +k +/body.63/PRelu_output_0.pos +/body.63/PRelu_output_0.scaled/body.63/PRelu_output_0/body.63/PRelu"Sub  /body.63/PRelu_output_0 body.64.weight @@ -392,9 +680,18 @@ Y kernel_shape@@ * pads@@@@ * strides@@  -Y -/body.64/Conv_output_0 -onnx::PRelu_274/body.65/PRelu_output_0/body.65/PRelu"PRelu +X +/body.64/Conv_output_0/body.65/PRelu_output_0.pos/body.65/PRelu_output_0.pos"Relu +W +/body.64/Conv_output_0/body.65/PRelu_output_0.neg/body.65/PRelu_output_0.neg"Neg +_ +/body.65/PRelu_output_0.neg/body.65/PRelu_output_0.relu/body.65/PRelu_output_0.relu"Relu + +/body.65/PRelu_output_0.relu +onnx::PRelu_274__broadcast/body.65/PRelu_output_0.scaled/body.65/PRelu_output_0.scaled"Mul +k +/body.65/PRelu_output_0.pos +/body.65/PRelu_output_0.scaled/body.65/PRelu_output_0/body.65/PRelu"Sub  /body.65/PRelu_output_0 body.66.weight @@ -16990,30 +17287,30 @@ y <±Â:ù�Ê:!-:²¬;V¸[»g’9�»�5<ùko»3Bª: €Z;0Ù4»� 9¢îB¸IÏÊ9 :ý³ºf¨ ;ÎF°¹¡!¼b—¼¼gšº„ö¤:OkŠ»L\}ºÂ�á;ƒFð;Åo–º)¼)!Òºïì¹ÛØ¥:±&ºz;G:T'B»})&ºÂeË9ë‹k<Üí"8£ý¢9éþ8.+oºèL9�,;â ºoÿ:§‰!»´ šºï#9ìN¹· 6¾ºØœ ¹û Œ;ÂwÌ;C'9ØSo¸¸(÷¸G¿:¡7»Ö%@ººˆ¼‘3<¨i: 2‡:¸¯u;ÿUÇ:Rg‰9Ù79¾ 9”îy¹p*—;<8–;^èÕ·�h#;Àﱺ"_5:Pu'ºôÎ¥º"¾:Bγ:ký»*0:Ó¯»`1“º®3ÿ¸tŸ:2©�:¬°:¾Ù!=â»�;pw¯7ïaÝ:d~ˆ:žš¹¢ùu:iT�¹h+:z¿â;&%;˸v9õñ�¹.BºŸÕ&:*}3ºÆj]:0ɺ@<`<.±¿:õ—к½+”»™$W8â|w9\eá¹VXP¹DÖÖº•$Ⱥn ¹·@°<<ĸºþª9·é–ºZi9ñ®»´ü;÷¶>ºß®·S½×;Ï:H'͹*ùB:/}²¹2Wƒ¹F…ºÜˆù:Ð�“ºó`¹:ðF~;¹“Õ¹žÑÍ:4~$9Ô»,ºì·;` ä:³òº}m‹;š�Ù¹Öš8@Øp8¯û9¨éƒ8hø»¼@b=»}æß8L(¢:>~•¸a# ºñÔ-:Œ"¬¹V¯7r·÷»Ä| »HW<¹ƒ÷¡»Î$:¨Ò­9ðëºKyh:©r�:Cs¼Ëj׺¶Ôc:9M²»!µPº—¿Q:³3]ºÁPº„_ª9˜�;ý瑺ÂAƺW»  :O¼r­‚¼¢¿Ç¼pÉ…»À‡i»GÎŽ¼2'¼ê[½4Á¯;9ó3¼@<×»H!¼ h<´Ø<äáš; ªP<È»¼Ìñ«¼DÁ¼àf‚» Æ»(Iµ¼Xoo¼.Ç#½¨ýŸ;€¼º|`Ž¼Ðœ…¼X§ƒ< À•<ªær¼ o:ŒT¼²˜‹¼&2ú¼0礻�¦½»Õ¿¼*œ@Bonnx::PRelu_242J€Ñr¼§¾í -¾¼Q¿cÉ}?Ðôo?o8Ÿ¼ ¹¿«œ½|†>† �¾à?±+�½ÿ¶{?F¤Ã¾ÒŸ7½A æ½l鬾¾‘y?\�¾¾5ͽž¿oÚ‚¿ôéϺæ¤W¾‰�Ò>®ô|?Â?›Ào¼î˜{?k¾Â¾x?ÏÀ:´‚”½Ó½®½¶_?2I½mñ ¿¸¯T?’i£<®¤½¢+³¼Ó> ¼:�0¾ö¤(?Å,e?É=„¿p –=%Ê�?2Îq? Ø>ôÇ ?öà½<°¬¾Tk ¿Å+.?âBq?JÍ‚<âØF¿TcÌ>œ<*œ@Bonnx::PRelu_243J€Ÿ§¢¼Ö…è½=>A>Ê€?½¾±*?……¬<+’¾}‰¾0Ž®¾Ú*?ÈQ8>jIh?�=¾dEà¾S¯=£óÚ¾G¥©½ -ê]:Eþ!¿v‘þ½Íê>� Õ¾Äç¾&¯†¾’�=¨=¡¾Ô³?S…?õE›½Ø¥'¾â¥µ¾Y½í½¸—)½£¯„¾F ¿Ì€8¾-­î=]Π¾i>¾Ïr$¾µ=÷=¤=ڧͽ6‰Ü½TÚ™=¹õ’½|Á¡=d_:Š?’>œýx?‡E¾þˆÂ="ˆ?'y¼C“-? Pi>q$ǾtG¿äK<­ƒ(¾á™¾EÔy¾q’‹>‡~¢¾*œ@Bonnx::PRelu_244J€ÍL¿½h½¾/>G3‹¾-€?Àö4>ÏL.½®bh?âÜ¿DÆ€?aq�¾�\?_y›=êѾt¯¾ÚÔ¶¾;ù>° ú;kæ³¾þþ"¾¡'•>z2d¾AÀ>¤D?ˆ<:¸¹><¶=¿Ø>? _†9ÐèC¾n‘§¾~yî¾a&=óܽ¬/龒Ĩ½\Q¾‚—½°>‚xe¾žÚR=ºB¿¶^¾¹G«¾C¯…>â Á¼>ÿ©½#Ž�¾¿’=Œ—€?cU?áÞ«½Ð3|?Äüš>Pòä>|‹>`°/=T·¿P¿ =¼=–Ý¢¾N»¾¾—Û=ä a=*œ@Bonnx::PRelu_245J€FÉ›¾}�‡½ ß½¶MR¾j�{?¦¸ž>»`‰¾_ã�½[{Ú¾v›~?½…g½v‡o?x™¾žƒ=‰Õ„¾ñ''>ʃF?t3”>¼9ɼ¢ZT¾ }?ã,`>›œ›½n‡@?IWÞ½¤fè¾@(?¸“?`Ðô>,²>·q$¾ÿ%¿²¬½zò¤:´¾ËwV¾Äoÿ¾U#>Î ¾Á(¼>¢£µ½¼«>’Ík>žìÜ<Ã'¾#?:íç>²z¾‚TŽ>Ë�?æE½=èé\>T…?ؾ6ॾÎ@c>¤°‰¾_ê�¾ô)>¶0W>ð#ç¾.ÈÜ=Ô|l>ñÊ??*œ@Bonnx::PRelu_246J€†*ß¾»Ò¾=pó½Í´Æ¾à¨s?î](¾âM¿[ Ô=ºï?Îãr?›x>ÈõQ?ØV¿ê¢J?pE?ª˜M¾‹Š?C÷µ¾ŠÊ¿ì@¾Pi+>™§Ñ>„_ >^‘w?ŽVƒ¾XÂÞ¾ñ1È=ÚˆŒ?ˆþ??ù´Š½kgû¾ô«Ú¾Óýˆ>”§¿‚Ýu< Ún>_]¼L�G?V‰h½º›¿N¢½XAG>;›Ž¾0ž�dĽ-ÅÂ>ŠíG?ø\2¾”ˆ? š‡?ø¤>d1o½Xp?ªX©»B%¿‚ñO?0À¾¢‹h>ñÿ¼”8?šê?/†¾•ãg?í"Ä>*œ@Bonnx::PRelu_247J€ìh«¾˜$]>:±×½`¦8¿“^‡?1?A‘!?ï÷¶¾~š»ãô‡?4Ñ´>O?ŒÌ?>“É%?¯pß=VP +øû¹£¸fíN¹†œ³::}�;ލúºðŒzº§@¢ºi‡:ܶò¸•ÄH9ÙfLºMà†º!üû‚AùºŠ½Vºœé82àž9ùÝr9CEﺺxj¹-ái:qµ2;È�’»Äq�8Èš´:ª» A²¹WOA9À:ž‰º®�;E:%á[9„Ì&ºi:%O6: M»–2<�ÕÊ»„i:ž»k¾:áIá;‚8°»ñä:ÙF¬:fXw¹ÔÀX¹æç×»'I¶¹e)=9€L踤%ë:È0:ÅŸ©»ªÞLº =»&“Å;i p¹ ‘ݹ³�˜:Mí‰:ÿÞ4ºÀ]£:E:²Sô9˜S<žòº'iY»»û¼Ïœ^º©®¹c•:Lî0:žº]Ë;TL“»…Ú:³Ò»€fç:€5¸,Žë:F“N9ŠqcºÀµj¹÷ÔÔ¹Ö¸X:ƒÅºd29Nã":+óÌ:ô›A»9éŠ;= û» Œ:±3˜»+ÙŒ;s#¢»F@½¹ºlUØ9¶…V¹Ë�Ÿ<úÝ„º¢À‡:Õ1:oìŽ8ň;Ó=™; ôS»þ:þkÛº¥Zi:‘mö¹Pë°9,S‚»wÀÈ9í):Pý9Åu€9üÑ:E” <§LC:"Ì;\xÜ»6”!¹ˆüò¸j¡v9àsà8ØŽ:ÞÛr;h0/ºv#»Zoì¸u„¹03:ÃM5²€c9‹c»È º¦¬Š¸D_;Õ䡹P9’Ì×:{Ý�¹Ó6¸9”­/¼ÀÊÂ6 ÊÇ9b~:;çÀ§ºý‘ƹ=ÞT9!¶¹8.ºZ3O»‘¡�:|]wº”òÄ:¸&‚:Q”¾¹ð ,¹FÀ¹á0‘:Pj¼yØ:,!/:)ƒÇ;ƒKø:*Õ0B body.66.biasJÀ&%o¼E@½€Ì•;\zT;T¦Ó¼hú¼»[:p£W<øŒ¼€°µ9Ô>O¼r­‚¼¢¿Ç¼pÉ…»À‡i»GÎŽ¼2'¼ê[½4Á¯;9ó3¼@<×»H!¼ h<´Ø<äáš; ªP<È»¼Ìñ«¼DÁ¼àf‚» Æ»(Iµ¼Xoo¼.Ç#½¨ýŸ;€¼º|`Ž¼Ðœ…¼X§ƒ< À•<ªær¼ o:ŒT¼²˜‹¼&2ú¼0礻�¦½»Õ¿¼*©@Bonnx::PRelu_242__broadcastJ€Ñr¼§¾í +¾¼Q¿cÉ}?Ðôo?o8Ÿ¼ ¹¿«œ½|†>† �¾à?±+�½ÿ¶{?F¤Ã¾ÒŸ7½A æ½l鬾¾‘y?\�¾¾5ͽž¿oÚ‚¿ôéϺæ¤W¾‰�Ò>®ô|?Â?›Ào¼î˜{?k¾Â¾x?ÏÀ:´‚”½Ó½®½¶_?2I½mñ ¿¸¯T?’i£<®¤½¢+³¼Ó> ¼:�0¾ö¤(?Å,e?É=„¿p –=%Ê�?2Îq? Ø>ôÇ ?öà½<°¬¾Tk ¿Å+.?âBq?JÍ‚<âØF¿TcÌ>œ<*©@Bonnx::PRelu_243__broadcastJ€Ÿ§¢¼Ö…è½=>A>Ê€?½¾±*?……¬<+’¾}‰¾0Ž®¾Ú*?ÈQ8>jIh?�=¾dEà¾S¯=£óÚ¾G¥©½ +ê]:Eþ!¿v‘þ½Íê>� Õ¾Äç¾&¯†¾’�=¨=¡¾Ô³?S…?õE›½Ø¥'¾â¥µ¾Y½í½¸—)½£¯„¾F ¿Ì€8¾-­î=]Π¾i>¾Ïr$¾µ=÷=¤=ڧͽ6‰Ü½TÚ™=¹õ’½|Á¡=d_:Š?’>œýx?‡E¾þˆÂ="ˆ?'y¼C“-? Pi>q$ǾtG¿äK<­ƒ(¾á™¾EÔy¾q’‹>‡~¢¾*©@Bonnx::PRelu_244__broadcastJ€ÍL¿½h½¾/>G3‹¾-€?Àö4>ÏL.½®bh?âÜ¿DÆ€?aq�¾�\?_y›=êѾt¯¾ÚÔ¶¾;ù>° ú;kæ³¾þþ"¾¡'•>z2d¾AÀ>¤D?ˆ<:¸¹><¶=¿Ø>? _†9ÐèC¾n‘§¾~yî¾a&=óܽ¬/龒Ĩ½\Q¾‚—½°>‚xe¾žÚR=ºB¿¶^¾¹G«¾C¯…>â Á¼>ÿ©½#Ž�¾¿’=Œ—€?cU?áÞ«½Ð3|?Äüš>Pòä>|‹>`°/=T·¿P¿ =¼=–Ý¢¾N»¾¾—Û=ä a=*©@Bonnx::PRelu_245__broadcastJ€FÉ›¾}�‡½ ß½¶MR¾j�{?¦¸ž>»`‰¾_ã�½[{Ú¾v›~?½…g½v‡o?x™¾žƒ=‰Õ„¾ñ''>ʃF?t3”>¼9ɼ¢ZT¾ }?ã,`>›œ›½n‡@?IWÞ½¤fè¾@(?¸“?`Ðô>,²>·q$¾ÿ%¿²¬½zò¤:´¾ËwV¾Äoÿ¾U#>Î ¾Á(¼>¢£µ½¼«>’Ík>žìÜ<Ã'¾#?:íç>²z¾‚TŽ>Ë�?æE½=èé\>T…?ؾ6ॾÎ@c>¤°‰¾_ê�¾ô)>¶0W>ð#ç¾.ÈÜ=Ô|l>ñÊ??*©@Bonnx::PRelu_246__broadcastJ€†*ß¾»Ò¾=pó½Í´Æ¾à¨s?î](¾âM¿[ Ô=ºï?Îãr?›x>ÈõQ?ØV¿ê¢J?pE?ª˜M¾‹Š?C÷µ¾ŠÊ¿ì@¾Pi+>™§Ñ>„_ >^‘w?ŽVƒ¾XÂÞ¾ñ1È=ÚˆŒ?ˆþ??ù´Š½kgû¾ô«Ú¾Óýˆ>”§¿‚Ýu< Ún>_]¼L�G?V‰h½º›¿N¢½XAG>;›Ž¾0ž�dĽ-ÅÂ>ŠíG?ø\2¾”ˆ? š‡?ø¤>d1o½Xp?ªX©»B%¿‚ñO?0À¾¢‹h>ñÿ¼”8?šê?/†¾•ãg?í"Ä>*©@Bonnx::PRelu_247__broadcastJ€ìh«¾˜$]>:±×½`¦8¿“^‡?1?A‘!?ï÷¶¾~š»ãô‡?4Ñ´>O?ŒÌ?>“É%?¯pß=VP ?„ÿo?õ�¦>†þ<øº™¾uÉ? üLº`¨>Vgž?re�<”�ϾÁHô>éHH?‚�D??E>T@?pŸ§?Ú`�½¤°E½ã¡½2¼Q?ªÀྉ8>‰>¾¯/{=JA½<-ö=¦t -?„²?¶�>äÜ=gv? v?D_??.Im?Ôý£<À­>Ö€?|ö}>©G[? û£½†>ô5¡¾ü�= Ìý>÷[¾Pu=€Ùq?yñ¾*œ@Bonnx::PRelu_248J€ƒ•>åê0>ŠÌö=Ðí*½Â(f?ðQM?x,x>ÜÂÁ¾ˆRã>ßo?˜Ï´¾è2u?ÓÅ"?Ï^g?…CξtiÝ>ÈP?"²?tµŠ>hLнx §=Tsö½:>º;€?Um¡¾l^ؾAR'?V¯™?îÉj?\€:¾dÛZ?�(§=\û[?,¿,¿©V¶[V>©]¾$íÝ>BH­>ÍË>=ú»�>j狾–«,¾±ÿˆ¾ÓFƒ?’pÔ>Fõ+?,&‰?À:Ç>Ÿè>8<ƒ?X.„>³»½àO¾à¹Â¾Lþ>Ôã±=w4?wì6=¥¶å>:´v?žÃ¾*œ@Bonnx::PRelu_249J€ºÍ=øÕ…>ž¨ÿ>pËî¾DY«?Š!ö>‚�>Éý¾ b½½b7™?8;Õ¼.Ýò?¾2o>ÆÙ|?¨º+?Ë`Q? Ù±?(î>?ÜÜ>!dؽkŒ¾“š=±EÐ>¥Z\?s¾â»˜½R[e?žç‰?öq?÷G>H&á>ĸ¿®h >i´†=èp¾Œ¶„?{ë¾ûß9?Jéõ¼P�ò>w[¾ÁK2?t3T>ªòò¾²’U?Ýä6?q§?<(�>ÁG?î3s?å*ß>,!Ñ>àÖZ?§‚!?ÑMV>ÖÙW¾êÍ‚¾n‹ >t >Ù;¾ˆ¡¿ÒŸ©>h? Qõ=*œ@Bonnx::PRelu_250J€}_7>éà@:ë�¾×U*¿ºqP?_Oo¾xF[¿+ÿ½E3B=¬ `?î.>ó‘?¤T ?¥Õ‰?¡µ?÷Ä?ël?«†?4%?yÈ>&àF¾Û6Q½Ê3>^5?êpí;hª[¾;õB?[F_?ø!»h�^?pe˽à·å=¢ç >À1³> 8?Q«B?1(¿¶o½ ¾‚¾XЉ>GCM¾zèQ>¿s>Þðá<¸A«>ô=?Æ–R?¾f¯¾J¬n?%¯u?Îá?ì'e>Ö%ƒ?&Ím?¬{¾÷Šâ¾Åvξ£5½B±¿ìÆ�½‘©>?.@>1°ð>࿪>*œ@Bonnx::PRelu_251J€h¡J>J­�>ÜbÄ>amž>¤]€?´ ˆ½N�€÷�?óON>?Ü3?‹€?pÚm?ðr_?¯¾¾È�³¾ø>EO?0¸­?Þ0þ˱ï¾DO>ºp?Ø,¦>9]>ü8m?ši;—rS¾ßŠ ¾†# ?´aŽ? ¥<>tÇ`¾'ž¥¾l-p>]?üe´>h˜;?;R�½Þ¨¼zœ&?W¢?ÙÓÎ=Â¥"?2ìp?¿=?û?ô�‹?èØ>Ç>�è3¾÷òÛ¾L6o>tÏÔ<^ü“¿2Íç¾ÿÒ“½‚�E?&M©¾*œ@Bonnx::PRelu_252J€Îy¾§Ð>¶ ¾R¡ì¼ªxƒ?óƒ[>2@?¶#¿{*˜=ƒï†?Œ�¤¾Br?ÄF_>ZY? ±ú¾‰Çƒ?©ãk?s?ö©\?»û>MY?ÚY¼>ci?ëØ_?¿=‚Î>8I?;tŠ?°B�½MÒ>4£Õ>¹·˜>\à²>h6?VZU?�m)?—‘ɽ¢+y¾…7…¾€¸i½«*~>*2¤>ŠÚÇ>d©¿·ûø¾~>ã,V?Xh¾�#Ë>l†?Lg…?Ø:ó>^…? x8è=‰ž=?t�2¾} -¯=6„†¾ Xо_‰±>œ`w¾*œ@Bonnx::PRelu_253J€V¶"¿þÇñ>b�w¾[5}>NEo?¡PB>Én½� ¸½È—€>ƱU?K(Ã=ô‰?MN?½­‚?1 ¿Áí}?~‹z?àv?xv_?íÀ®>ÜÑT?+ú'¾°`à>’þo?ô‹;?êîe>„Rm?ð±?GÁY?¢7?ÖÎì¾–¾?°N�>º -Ú½Õ‘Õu¾Èä¾H³¾­#?¾>/A@?ÄëP>ü>·Ï ¾ö'x?u”ˆ>˜%?‚ƒ¤?šdn?ŠÈk>Ãgˆ?^Ö=?§—0?ÚÕQ¾¶Ñ¦>v›?èQ‚¾²x_?6$�=Kµ¿½âÅ…?‚Û =*œ@Bonnx::PRelu_254J€ )?ªs¾¾’%Ú¾{¿Í½‘?,µü>pÏk?¬$?²Ê\?Œ\±?ÇÃ6>ít�?ôdÓ>.0�?NÛ¾zps?¾µ]?)Ý…?7Ú ?8ƒñ>à~뾃½P?(©?ïQ“?‘i¢¾70¾Æï‚?Ðm4?f‡D?nö>ßây?\" >é?¢63¾;E?".D>S?r$Í=÷?Dß=?œñ_½wÈ2>z.>-àn?:Üf¾É-¶>ºÍZ?±po?1%?li1?˜k?–™£½Vkß¾¢Îb<µ¦U?oBá>Ö[<<ÞÂÇ=ÊÆ5>ôµ1?fG>*œ@Bonnx::PRelu_255J€¼•2?¶b?ñ.ª¾Þy&?ãØ`?ä'÷¾\�?ÓOÉ>Ï d>®c`?ºMs>hQˆ?¸-X?Œ0@?Þ?l<�?Rþh?ô­n?ªÃ¦>©ñ½qk?ª?Õú°=ôú:?è 5¾Î/?£5?&×9?¿jÀ>(|¾´•q?,¬?‡#ÿ¼‹MG>zè4?©×�>Š«{? œv¼�÷&>ï–>jô]?¬{ѼÞóÚ>°7>dqD>&ÏǽÿDu?HÜ;>k h?€Çr?.ƒ?jž7?Òku?.ÕZ?n—Y¾Lc¼‚?Ë>Ù -r?j‹½Å7B? @¸¾¬>Á>ÚžÝ<*œ@Bonnx::PRelu_256J€ÚÂ2?ˆ‰¯>š£‹>ƒO ?ò§�?ÙÑF¼¼z?W쪾?³Ì>�5‡?�œÌ>ycƒ?¦²T?6χ?ÌP¥=Z7‚?èák?²vy?ç�‚?¢b0½Ü¬?àÍP>ȧ>�6�?>?F¾´L}½pΕ>ú£?!!?|N?õG*?ôX¥?}¬=€¿+?ª‡?rù?˜#_?F™¾Ø‹ò>þ…²>0)9?‚B ?»¾€>1'?Øœæ>8©?cÄ„?.õá>j³?�ƒ^?ŽE¾#ì¥>gS½:À­Y?ÿG½h+j?î¥á=Ç�=ªæŒ½šÄs>*œ@Bonnx::PRelu_257J€:¥S?ÂN ?‰´>;%ˆ‹>gbk?Û˜)>îä…?9ÃÎ<\…±¾PQk?uع<^Ñ‚?)R&?ÐXp? -ÃÞ>Ìs„?šM¾?Nîš?Ñ‚f?âDî>t¢d?žn= Ûí>+ ‘?<ÄB>TxÍ>Ý„Ö>0þ�?n&‡>_O? ZÆ>«?è?n[?³EH?ãb?4\?�Ñ\>SRä=¹š°½Ìž½x>’ž>Iûƒ=•¤¡>Âs?…“y?¾•é><·a?³ÞN?/!A?D?‚o™?”„p? ?º> Û‡>¸�=ˆø=?)™Ÿ»5©N?�|:>‰4®:SðÀ=úšE<*œ@Bonnx::PRelu_258J€†�;�è¾ìD >4+_> OŒ?Ñ;?H­p?°Öé¾Eáµ>¨ns?"R=.v?sn¾z -f?I¿¾bør?F"�?VÕT?Vx?H ?“:Œ>úJñ½‘^$?k°‚?÷3Â>Ûšç=#xI?Ol¬?Ö¹Ü>P:?Žy²>æ‡f?Ú}?f%>QžR?b·!?M[l?bv�¾Îr?܇»>Ðu¾þ«¢>-™=Êʇ>XìÛ>¡Íó>¥Œ–?U>ü¼ ¿4Ë£?;ïë>óâa>#ëŒ?¤]? {ž=žI¶>C8$>j‚>•º�½t¿j?â2k>é ?û‚?x‚ ?*œ@Bonnx::PRelu_259J€ºûJ> +?„²?¶�>äÜ=gv? v?D_??.Im?Ôý£<À­>Ö€?|ö}>©G[? û£½†>ô5¡¾ü�= Ìý>÷[¾Pu=€Ùq?yñ¾*©@Bonnx::PRelu_248__broadcastJ€ƒ•>åê0>ŠÌö=Ðí*½Â(f?ðQM?x,x>ÜÂÁ¾ˆRã>ßo?˜Ï´¾è2u?ÓÅ"?Ï^g?…CξtiÝ>ÈP?"²?tµŠ>hLнx §=Tsö½:>º;€?Um¡¾l^ؾAR'?V¯™?îÉj?\€:¾dÛZ?�(§=\û[?,¿,¿©V¶[V>©]¾$íÝ>BH­>ÍË>=ú»�>j狾–«,¾±ÿˆ¾ÓFƒ?’pÔ>Fõ+?,&‰?À:Ç>Ÿè>8<ƒ?X.„>³»½àO¾à¹Â¾Lþ>Ôã±=w4?wì6=¥¶å>:´v?žÃ¾*©@Bonnx::PRelu_249__broadcastJ€ºÍ=øÕ…>ž¨ÿ>pËî¾DY«?Š!ö>‚�>Éý¾ b½½b7™?8;Õ¼.Ýò?¾2o>ÆÙ|?¨º+?Ë`Q? Ù±?(î>?ÜÜ>!dؽkŒ¾“š=±EÐ>¥Z\?s¾â»˜½R[e?žç‰?öq?÷G>H&á>ĸ¿®h >i´†=èp¾Œ¶„?{ë¾ûß9?Jéõ¼P�ò>w[¾ÁK2?t3T>ªòò¾²’U?Ýä6?q§?<(�>ÁG?î3s?å*ß>,!Ñ>àÖZ?§‚!?ÑMV>ÖÙW¾êÍ‚¾n‹ >t >Ù;¾ˆ¡¿ÒŸ©>h? Qõ=*©@Bonnx::PRelu_250__broadcastJ€}_7>éà@:ë�¾×U*¿ºqP?_Oo¾xF[¿+ÿ½E3B=¬ `?î.>ó‘?¤T ?¥Õ‰?¡µ?÷Ä?ël?«†?4%?yÈ>&àF¾Û6Q½Ê3>^5?êpí;hª[¾;õB?[F_?ø!»h�^?pe˽à·å=¢ç >À1³> 8?Q«B?1(¿¶o½ ¾‚¾XЉ>GCM¾zèQ>¿s>Þðá<¸A«>ô=?Æ–R?¾f¯¾J¬n?%¯u?Îá?ì'e>Ö%ƒ?&Ím?¬{¾÷Šâ¾Åvξ£5½B±¿ìÆ�½‘©>?.@>1°ð>࿪>*©@Bonnx::PRelu_251__broadcastJ€h¡J>J­�>ÜbÄ>amž>¤]€?´ ˆ½N�€÷�?óON>?Ü3?‹€?pÚm?ðr_?¯¾¾È�³¾ø>EO?0¸­?Þ0þ˱ï¾DO>ºp?Ø,¦>9]>ü8m?ši;—rS¾ßŠ ¾†# ?´aŽ? ¥<>tÇ`¾'ž¥¾l-p>]?üe´>h˜;?;R�½Þ¨¼zœ&?W¢?ÙÓÎ=Â¥"?2ìp?¿=?û?ô�‹?èØ>Ç>�è3¾÷òÛ¾L6o>tÏÔ<^ü“¿2Íç¾ÿÒ“½‚�E?&M©¾*©@Bonnx::PRelu_252__broadcastJ€Îy¾§Ð>¶ ¾R¡ì¼ªxƒ?óƒ[>2@?¶#¿{*˜=ƒï†?Œ�¤¾Br?ÄF_>ZY? ±ú¾‰Çƒ?©ãk?s?ö©\?»û>MY?ÚY¼>ci?ëØ_?¿=‚Î>8I?;tŠ?°B�½MÒ>4£Õ>¹·˜>\à²>h6?VZU?�m)?—‘ɽ¢+y¾…7…¾€¸i½«*~>*2¤>ŠÚÇ>d©¿·ûø¾~>ã,V?Xh¾�#Ë>l†?Lg…?Ø:ó>^…? x8è=‰ž=?t�2¾} +¯=6„†¾ Xо_‰±>œ`w¾*©@Bonnx::PRelu_253__broadcastJ€V¶"¿þÇñ>b�w¾[5}>NEo?¡PB>Én½� ¸½È—€>ƱU?K(Ã=ô‰?MN?½­‚?1 ¿Áí}?~‹z?àv?xv_?íÀ®>ÜÑT?+ú'¾°`à>’þo?ô‹;?êîe>„Rm?ð±?GÁY?¢7?ÖÎì¾–¾?°N�>º +Ú½Õ‘Õu¾Èä¾H³¾­#?¾>/A@?ÄëP>ü>·Ï ¾ö'x?u”ˆ>˜%?‚ƒ¤?šdn?ŠÈk>Ãgˆ?^Ö=?§—0?ÚÕQ¾¶Ñ¦>v›?èQ‚¾²x_?6$�=Kµ¿½âÅ…?‚Û =*©@Bonnx::PRelu_254__broadcastJ€ )?ªs¾¾’%Ú¾{¿Í½‘?,µü>pÏk?¬$?²Ê\?Œ\±?ÇÃ6>ít�?ôdÓ>.0�?NÛ¾zps?¾µ]?)Ý…?7Ú ?8ƒñ>à~뾃½P?(©?ïQ“?‘i¢¾70¾Æï‚?Ðm4?f‡D?nö>ßây?\" >é?¢63¾;E?".D>S?r$Í=÷?Dß=?œñ_½wÈ2>z.>-àn?:Üf¾É-¶>ºÍZ?±po?1%?li1?˜k?–™£½Vkß¾¢Îb<µ¦U?oBá>Ö[<<ÞÂÇ=ÊÆ5>ôµ1?fG>*©@Bonnx::PRelu_255__broadcastJ€¼•2?¶b?ñ.ª¾Þy&?ãØ`?ä'÷¾\�?ÓOÉ>Ï d>®c`?ºMs>hQˆ?¸-X?Œ0@?Þ?l<�?Rþh?ô­n?ªÃ¦>©ñ½qk?ª?Õú°=ôú:?è 5¾Î/?£5?&×9?¿jÀ>(|¾´•q?,¬?‡#ÿ¼‹MG>zè4?©×�>Š«{? œv¼�÷&>ï–>jô]?¬{ѼÞóÚ>°7>dqD>&ÏǽÿDu?HÜ;>k h?€Çr?.ƒ?jž7?Òku?.ÕZ?n—Y¾Lc¼‚?Ë>Ù +r?j‹½Å7B? @¸¾¬>Á>ÚžÝ<*©@Bonnx::PRelu_256__broadcastJ€ÚÂ2?ˆ‰¯>š£‹>ƒO ?ò§�?ÙÑF¼¼z?W쪾?³Ì>�5‡?�œÌ>ycƒ?¦²T?6χ?ÌP¥=Z7‚?èák?²vy?ç�‚?¢b0½Ü¬?àÍP>ȧ>�6�?>?F¾´L}½pΕ>ú£?!!?|N?õG*?ôX¥?}¬=€¿+?ª‡?rù?˜#_?F™¾Ø‹ò>þ…²>0)9?‚B ?»¾€>1'?Øœæ>8©?cÄ„?.õá>j³?�ƒ^?ŽE¾#ì¥>gS½:À­Y?ÿG½h+j?î¥á=Ç�=ªæŒ½šÄs>*©@Bonnx::PRelu_257__broadcastJ€:¥S?ÂN ?‰´>;%ˆ‹>gbk?Û˜)>îä…?9ÃÎ<\…±¾PQk?uع<^Ñ‚?)R&?ÐXp? +ÃÞ>Ìs„?šM¾?Nîš?Ñ‚f?âDî>t¢d?žn= Ûí>+ ‘?<ÄB>TxÍ>Ý„Ö>0þ�?n&‡>_O? ZÆ>«?è?n[?³EH?ãb?4\?�Ñ\>SRä=¹š°½Ìž½x>’ž>Iûƒ=•¤¡>Âs?…“y?¾•é><·a?³ÞN?/!A?D?‚o™?”„p? ?º> Û‡>¸�=ˆø=?)™Ÿ»5©N?�|:>‰4®:SðÀ=úšE<*©@Bonnx::PRelu_258__broadcastJ€†�;�è¾ìD >4+_> OŒ?Ñ;?H­p?°Öé¾Eáµ>¨ns?"R=.v?sn¾z +f?I¿¾bør?F"�?VÕT?Vx?H ?“:Œ>úJñ½‘^$?k°‚?÷3Â>Ûšç=#xI?Ol¬?Ö¹Ü>P:?Žy²>æ‡f?Ú}?f%>QžR?b·!?M[l?bv�¾Îr?܇»>Ðu¾þ«¢>-™=Êʇ>XìÛ>¡Íó>¥Œ–?U>ü¼ ¿4Ë£?;ïë>óâa>#ëŒ?¤]? {ž=žI¶>C8$>j‚>•º�½t¿j?â2k>é ?û‚?x‚ ?*©@Bonnx::PRelu_259__broadcastJ€ºûJ> 1¾8©W=MS?,l?�67>Àzi?%ä›= �>O ƒ?ˆ·>€~€?�Æ*?Þ+q?kQA<‘fr?3?h?®}?c‚[?ºˆ•¾¼žF¦½^Y?Œ?Ͼ>Êà4?i‘?Œÿã>ªu¨;‹‰;äŸ�?ªÿó½$R½tjÔ=-þ:?Š47?¯“¾rà‰>0; =õZC?Ÿ >B; ->Ž„@?,h??þÉS?p–e?…K?¬œ6?TL?Æ¡?B?®Ï'?x5??æí¯¾��ê>.'¾»Y?YÚÃ>hÒ(?²¤«=_N¤½åæô>¾Úš>*œ@Bonnx::PRelu_260J€¢>îåM¿¸…3>îÊ7?û‚†?j`‹Ø[�?Ε>4‰Á¾´v0?BÚd?ûL‚?.u? Y{?óºS>¨×«½ÜóÉ=€¼Ê>¦j?$À°>6z=÷£U?¬Ì–?dTb½­=|{¾FÇB?‚¾q?ðåî½Úu…?ÎL÷>Ø¢U?IuV?•ª�=Ò>?öÓ¼†y+?œëÈ>Ë’>ú7>ý T?8¶…?˜ŒY>7o#?p©?Óˆ?‚xʼò�¤?‡B?v•²>ãP>ú舼&|'?TE?‰}u>šQr> ~“>ñIý>ä—ú>*œ@Bonnx::PRelu_261J€VYó>øÜ‚>T^•=Òë§>^9z?‘ª:=Š»€?œ¢ ½dgG>Ð^~?, $>…‰?�I<>lÌϽüÍ>¿Ã#?Ò5?.K„?Q¿Y?=ÈÃ>µ`$>äàN<6>?˜m‡?l?D^A¾ÚÛJ?ƒIÃ>Hüǽùz?¬[²>T¾>R_S?Þ>¤Î`>Æeò="ßv?‡X>J_¾È»�>²Ëh½bBÆ>¡Õ´>ÖGö>*ªM?N×õÙ>  &?ÄZ²>< q?�á4?ez>Ó?5Ü>Jÿ^»¦2?tƒ/½ãã -¾Qºd¾*œ@Bonnx::PRelu_262J€m|¹½Û¹†>_ˆ@?ú» ?‰p›?ت>\á…?HoÛ>-´°>Áp§?ÝòK?Oh?^’]?Ži‘¾~ =0ŒÈ>˜]…?ã¿p?Ãë�?<Œ“½¥Ð¹>^´’>xš?X§]?�++?\w¾²Î£>Öή?æ$Ã>¥pµ=Rli=¹Ó¢>m%ݾ£>Ehð½²"�>óý¾-n­=ÀC>ðT>D#0?Aïû>© E?6÷s¾ÐIm?ï]?æfk?‡Y?­¨=¸Pš?ìeb¾Üø½Nª?W}õ> 8?äˆ ?š ¾Ž^>?S÷Á=Á…¼¾*Â=ëŽ^¾E??ˆÏ,?*œ@Bonnx::PRelu_263J€Ô¦Œ¼œ-x¾l œ>”‹š¾‹ñR?Ç„z=ÌNh?î3E?÷4Ç>Ø’7?Ì£¢>Mc�?(?s� +>Ž„@?,h??þÉS?p–e?…K?¬œ6?TL?Æ¡?B?®Ï'?x5??æí¯¾��ê>.'¾»Y?YÚÃ>hÒ(?²¤«=_N¤½åæô>¾Úš>*©@Bonnx::PRelu_260__broadcastJ€¢>îåM¿¸…3>îÊ7?û‚†?j`‹Ø[�?Ε>4‰Á¾´v0?BÚd?ûL‚?.u? Y{?óºS>¨×«½ÜóÉ=€¼Ê>¦j?$À°>6z=÷£U?¬Ì–?dTb½­=|{¾FÇB?‚¾q?ðåî½Úu…?ÎL÷>Ø¢U?IuV?•ª�=Ò>?öÓ¼†y+?œëÈ>Ë’>ú7>ý T?8¶…?˜ŒY>7o#?p©?Óˆ?‚xʼò�¤?‡B?v•²>ãP>ú舼&|'?TE?‰}u>šQr> ~“>ñIý>ä—ú>*©@Bonnx::PRelu_261__broadcastJ€VYó>øÜ‚>T^•=Òë§>^9z?‘ª:=Š»€?œ¢ ½dgG>Ð^~?, $>…‰?�I<>lÌϽüÍ>¿Ã#?Ò5?.K„?Q¿Y?=ÈÃ>µ`$>äàN<6>?˜m‡?l?D^A¾ÚÛJ?ƒIÃ>Hüǽùz?¬[²>T¾>R_S?Þ>¤Î`>Æeò="ßv?‡X>J_¾È»�>²Ëh½bBÆ>¡Õ´>ÖGö>*ªM?N×õÙ>  &?ÄZ²>< q?�á4?ez>Ó?5Ü>Jÿ^»¦2?tƒ/½ãã +¾Qºd¾*©@Bonnx::PRelu_262__broadcastJ€m|¹½Û¹†>_ˆ@?ú» ?‰p›?ت>\á…?HoÛ>-´°>Áp§?ÝòK?Oh?^’]?Ži‘¾~ =0ŒÈ>˜]…?ã¿p?Ãë�?<Œ“½¥Ð¹>^´’>xš?X§]?�++?\w¾²Î£>Öή?æ$Ã>¥pµ=Rli=¹Ó¢>m%ݾ£>Ehð½²"�>óý¾-n­=ÀC>ðT>D#0?Aïû>© E?6÷s¾ÐIm?ï]?æfk?‡Y?­¨=¸Pš?ìeb¾Üø½Nª?W}õ> 8?äˆ ?š ¾Ž^>?S÷Á=Á…¼¾*Â=ëŽ^¾E??ˆÏ,?*©@Bonnx::PRelu_263__broadcastJ€Ô¦Œ¼œ-x¾l œ>”‹š¾‹ñR?Ç„z=ÌNh?î3E?÷4Ç>Ø’7?Ì£¢>Mc�?(?s� ? ry?ü¾¼L+?0…‚?°¼š>æ‹©¾gG?û:…¾"ÆÅ>ð-�?ÜÚ0½GÞ”¾ üA?úŠ‹?  -?d@‹>Æ»Z¾†dN?ô„º>89Ü>Ûâ?9µÛ>Z ;¾¸`ë<¦^>TØ=à?ßY·>üid?FÍ{¾:ìd? ­g?($=?0T¾tÊ¿½u?Ì5]<,\)?Ü‚?¤šd?ãÃ7?M\>”j¾98â>Õ‹>Ðþ-¿‚—^?Ô·3>€n^>Rt™>*œ@Bonnx::PRelu_264J€&že¾öÉù½b¨›>ØØ?ƒ?^@ý>ÖhN?d¸?h�>kŒ?R„§¾Ð§?ø€Ÿ¾Mê>S�S?3Iˆ>Òy? }?ùœ?D_?ž2?©Üp<?Ò=ôµV?ø0ý>Z¥Ð¾Çîµ>Z2?îká>îK9>6??£}:?ðåo$F¾èp?¿5¿¾ï0½n`Ä>c,[?³BI?†x¼½Ão?Úf.?+aŸ>:â.>R’U?,Îv?zÙñ;…?ìÜN?ø×`? u ?µM¼>@ +?d@‹>Æ»Z¾†dN?ô„º>89Ü>Ûâ?9µÛ>Z ;¾¸`ë<¦^>TØ=à?ßY·>üid?FÍ{¾:ìd? ­g?($=?0T¾tÊ¿½u?Ì5]<,\)?Ü‚?¤šd?ãÃ7?M\>”j¾98â>Õ‹>Ðþ-¿‚—^?Ô·3>€n^>Rt™>*©@Bonnx::PRelu_264__broadcastJ€&že¾öÉù½b¨›>ØØ?ƒ?^@ý>ÖhN?d¸?h�>kŒ?R„§¾Ð§?ø€Ÿ¾Mê>S�S?3Iˆ>Òy? }?ùœ?D_?ž2?©Üp<?Ò=ôµV?ø0ý>Z¥Ð¾Çîµ>Z2?îká>îK9>6??£}:?ðåo$F¾èp?¿5¿¾ï0½n`Ä>c,[?³BI?†x¼½Ão?Úf.?+aŸ>:â.>R’U?,Îv?zÙñ;…?ìÜN?ø×`? u ?µM¼>@ ¼¾ -�À=ä9¹¾±H<=ÝÍ’>rŒð>ˆ-N?ÎÉ=*œ@Bonnx::PRelu_265J€î¢ò¾vã?i¤ ?‡˜H?>d}?XB‰>lM³¾±ß?Ìζ>ä^y?¢ùH??Є?7ðÖ¼IѨ>gh?ÖJ²>—ÞL?ºÚ~?·®0?ÁŸ>ª.?x0?:zÎ=Lyu?¤i*?~ˆ¾ÖÚ-?f»q?p™¿½ÅÉ?2Y“>ÙÔ‚?1ÃÊ>Ê.>jø¤½Ü?b¸Ì¾+½œa1?³ƒU¼Ìcv>F‚>3ÓB?§?0ľ( -½ÌÓ¾V/¿¾ð>cwƒ?ì–i½F“?V�¯?†tk?ÐÖ>iM*?<ç=Kr;¾yi*>ù';?èTÝ>úÑ>17a?ü1?*œ@Bonnx::PRelu_266J€î�·¾FWî>F5<ù?Zz?¼£f?Š<’¿8ÛÄ=ÌÖ½<‡|?œJæ=…?~Pj>ò½³G?d??¶.? �_?U�?ßZJ½ÎÇS?cy¾~¬?6`Ö=0+®>æ¬ð¾>˜¾ÔK‚?¶u4¿‰m¿>ú�¾¬Ó~?Cày¾Ì´u>NÉ�¾Eÿ?ˆ´g>lI=HvÁ=|›^?¹‘Ð>!¼?§|)?ö ?t16?*[¾Hü«=ƾ×£¾Rùi?¬5¿rØ\?\·k?Ȥ†?ŠcÔ½n>™½mòÀ>Úð;?_€c?¶'¢¾ÚØOªQ?K%â>fø ?æe?Öëk?¸­Î¿À^$>Öy¾žÿe?=½M?½y‚?¾¥¾2b ¿xÓ ?ºÚZ?^°>¢gv?¼¤R?N׿ú&X¾fw;?�ÅÐ>ÛD?‹‚à>»Ê?F ¾ø?0W¾RXë¾»8’>9é€?ίã>Îû6?ž…Þ>c÷˜>|ù½¼ ? Ï’¾€ü§>'#”½N¥>l>(T=«d½‹Ó²<´v?†#¥¾ã>2 †?fŽ{>È!?=s‚?ↇ?Ë#)¿Ô -³¾î4d¾T|à>$>?Âðm¾ ^¯>•g>ªXt>©ÑÞ>*œ@Bonnx::PRelu_268J€¸;o>~Ü?ÿŠÿ½œ¿ö>¤5r?X[?†$¿î]à>‡‚¿ÿ?,™Ý>ºL{?�=!¾Ûb>šìú>ðóD?a$?Ð.M?Øí‰?2¾í<—SÓ>S,>X>.@?Ÿù?ko8?pÚN¾)ß?³¿kda~?©D¾6wi?äÌp¾7ÿ™>Ô%–¾sx ?Zíì==±ÿ>ŒÜ«=ÞHB=/1…¾W \?¦Oœ¾25%¾"í&?Ö7Ñ=,Ç>¦¡s?e€y¾—F?âg?�‘~?í~?ñ>5?bñð¾¿nh?f)!<,’ ?` -,>…Ò¾&a”¾}æ>*œ@Bonnx::PRelu_269J€Ô5½òj?û#L>KHq½<·x?*/ý>’Ý¿^¿M>Â<ß½ ˆh?^­™>B„?ð9:¾ƒ;¹¾…ã†>&Áͽຟ>Èei? j7?Ýо)<¦¾>ÑC?”í> íI?ëwA>V[ ¾üµ¯=²¸?.‘ª>}ì¿—‡>Õ+}?2a¿>êŠ?Žù>UÆ>ݱ'>–=ˆ¾6U>­ù?µK>üFå¾Ï/×>Öó‡>äc½<{FF¾>@?X€=¹×Î>ŒÆˆ?@¥?Æ’¤>Ì�?h?p^)¾›„…>Ø»¾…ê>h] ?¶Ý?ðÆ>ž„#¼÷Ë?®F]½*œ@Bonnx::PRelu_270J€<–½*Ü?¾ÂP?Fr2?®´„?SϾ¼ñÛ½úø>@šÃ¾p”?yœ½>Êe¿ÈüÄ;ÁB¾ã�-?ëÉ•>šÁá½ßØn?BÈÇ?üªÐ>û¶¡=ò瓾Ð%¦=Ì6$?ð‹€»úY羂£¾+‹’?¸æ¾]äA?*k^½˜;‘?gYò>x//?¸¶ >.Åš>´é> Ø¿>òFq?dL>ø1Ú¾ë*Ͼ’[í¾Z°Ô>†¢ä>™áÍ>eyÔ½¾}ϾFb\¾�+�?¤F‘=Gˆ½Ž­‡?X�?Gé?²0ã> $?2é >‡9£½^SŒ¾6¸>7«?vS¼êb0¾*œ@Bonnx::PRelu_271J€Ç"e? ‡|?> ý=[†?ÿ|?|ò¿ú?×é4?®Q>Š\x?팽@H|?ì¯>fŸ¶¼bÔÿ=š®>’¨1¾gt?§UH?AŠ”=ió>Ç´"?E葾j™M>a»R¿�¶Œ¾ŠU +�À=ä9¹¾±H<=ÝÍ’>rŒð>ˆ-N?ÎÉ=*©@Bonnx::PRelu_265__broadcastJ€î¢ò¾vã?i¤ ?‡˜H?>d}?XB‰>lM³¾±ß?Ìζ>ä^y?¢ùH??Є?7ðÖ¼IѨ>gh?ÖJ²>—ÞL?ºÚ~?·®0?ÁŸ>ª.?x0?:zÎ=Lyu?¤i*?~ˆ¾ÖÚ-?f»q?p™¿½ÅÉ?2Y“>ÙÔ‚?1ÃÊ>Ê.>jø¤½Ü?b¸Ì¾+½œa1?³ƒU¼Ìcv>F‚>3ÓB?§?0ľ( -½ÌÓ¾V/¿¾ð>cwƒ?ì–i½F“?V�¯?†tk?ÐÖ>iM*?<ç=Kr;¾yi*>ù';?èTÝ>úÑ>17a?ü1?*©@Bonnx::PRelu_266__broadcastJ€î�·¾FWî>F5<ù?Zz?¼£f?Š<’¿8ÛÄ=ÌÖ½<‡|?œJæ=…?~Pj>ò½³G?d??¶.? �_?U�?ßZJ½ÎÇS?cy¾~¬?6`Ö=0+®>æ¬ð¾>˜¾ÔK‚?¶u4¿‰m¿>ú�¾¬Ó~?Cày¾Ì´u>NÉ�¾Eÿ?ˆ´g>lI=HvÁ=|›^?¹‘Ð>!¼?§|)?ö ?t16?*[¾Hü«=ƾ×£¾Rùi?¬5¿rØ\?\·k?Ȥ†?ŠcÔ½n>™½mòÀ>Úð;?_€c?¶'¢¾ÚØOªQ?K%â>fø ?æe?Öëk?¸­Î¿À^$>Öy¾žÿe?=½M?½y‚?¾¥¾2b ¿xÓ ?ºÚZ?^°>¢gv?¼¤R?N׿ú&X¾fw;?�ÅÐ>ÛD?‹‚à>»Ê?F ¾ø?0W¾RXë¾»8’>9é€?ίã>Îû6?ž…Þ>c÷˜>|ù½¼ ? Ï’¾€ü§>'#”½N¥>l>(T=«d½‹Ó²<´v?†#¥¾ã>2 †?fŽ{>È!?=s‚?ↇ?Ë#)¿Ô +³¾î4d¾T|à>$>?Âðm¾ ^¯>•g>ªXt>©ÑÞ>*©@Bonnx::PRelu_268__broadcastJ€¸;o>~Ü?ÿŠÿ½œ¿ö>¤5r?X[?†$¿î]à>‡‚¿ÿ?,™Ý>ºL{?�=!¾Ûb>šìú>ðóD?a$?Ð.M?Øí‰?2¾í<—SÓ>S,>X>.@?Ÿù?ko8?pÚN¾)ß?³¿kda~?©D¾6wi?äÌp¾7ÿ™>Ô%–¾sx ?Zíì==±ÿ>ŒÜ«=ÞHB=/1…¾W \?¦Oœ¾25%¾"í&?Ö7Ñ=,Ç>¦¡s?e€y¾—F?âg?�‘~?í~?ñ>5?bñð¾¿nh?f)!<,’ ?` +,>…Ò¾&a”¾}æ>*©@Bonnx::PRelu_269__broadcastJ€Ô5½òj?û#L>KHq½<·x?*/ý>’Ý¿^¿M>Â<ß½ ˆh?^­™>B„?ð9:¾ƒ;¹¾…ã†>&Áͽຟ>Èei? j7?Ýо)<¦¾>ÑC?”í> íI?ëwA>V[ ¾üµ¯=²¸?.‘ª>}ì¿—‡>Õ+}?2a¿>êŠ?Žù>UÆ>ݱ'>–=ˆ¾6U>­ù?µK>üFå¾Ï/×>Öó‡>äc½<{FF¾>@?X€=¹×Î>ŒÆˆ?@¥?Æ’¤>Ì�?h?p^)¾›„…>Ø»¾…ê>h] ?¶Ý?ðÆ>ž„#¼÷Ë?®F]½*©@Bonnx::PRelu_270__broadcastJ€<–½*Ü?¾ÂP?Fr2?®´„?SϾ¼ñÛ½úø>@šÃ¾p”?yœ½>Êe¿ÈüÄ;ÁB¾ã�-?ëÉ•>šÁá½ßØn?BÈÇ?üªÐ>û¶¡=ò瓾Ð%¦=Ì6$?ð‹€»úY羂£¾+‹’?¸æ¾]äA?*k^½˜;‘?gYò>x//?¸¶ >.Åš>´é> Ø¿>òFq?dL>ø1Ú¾ë*Ͼ’[í¾Z°Ô>†¢ä>™áÍ>eyÔ½¾}ϾFb\¾�+�?¤F‘=Gˆ½Ž­‡?X�?Gé?²0ã> $?2é >‡9£½^SŒ¾6¸>7«?vS¼êb0¾*©@Bonnx::PRelu_271__broadcastJ€Ç"e? ‡|?> ý=[†?ÿ|?|ò¿ú?×é4?®Q>Š\x?팽@H|?ì¯>fŸ¶¼bÔÿ=š®>’¨1¾gt?§UH?AŠ”=ió>Ç´"?E葾j™M>a»R¿�¶Œ¾ŠU ¿c€?Oþ@>ÊŽ(X?ðL„?§ØÌ>¦>š>#`ž¾“6 -=°eá½J‰³>;?™R=û„½NLÉ<:<ï>“*ܽ™¿Ö¾RKþ¾0‹¾¿tD?•‘—>cƒ?aõ¯¾Bоcüw?�z?? "?IÓ;¾�½>€Û¥=¨ü8=?<ù¿•O¾>¶<ªŒ¼*œ@Bonnx::PRelu_272J€ØxÑ>ôa?Ä´$?ˆ(1>^Vq?„= +=°eá½J‰³>;?™R=û„½NLÉ<:<ï>“*ܽ™¿Ö¾RKþ¾0‹¾¿tD?•‘—>cƒ?aõ¯¾Bоcüw?�z?? "?IÓ;¾�½>€Û¥=¨ü8=?<ù¿•O¾>¶<ªŒ¼*©@Bonnx::PRelu_272__broadcastJ€ØxÑ>ôa?Ä´$?ˆ(1>^Vq?„= =v&ß<*W¢>~Ü›>Ð~?@ie¾zNV?Ìžæ=�”>D`v¾»As?0×> ¥�>L©w?ú°¼§š=P*0>?âê>îÓ?¾XndºŠj_=G�~?Ö„Å>¾uL>±O×»¢È„?£tÀ<ã?dVì>ñ¿:¿®+—>¼¿="¼;>¨¨Ä¾&àÍ>]w:•œ>sOD;è6n¾œ¸v=“ô?š—¾Ò=8>-Ä}?FqÄ=•‡2>CŠz?¬ €?ʵ½¾“"¿"ºò=vt=ð·ê½ -V¾LøF>YÒ#?*œ@Bonnx::PRelu_273J€ÉÚ&?J«y?ë�>½¾KÈ=–ðè>5t=¤ÿ,=b?z½—m?ŸÜ¯½ÈFÏ;CùÃ=ÈH�<��Y=æx– ?ãä>„|¼žÑ=>#€5>DŽm?g_ܼJ­E>Ä¢+Ö{?‚áŸ> ;ã>AÔa?.Ì…=HDg?’[l=¢µ?vy�?¹}?U(†>DÆ >ä#’½]•‡=ðß¾–Í‘>\[¸=™e†>~$?Žûx?7w¨<Ú•á>�ûs?ÞJN?ME>Š1̼»Ï†?»ª¨:f²S>x�=Ò˜ >´ŸØ>ígK?3¶¾*œ@Bonnx::PRelu_274J€öWL>gŽº‹z?¢Úã>7?Æ:Gã3>Ç <>lq<ö´G?"é>×`>dû&>õ>?Æã >ž'|?ˆj9?Au?Ʀz<'N¾>`4/>p“?Xkq?)&=Q ĹŔ«>¤‘>oq:?°Õ•»nl{?:jr?-»€?ê›y?#|?½ç>§Ñ?G0Í=•ïi>@‘~?¡÷G?àQu?È~?ñÎ?HJt?Þb>UD—>ò ->ZÜ€?}Å>áÜ}?μ%=ðëê>™‘B>ŽùU>µˆ?þL?\Ã4=&–y?x1½<-žl>iöÌ="‹ >œv‘=çñ’>iÌž=Z* +V¾LøF>YÒ#?*©@Bonnx::PRelu_273__broadcastJ€ÉÚ&?J«y?ë�>½¾KÈ=–ðè>5t=¤ÿ,=b?z½—m?ŸÜ¯½ÈFÏ;CùÃ=ÈH�<��Y=æx– ?ãä>„|¼žÑ=>#€5>DŽm?g_ܼJ­E>Ä¢+Ö{?‚áŸ> ;ã>AÔa?.Ì…=HDg?’[l=¢µ?vy�?¹}?U(†>DÆ >ä#’½]•‡=ðß¾–Í‘>\[¸=™e†>~$?Žûx?7w¨<Ú•á>�ûs?ÞJN?ME>Š1̼»Ï†?»ª¨:f²S>x�=Ò˜ >´ŸØ>ígK?3¶¾*©@Bonnx::PRelu_274__broadcastJ€öWL>gŽº‹z?¢Úã>7?Æ:Gã3>Ç <>lq<ö´G?"é>×`>dû&>õ>?Æã >ž'|?ˆj9?Au?Ʀz<'N¾>`4/>p“?Xkq?)&=Q ĹŔ«>¤‘>oq:?°Õ•»nl{?:jr?-»€?ê›y?#|?½ç>§Ñ?G0Í=•ïi>@‘~?¡÷G?àQu?È~?ñÎ?HJt?Þb>UD—>ò ->ZÜ€?}Å>áÜ}?μ%=ðëê>™‘B>ŽùU>µˆ?þL?\Ã4=&–y?x1½<-žl>iöÌ="‹ >œv‘=çñ’>iÌž=Z* input!   diff --git a/docker/frontend/scripts/realesr-gpu.py b/docker/frontend/scripts/realesr-gpu.py new file mode 100644 index 0000000..b5c9f25 --- /dev/null +++ b/docker/frontend/scripts/realesr-gpu.py @@ -0,0 +1,73 @@ +# The WebGPU execution provider has no PReLU kernel. The upscaler is 34 convolutions +# with a PReLU after every one of them, so the runtime splits the graph 33 times: +# each activation travels off the GPU to the processor and the result travels back, +# a 64-channel map in both directions, per tile. A machine with a good graphics chip +# was therefore not exporting any faster for having it. +# +# Relu, Neg, Mul and Sub it does have, and +# PRelu(x) = Relu(x) - slope * Relu(-x) +# holds exactly, negative slopes included, so this rewrites the activations into +# those four and leaves the weights untouched. +# +# python3 realesr-gpu.py .onnx public/models/realesr-general-x4v3.onnx +# +# The source is the x4v3 model of https://github.com/xinntao/Real-ESRGAN +# (realesr-general-x4v3.pth, converted to ONNX at opset 17). +import sys + +import numpy as np +import onnx +from onnx import TensorProto, helper, numpy_helper + + +def rewrite(src, dst): + model = onnx.load(src) + graph = model.graph + rank = len(graph.input[0].type.tensor_type.shape.dim) + by_name = {i.name: i for i in graph.initializer} + + nodes, made = [], 0 + for node in graph.node: + if node.op_type != "PRelu": + nodes.append(node) + continue + x, slope = node.input + # The slope comes out of PyTorch as (C,1,1) and has to line up with a + # (1,C,H,W) activation, so give it the batch axis it is missing. + s = numpy_helper.to_array(by_name[slope]) + if s.shape != (1,) + tuple(s.shape): + s = s.reshape((1,) + tuple(s.shape)) + name = f"{slope}__broadcast" + if name not in by_name: + graph.initializer.append(numpy_helper.from_array(s, name)) + by_name[name] = graph.initializer[-1] + slope = name + + p, n, q, scaled = f"{node.output[0]}.pos", f"{node.output[0]}.neg", f"{node.output[0]}.relu", f"{node.output[0]}.scaled" + nodes += [ + helper.make_node("Relu", [x], [p], name=p), + helper.make_node("Neg", [x], [n], name=n), + helper.make_node("Relu", [n], [q], name=q), + helper.make_node("Mul", [q, slope], [scaled], name=scaled), + helper.make_node("Sub", [p, scaled], [node.output[0]], name=node.name), + ] + made += 1 + + del graph.node[:] + graph.node.extend(nodes) + # The slopes the PReLU nodes used to read are now unreachable, and the runtime + # warns about every one of them while it loads unless they go. + used = {name for node in graph.node for name in node.input} + kept = [i for i in graph.initializer if i.name in used] + print(f"dropping {len(graph.initializer) - len(kept)} unused initializers") + del graph.initializer[:] + graph.initializer.extend(kept) + onnx.checker.check_model(model) + onnx.save(model, dst) + print(f"rewrote {made} PReLU nodes -> {dst}") + assert made, "no PReLU node found: wrong model?" + assert rank >= 2 + + +if __name__ == "__main__": + rewrite(sys.argv[1], sys.argv[2]) diff --git a/docker/frontend/src/engine/superRes.ts b/docker/frontend/src/engine/superRes.ts index 2652241..7fe2634 100644 --- a/docker/frontend/src/engine/superRes.ts +++ b/docker/frontend/src/engine/superRes.ts @@ -9,6 +9,11 @@ import type * as Ort from 'onnxruntime-web'; // Both the runtime (served next to canvaskit.wasm, see scripts/copy-wasm.mjs) // and the model (public/models) are static files; nothing here changes what the // server can do. +// +// The model is not the file as published: its 33 PReLU activations are written +// out as Relu/Neg/Mul/Sub, because the WebGPU provider has no PReLU kernel and +// would otherwise hand every activation to the processor and take it back, 33 +// times per tile. scripts/realesr-gpu.py is that rewrite and explains it. const MODEL_URL = '/models/realesr-general-x4v3.onnx'; // The wasm dir, not the file: the runtime picks its own name inside it. @@ -54,6 +59,10 @@ function load(): Promise { // A laptop with two GPUs would otherwise hand this to the one built into // the processor. The model is the export, so ask for the fast one. ort.env.webgpu.powerPreference = 'high-performance'; + // env.logLevel looks like a switch for the runtime's own warnings and is not + // one — it is read when the module initialises, before this runs, so a level + // set here silences nothing. Left alone, they are worth reading: the last one + // to appear said the graph was being split between the chip and the processor. const session = await ort.InferenceSession.create(MODEL_URL, { executionProviders: ['webgpu'] }).catch(() => ort.InferenceSession.create(MODEL_URL, { executionProviders: ['wasm'] }) );