Browse Source

Update PaddlePaddle test files (#552)

Lutz Roeder 3 years ago
parent
commit
6440904370
2 changed files with 41 additions and 39 deletions
  1. 25 16
      source/paddle.js
  2. 16 23
      test/models.json

+ 25 - 16
source/paddle.js

@@ -127,11 +127,19 @@ paddle.ModelFactory = class {
                         const createModel = (metadata, format, desc, tensors) => {
                             return new paddle.Model(metadata, format, desc, tensors);
                         };
-                        const loadParams = (metadata, program, stream) => {
-                            const weights = new Map();
+                        const loadParams = (stream) => {
+                            const params = [];
                             while (stream.position < stream.length) {
                                 const tensor = paddle.Utility.openTensorDesc(stream);
-                                weights.set(program.vars.shift(), tensor);
+                                params.push(tensor);
+                            }
+                            return params;
+                        };
+                        const mapParams = (params, program) => {
+                            const weights = new Map();
+                            const vars = program.vars.slice();
+                            for (const param of params) {
+                                weights.set(vars.shift(), param);
                             }
                             return weights;
                         };
@@ -146,25 +154,24 @@ paddle.ModelFactory = class {
                             }
                             case 'paddle.params': {
                                 const file = identifier !== 'params' ? base + '.pdmodel' : 'model';
+                                const params = loadParams(context.stream);
                                 return context.request(file, null).then((stream) => {
                                     const program = openProgram(stream, 'paddle.pb');
-                                    const tensors = loadParams(metadata, program, context.stream);
-                                    return createModel(metadata, program.format, program.desc, tensors);
+                                    const weights = mapParams(params, program);
+                                    return createModel(metadata, program.format, program.desc, weights);
+                                }).catch(() => {
+                                    const weights = new Map(params.map((param, index) => [ index.toString(), param ]));
+                                    return createModel(metadata, 'PaddlePaddle Inference Weights', null, weights);
                                 });
                             }
                             case 'paddle.pb':
                             case 'paddle.pbtxt': {
                                 const loadEntries = (context, program) => {
-                                    const tensors = new Map();
-                                    const promises = program.vars.map((name) => context.request(name, null));
+                                    const promises = program.vars.map((name) => context.request(name, null).then((stream) => stream).catch(() => null));
                                     return Promise.all(promises).then((streams) => {
-                                        for (let i = 0; i < program.vars.length; i++) {
-                                            const tensor = paddle.Utility.openTensorDesc(streams[i]);
-                                            tensors.set(program.vars[i], tensor);
-                                        }
-                                        return createModel(metadata, program.format, program.desc, tensors);
-                                    }).catch((/* err */) => {
-                                        return createModel(metadata, program.format, program.desc, tensors);
+                                        const params = streams.map((stream) => stream ? paddle.Utility.openTensorDesc(stream) : null);
+                                        const weights = mapParams(params, program);
+                                        return createModel(metadata, program.format, program.desc, weights);
                                     });
                                 };
                                 const openNumPyArrayPickle = (stream, weights) => {
@@ -176,7 +183,8 @@ paddle.ModelFactory = class {
                                 const program = openProgram(context.stream, match);
                                 if (extension === 'pdmodel') {
                                     return context.request(base + '.pdiparams', null).then((stream) => {
-                                        const weights = loadParams(metadata, program, stream);
+                                        const params = loadParams(stream);
+                                        const weights = mapParams(params, program);
                                         return createModel(metadata, program.format, program.desc, weights);
                                     }).catch((/* err */) => {
                                         const weights = new Map();
@@ -200,7 +208,8 @@ paddle.ModelFactory = class {
                                 }
                                 if (identifier === 'model') {
                                     return context.request('params', null).then((stream) => {
-                                        const weights = loadParams(metadata, program, stream);
+                                        const params = loadParams(stream);
+                                        const weights = mapParams(params, program);
                                         return createModel(metadata, program.format, program.desc, weights);
                                     }).catch((/* err */) => {
                                         return loadEntries(context, program);

+ 16 - 23
test/models.json

@@ -4266,11 +4266,25 @@
   },
   {
     "type":     "paddle",
-    "target":   "ch_ppocr_mobile_v2.0_det_infer.tar",
-    "source":   "https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar",
+    "target":   "ch_ppocr_mobile_v2.0_det_infer.zip",
+    "source":   "https://github.com/lutzroeder/netron/files/8748319/ch_ppocr_mobile_v2.0_det_infer.zip",
     "format":   "PaddlePaddle",
     "link":     "https://github.com/lutzroeder/netron/issues/552"
   },
+  {
+    "type":     "paddle",
+    "target":   "ch_ppocr_mobile_v2.0_det_infer.pdiparams",
+    "source":   "https://github.com/lutzroeder/netron/files/8748319/ch_ppocr_mobile_v2.0_det_infer.zip[inference.pdiparams]",
+    "format":   "PaddlePaddle Inference Weights",
+    "link":     "https://github.com/lutzroeder/netron/issues/552"
+  },
+  {
+    "type":     "paddle",
+    "target":   "critic.pdparams",
+    "source":   "https://github.com/lutzroeder/netron/files/8748332/critic.pdparams.zip[critic.pdparams]",
+    "format":   "PaddlePaddle Pickle",
+    "link":     "https://github.com/lutzroeder/netron/issues/552"
+  },
   {
     "type":     "paddle",
     "target":   "lite_naive_model_opt.nb.tar.gz",
@@ -4279,13 +4293,6 @@
     "format":   "Paddle Lite",
     "link":     "https://github.com/lutzroeder/netron/issues/797"
   },
-  {
-    "type":     "paddle",
-    "target":   "PyramidBox_WiderFace.tar.gz",
-    "source":   "http://paddlemodels.bj.bcebos.com/PyramidBox_WiderFace.tar.gz",
-    "format":   "PaddlePaddle",
-    "link":     "https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection"
-  },
   {
     "type":     "paddle",
     "target":   "paddle_example.zip",
@@ -4314,20 +4321,6 @@
     "format":   "PaddlePaddle v1.8.3",
     "link":     "https://github.com/lutzroeder/netron/issues/903"
   },
-  {
-    "type":     "paddle",
-    "target":   "resnet18.pdparams",
-    "source":   "https://paddle-hapi.bj.bcebos.com/models/resnet18.pdparams",
-    "format":   "PaddlePaddle Pickle",
-    "link":     "https://github.com/lutzroeder/netron/issues/552"
-  },
-  {
-    "type":     "paddle",
-    "target":   "resnet50_int8_model.tar.gz",
-    "source":   "http://paddle-inference-dist.bj.bcebos.com/int8/resnet50_int8_model.tar.gz",
-    "format":   "PaddlePaddle",
-    "link":     "https://github.com/lutzroeder/netron/issues/198"
-  },
   {
     "type":     "paddle",
     "target":   "squeezenet1.1.nb",