Browse Source

[deploy][python] onnx动态图模型转换为静态图模型脚本

yanxin 2 years ago
parent
commit
5cba03d95e

+ 2 - 0
.gitignore

@@ -17,3 +17,5 @@ Recursive-CNNs/.idea/modules.xml
 Recursive-CNNs/.idea/Recursive-CNNs.iml
 Recursive-CNNs/.idea/vcs.xml
 Recursive-CNNs/.idea/inspectionProfiles/profiles_settings.xml
+*.pyc
+Recursive-CNNs/dataset

BIN
deploy/C++/models/corner_infer_model/inference_model.pdiparams


BIN
deploy/C++/models/corner_infer_model/inference_model.pdiparams.info


BIN
deploy/C++/models/corner_infer_model/inference_model.pdmodel


BIN
deploy/C++/models/document_infer_model/inference_model.pdiparams


BIN
deploy/C++/models/document_infer_model/inference_model.pdiparams.info


BIN
deploy/C++/models/document_infer_model/inference_model.pdmodel


BIN
deploy/C++/models/imageclear_infer_model/inference_model.pdiparams


BIN
deploy/C++/models/imageclear_infer_model/inference_model.pdiparams.info


BIN
deploy/C++/models/imageclear_infer_model/inference_model.pdmodel


+ 133 - 0
deploy/python/cornerONNXModel_to_static.py

@@ -0,0 +1,133 @@
+from paddle.static import InputSpec
+import paddle
+
+class Corner(paddle.nn.Layer):
+    def __init__(self):
+        super(Corner, self).__init__()
+        self.x2paddle_fc_weight = self.create_parameter(shape=[2, 64], attr='x2paddle_fc_weight', dtype='float32', default_initializer=paddle.nn.initializer.Constant(value=0.0))
+        self.x2paddle_fc_bias = self.create_parameter(shape=[2], attr='x2paddle_fc_bias', dtype='float32', default_initializer=paddle.nn.initializer.Constant(value=0.0))
+        self.conv0 = paddle.nn.Conv2D(in_channels=3, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu0 = paddle.nn.ReLU()
+        self.conv1 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu1 = paddle.nn.ReLU()
+        self.conv2 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu2 = paddle.nn.ReLU()
+        self.conv3 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu3 = paddle.nn.ReLU()
+        self.conv4 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu4 = paddle.nn.ReLU()
+        self.conv5 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu5 = paddle.nn.ReLU()
+        self.conv6 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu6 = paddle.nn.ReLU()
+        self.conv7 = paddle.nn.Conv2D(in_channels=16, out_channels=32, kernel_size=[3, 3], stride=2, padding=1)
+        self.pad0 = paddle.nn.Pad2D(mode='constant', padding=[0, 0, 0, 0, 0, 0, 0, 0])
+        self.relu7 = paddle.nn.ReLU()
+        self.pool0 = paddle.nn.AvgPool2D(kernel_size=[1, 1], stride=2)
+        self.conv8 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu8 = paddle.nn.ReLU()
+        self.conv9 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu9 = paddle.nn.ReLU()
+        self.conv10 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu10 = paddle.nn.ReLU()
+        self.conv11 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu11 = paddle.nn.ReLU()
+        self.conv12 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu12 = paddle.nn.ReLU()
+        self.conv13 = paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=[3, 3], stride=2, padding=1)
+        self.pad1 = paddle.nn.Pad2D(mode='constant', padding=[0, 0, 0, 0, 0, 0, 0, 0])
+        self.relu13 = paddle.nn.ReLU()
+        self.pool1 = paddle.nn.AvgPool2D(kernel_size=[1, 1], stride=2)
+        self.conv14 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu14 = paddle.nn.ReLU()
+        self.conv15 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu15 = paddle.nn.ReLU()
+        self.conv16 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu16 = paddle.nn.ReLU()
+        self.conv17 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu17 = paddle.nn.ReLU()
+        self.conv18 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu18 = paddle.nn.ReLU()
+        self.pad2 = paddle.nn.Pad2D(mode='constant', padding=[0, 0, 0, 0, 0, 0, 0, 0])
+        self.pool2 = paddle.nn.AvgPool2D(kernel_size=[8, 8], stride=8)
+
+    def forward(self, x2paddle_input):
+        x2paddle_fc_weight = self.x2paddle_fc_weight
+        x2paddle_fc_bias = self.x2paddle_fc_bias
+        x2paddle_150 = paddle.full(dtype='float32', shape=[1], fill_value=0.0)
+        x2paddle_176 = paddle.full(dtype='float32', shape=[1], fill_value=0.0)
+        x2paddle_204 = self.conv0(x2paddle_input)
+        x2paddle_121 = self.relu0(x2paddle_204)
+        x2paddle_207 = self.conv1(x2paddle_121)
+        x2paddle_124 = self.relu1(x2paddle_207)
+        x2paddle_210 = self.conv2(x2paddle_124)
+        x2paddle_127 = paddle.add(x=x2paddle_121, y=x2paddle_210)
+        x2paddle_128 = self.relu2(x2paddle_127)
+        x2paddle_213 = self.conv3(x2paddle_128)
+        x2paddle_131 = self.relu3(x2paddle_213)
+        x2paddle_216 = self.conv4(x2paddle_131)
+        x2paddle_134 = paddle.add(x=x2paddle_128, y=x2paddle_216)
+        x2paddle_135 = self.relu4(x2paddle_134)
+        x2paddle_219 = self.conv5(x2paddle_135)
+        x2paddle_138 = self.relu5(x2paddle_219)
+        x2paddle_222 = self.conv6(x2paddle_138)
+        x2paddle_141 = paddle.add(x=x2paddle_135, y=x2paddle_222)
+        x2paddle_142 = self.relu6(x2paddle_141)
+        x2paddle_225 = self.conv7(x2paddle_142)
+        x2paddle_148 = self.pad0(x2paddle_142)
+        x2paddle_145 = self.relu7(x2paddle_225)
+        x2paddle_149 = self.pool0(x2paddle_148)
+        x2paddle_228 = self.conv8(x2paddle_145)
+        x2paddle_151 = paddle.multiply(x=x2paddle_149, y=x2paddle_150)
+        x2paddle_152 = paddle.concat(x=[x2paddle_149, x2paddle_151], axis=1)
+        x2paddle_153 = paddle.add(x=x2paddle_152, y=x2paddle_228)
+        x2paddle_154 = self.relu8(x2paddle_153)
+        x2paddle_231 = self.conv9(x2paddle_154)
+        x2paddle_157 = self.relu9(x2paddle_231)
+        x2paddle_234 = self.conv10(x2paddle_157)
+        x2paddle_160 = paddle.add(x=x2paddle_154, y=x2paddle_234)
+        x2paddle_161 = self.relu10(x2paddle_160)
+        x2paddle_237 = self.conv11(x2paddle_161)
+        x2paddle_164 = self.relu11(x2paddle_237)
+        x2paddle_240 = self.conv12(x2paddle_164)
+        x2paddle_167 = paddle.add(x=x2paddle_161, y=x2paddle_240)
+        x2paddle_168 = self.relu12(x2paddle_167)
+        x2paddle_243 = self.conv13(x2paddle_168)
+        x2paddle_174 = self.pad1(x2paddle_168)
+        x2paddle_171 = self.relu13(x2paddle_243)
+        x2paddle_175 = self.pool1(x2paddle_174)
+        x2paddle_246 = self.conv14(x2paddle_171)
+        x2paddle_177 = paddle.multiply(x=x2paddle_175, y=x2paddle_176)
+        x2paddle_178 = paddle.concat(x=[x2paddle_175, x2paddle_177], axis=1)
+        x2paddle_179 = paddle.add(x=x2paddle_178, y=x2paddle_246)
+        x2paddle_180 = self.relu14(x2paddle_179)
+        x2paddle_249 = self.conv15(x2paddle_180)
+        x2paddle_183 = self.relu15(x2paddle_249)
+        x2paddle_252 = self.conv16(x2paddle_183)
+        x2paddle_186 = paddle.add(x=x2paddle_180, y=x2paddle_252)
+        x2paddle_187 = self.relu16(x2paddle_186)
+        x2paddle_255 = self.conv17(x2paddle_187)
+        x2paddle_190 = self.relu17(x2paddle_255)
+        x2paddle_258 = self.conv18(x2paddle_190)
+        x2paddle_193 = paddle.add(x=x2paddle_187, y=x2paddle_258)
+        x2paddle_194 = self.relu18(x2paddle_193)
+        x2paddle_195 = self.pad2(x2paddle_194)
+        x2paddle_196 = self.pool2(x2paddle_195)
+        x2paddle_202 = paddle.reshape(x=x2paddle_196, shape=[1, -1])
+        x2paddle_output_mm = paddle.matmul(x=x2paddle_202, y=x2paddle_fc_weight, transpose_y=True)
+        x2paddle_output_mm = paddle.scale(x=x2paddle_output_mm)
+        x2paddle_output = paddle.add(x=x2paddle_output_mm, y=x2paddle_fc_bias)
+        return x2paddle_output
+
+      
+paddle.disable_static()
+params = paddle.load(r'doc_scan/doc_refine_pd_model/model.pdparams')
+model = Corner()
+model.set_dict(params, use_structured_name=True)
+input_spec = InputSpec([1, 3, 32, 32], 'float32', 'x')
+model.eval()
+paddle.jit.save(
+    layer=model,
+    path='corner_infer_model/inference_model',
+    input_spec=[input_spec])
+print('corner inference model saved in ./corner_infer_model')

+ 132 - 0
deploy/python/documentONNXModel_to_static.py

@@ -0,0 +1,132 @@
+from paddle.static import InputSpec
+import paddle
+
+class Document(paddle.nn.Layer):
+    def __init__(self):
+        super(Document, self).__init__()
+        self.x2paddle_fc_weight = self.create_parameter(shape=[8, 64], attr='x2paddle_fc_weight', dtype='float32', default_initializer=paddle.nn.initializer.Constant(value=0.0))
+        self.x2paddle_fc_bias = self.create_parameter(shape=[8], attr='x2paddle_fc_bias', dtype='float32', default_initializer=paddle.nn.initializer.Constant(value=0.0))
+        self.conv0 = paddle.nn.Conv2D(in_channels=3, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu0 = paddle.nn.ReLU()
+        self.conv1 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu1 = paddle.nn.ReLU()
+        self.conv2 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu2 = paddle.nn.ReLU()
+        self.conv3 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu3 = paddle.nn.ReLU()
+        self.conv4 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu4 = paddle.nn.ReLU()
+        self.conv5 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu5 = paddle.nn.ReLU()
+        self.conv6 = paddle.nn.Conv2D(in_channels=16, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.relu6 = paddle.nn.ReLU()
+        self.conv7 = paddle.nn.Conv2D(in_channels=16, out_channels=32, kernel_size=[3, 3], stride=2, padding=1)
+        self.pad0 = paddle.nn.Pad2D(mode='constant', padding=[0, 0, 0, 0, 0, 0, 0, 0])
+        self.relu7 = paddle.nn.ReLU()
+        self.pool0 = paddle.nn.AvgPool2D(kernel_size=[1, 1], stride=2)
+        self.conv8 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu8 = paddle.nn.ReLU()
+        self.conv9 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu9 = paddle.nn.ReLU()
+        self.conv10 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu10 = paddle.nn.ReLU()
+        self.conv11 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu11 = paddle.nn.ReLU()
+        self.conv12 = paddle.nn.Conv2D(in_channels=32, out_channels=32, kernel_size=[3, 3], padding=1)
+        self.relu12 = paddle.nn.ReLU()
+        self.conv13 = paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=[3, 3], stride=2, padding=1)
+        self.pad1 = paddle.nn.Pad2D(mode='constant', padding=[0, 0, 0, 0, 0, 0, 0, 0])
+        self.relu13 = paddle.nn.ReLU()
+        self.pool1 = paddle.nn.AvgPool2D(kernel_size=[1, 1], stride=2)
+        self.conv14 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu14 = paddle.nn.ReLU()
+        self.conv15 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu15 = paddle.nn.ReLU()
+        self.conv16 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu16 = paddle.nn.ReLU()
+        self.conv17 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu17 = paddle.nn.ReLU()
+        self.conv18 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.relu18 = paddle.nn.ReLU()
+        self.pad2 = paddle.nn.Pad2D(mode='constant', padding=[0, 0, 0, 0, 0, 0, 0, 0])
+        self.pool2 = paddle.nn.AvgPool2D(kernel_size=[8, 8], stride=8)
+
+    def forward(self, x2paddle_input):
+        x2paddle_fc_weight = self.x2paddle_fc_weight
+        x2paddle_fc_bias = self.x2paddle_fc_bias
+        x2paddle_150 = paddle.full(dtype='float32', shape=[1], fill_value=0.0)
+        x2paddle_176 = paddle.full(dtype='float32', shape=[1], fill_value=0.0)
+        x2paddle_204 = self.conv0(x2paddle_input)
+        x2paddle_121 = self.relu0(x2paddle_204)
+        x2paddle_207 = self.conv1(x2paddle_121)
+        x2paddle_124 = self.relu1(x2paddle_207)
+        x2paddle_210 = self.conv2(x2paddle_124)
+        x2paddle_127 = paddle.add(x=x2paddle_121, y=x2paddle_210)
+        x2paddle_128 = self.relu2(x2paddle_127)
+        x2paddle_213 = self.conv3(x2paddle_128)
+        x2paddle_131 = self.relu3(x2paddle_213)
+        x2paddle_216 = self.conv4(x2paddle_131)
+        x2paddle_134 = paddle.add(x=x2paddle_128, y=x2paddle_216)
+        x2paddle_135 = self.relu4(x2paddle_134)
+        x2paddle_219 = self.conv5(x2paddle_135)
+        x2paddle_138 = self.relu5(x2paddle_219)
+        x2paddle_222 = self.conv6(x2paddle_138)
+        x2paddle_141 = paddle.add(x=x2paddle_135, y=x2paddle_222)
+        x2paddle_142 = self.relu6(x2paddle_141)
+        x2paddle_225 = self.conv7(x2paddle_142)
+        x2paddle_148 = self.pad0(x2paddle_142)
+        x2paddle_145 = self.relu7(x2paddle_225)
+        x2paddle_149 = self.pool0(x2paddle_148)
+        x2paddle_228 = self.conv8(x2paddle_145)
+        x2paddle_151 = paddle.multiply(x=x2paddle_149, y=x2paddle_150)
+        x2paddle_152 = paddle.concat(x=[x2paddle_149, x2paddle_151], axis=1)
+        x2paddle_153 = paddle.add(x=x2paddle_152, y=x2paddle_228)
+        x2paddle_154 = self.relu8(x2paddle_153)
+        x2paddle_231 = self.conv9(x2paddle_154)
+        x2paddle_157 = self.relu9(x2paddle_231)
+        x2paddle_234 = self.conv10(x2paddle_157)
+        x2paddle_160 = paddle.add(x=x2paddle_154, y=x2paddle_234)
+        x2paddle_161 = self.relu10(x2paddle_160)
+        x2paddle_237 = self.conv11(x2paddle_161)
+        x2paddle_164 = self.relu11(x2paddle_237)
+        x2paddle_240 = self.conv12(x2paddle_164)
+        x2paddle_167 = paddle.add(x=x2paddle_161, y=x2paddle_240)
+        x2paddle_168 = self.relu12(x2paddle_167)
+        x2paddle_243 = self.conv13(x2paddle_168)
+        x2paddle_174 = self.pad1(x2paddle_168)
+        x2paddle_171 = self.relu13(x2paddle_243)
+        x2paddle_175 = self.pool1(x2paddle_174)
+        x2paddle_246 = self.conv14(x2paddle_171)
+        x2paddle_177 = paddle.multiply(x=x2paddle_175, y=x2paddle_176)
+        x2paddle_178 = paddle.concat(x=[x2paddle_175, x2paddle_177], axis=1)
+        x2paddle_179 = paddle.add(x=x2paddle_178, y=x2paddle_246)
+        x2paddle_180 = self.relu14(x2paddle_179)
+        x2paddle_249 = self.conv15(x2paddle_180)
+        x2paddle_183 = self.relu15(x2paddle_249)
+        x2paddle_252 = self.conv16(x2paddle_183)
+        x2paddle_186 = paddle.add(x=x2paddle_180, y=x2paddle_252)
+        x2paddle_187 = self.relu16(x2paddle_186)
+        x2paddle_255 = self.conv17(x2paddle_187)
+        x2paddle_190 = self.relu17(x2paddle_255)
+        x2paddle_258 = self.conv18(x2paddle_190)
+        x2paddle_193 = paddle.add(x=x2paddle_187, y=x2paddle_258)
+        x2paddle_194 = self.relu18(x2paddle_193)
+        x2paddle_195 = self.pad2(x2paddle_194)
+        x2paddle_196 = self.pool2(x2paddle_195)
+        x2paddle_202 = paddle.reshape(x=x2paddle_196, shape=[1, -1])
+        x2paddle_output_mm = paddle.matmul(x=x2paddle_202, y=x2paddle_fc_weight, transpose_y=True)
+        x2paddle_output_mm = paddle.scale(x=x2paddle_output_mm)
+        x2paddle_output = paddle.add(x=x2paddle_output_mm, y=x2paddle_fc_bias)
+        return x2paddle_output
+      
+paddle.disable_static()
+params = paddle.load(r'doc_scan/doc_scan_pd_model/model.pdparams')
+model = Document()
+model.set_dict(params, use_structured_name=True)
+input_spec = InputSpec([1, 3, 32, 32], 'float32', 'x')
+model.eval()
+paddle.jit.save(
+    layer=model,
+    path='document_infer_model/inference_model',
+    input_spec=[input_spec])
+print('document inference model saved in ./document_infer_model')

+ 92 - 0
deploy/python/imageClearONNXModel_to_static.py

@@ -0,0 +1,92 @@
+from paddle.static import InputSpec
+import paddle
+
+class ClearupNet(paddle.nn.Layer):
+    def __init__(self):
+        super(ClearupNet, self).__init__()
+        self.conv0 = paddle.nn.Conv2D(in_channels=3, out_channels=16, kernel_size=[3, 3], padding=1)
+        self.conv1 = paddle.nn.Conv2D(in_channels=16, out_channels=32, kernel_size=[3, 3], stride=2, padding=1)
+        self.conv2 = paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=[3, 3], stride=2, padding=1)
+        self.conv3 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv4 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv5 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv6 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv7 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv8 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv9 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv10 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv11 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv12 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv13 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=[3, 3], padding=1)
+        self.conv_trans0 = paddle.nn.Conv2DTranspose(in_channels=64, out_channels=32, kernel_size=[3, 3], stride=2, padding=1, output_padding=1, bias_attr=False)
+        self.batchnorm0 = paddle.nn.BatchNorm(num_channels=32, momentum=0.8999999761581421, epsilon=9.999999747378752e-06, is_test=True)
+        self.conv_trans1 = paddle.nn.Conv2DTranspose(in_channels=32, out_channels=16, kernel_size=[3, 3], stride=2, padding=1, output_padding=1, bias_attr=False)
+        self.batchnorm1 = paddle.nn.BatchNorm(num_channels=16, momentum=0.8999999761581421, epsilon=9.999999747378752e-06, is_test=True)
+        self.conv14 = paddle.nn.Conv2D(in_channels=16, out_channels=3, kernel_size=[3, 3], padding=1)
+        self.sigmoid0 = paddle.nn.Sigmoid()
+
+    def forward(self, x2paddle_input):
+        x2paddle_169 = self.conv0(x2paddle_input)
+        x2paddle_105 = paddle.clip(x=x2paddle_169, max=6.0, min=0.0)
+        x2paddle_172 = self.conv1(x2paddle_105)
+        x2paddle_108 = paddle.clip(x=x2paddle_172, max=6.0, min=0.0)
+        x2paddle_175 = self.conv2(x2paddle_108)
+        x2paddle_111 = paddle.clip(x=x2paddle_175, max=6.0, min=0.0)
+        x2paddle_178 = self.conv3(x2paddle_111)
+        x2paddle_114 = paddle.clip(x=x2paddle_178, max=6.0, min=0.0)
+        x2paddle_181 = self.conv4(x2paddle_114)
+        x2paddle_117 = paddle.clip(x=x2paddle_181, max=6.0, min=0.0)
+        x2paddle_118 = paddle.add(x=x2paddle_111, y=x2paddle_117)
+        x2paddle_119 = paddle.clip(x=x2paddle_118, max=6.0, min=0.0)
+        x2paddle_184 = self.conv5(x2paddle_119)
+        x2paddle_122 = paddle.clip(x=x2paddle_184, max=6.0, min=0.0)
+        x2paddle_187 = self.conv6(x2paddle_122)
+        x2paddle_125 = paddle.clip(x=x2paddle_187, max=6.0, min=0.0)
+        x2paddle_126 = paddle.add(x=x2paddle_119, y=x2paddle_125)
+        x2paddle_127 = paddle.clip(x=x2paddle_126, max=6.0, min=0.0)
+        x2paddle_190 = self.conv7(x2paddle_127)
+        x2paddle_130 = paddle.clip(x=x2paddle_190, max=6.0, min=0.0)
+        x2paddle_193 = self.conv8(x2paddle_130)
+        x2paddle_133 = paddle.clip(x=x2paddle_193, max=6.0, min=0.0)
+        x2paddle_134 = paddle.add(x=x2paddle_127, y=x2paddle_133)
+        x2paddle_135 = paddle.clip(x=x2paddle_134, max=6.0, min=0.0)
+        x2paddle_196 = self.conv9(x2paddle_135)
+        x2paddle_138 = paddle.clip(x=x2paddle_196, max=6.0, min=0.0)
+        x2paddle_199 = self.conv10(x2paddle_138)
+        x2paddle_141 = paddle.clip(x=x2paddle_199, max=6.0, min=0.0)
+        x2paddle_142 = paddle.add(x=x2paddle_135, y=x2paddle_141)
+        x2paddle_143 = paddle.clip(x=x2paddle_142, max=6.0, min=0.0)
+        x2paddle_202 = self.conv11(x2paddle_143)
+        x2paddle_146 = paddle.clip(x=x2paddle_202, max=6.0, min=0.0)
+        x2paddle_205 = self.conv12(x2paddle_146)
+        x2paddle_149 = paddle.clip(x=x2paddle_205, max=6.0, min=0.0)
+        x2paddle_150 = paddle.add(x=x2paddle_143, y=x2paddle_149)
+        x2paddle_151 = paddle.clip(x=x2paddle_150, max=6.0, min=0.0)
+        x2paddle_152 = paddle.add(x=x2paddle_111, y=x2paddle_151)
+        x2paddle_208 = self.conv13(x2paddle_152)
+        x2paddle_155 = paddle.clip(x=x2paddle_208, max=6.0, min=0.0)
+        x2paddle_156 = self.conv_trans0(x2paddle_155)
+        x2paddle_157 = self.batchnorm0(x2paddle_156)
+        x2paddle_158 = paddle.clip(x=x2paddle_157, max=6.0, min=0.0)
+        x2paddle_159 = paddle.add(x=x2paddle_108, y=x2paddle_158)
+        x2paddle_160 = self.conv_trans1(x2paddle_159)
+        x2paddle_161 = self.batchnorm1(x2paddle_160)
+        x2paddle_162 = paddle.clip(x=x2paddle_161, max=6.0, min=0.0)
+        x2paddle_163 = paddle.add(x=x2paddle_105, y=x2paddle_162)
+        x2paddle_211 = self.conv14(x2paddle_163)
+        x2paddle_166 = paddle.clip(x=x2paddle_211, max=6.0, min=0.0)
+        x2paddle_167 = paddle.add(x=x2paddle_input, y=x2paddle_166)
+        x2paddle_output = self.sigmoid0(x2paddle_167)
+        return x2paddle_output
+
+paddle.disable_static()
+params = paddle.load(r'doc_clean/doc_clean_pd_model/model.pdparams')
+model = ClearupNet()
+model.set_dict(params, use_structured_name=True)
+input_spec = InputSpec([1, 3, 256, 256], 'float32', 'x')
+model.eval()
+paddle.jit.save(
+    layer=model,
+    path='doc_clearup_infer_model/inference_model',
+    input_spec=[input_spec])
+print('doc_clearup inference model saved in ./doc_clearup_infer_model')