Browse Source

修改文档与python代码

1、修改文档中的说明,强调了需要安装OpenVINO 2021.1+版本与用户转模型时需要固定模型胡输入
2、python版本做了验证,修复了yolov3过滤掉label=0的结果的bug
jiangjiajun 5 years ago
parent
commit
163fb764f4

+ 8 - 21
deploy/openvino/python/deploy.py

@@ -38,11 +38,6 @@ class Predictor:
         self.model_name = self.info['Model']
         self.num_classes = self.info['_Attributes']['num_classes']
         self.labels = self.info['_Attributes']['labels']
-        if self.info['Model'] == 'MaskRCNN':
-            if self.info['_init_params']['with_fpn']:
-                self.mask_head_resolution = 28
-            else:
-                self.mask_head_resolution = 14
         transforms_mode = self.info.get('TransformsMode', 'RGB')
         if transforms_mode == 'RGB':
             to_rgb = True
@@ -137,7 +132,7 @@ class Predictor:
     def preprocess(self, image):
         res = dict()
         if self.model_type == "classifier":
-            im, = self.transforms(image)
+            im = self.transforms(image)
             im = np.expand_dims(im, axis=0).copy()
             res['image'] = im
         elif self.model_type == "detector":
@@ -147,14 +142,6 @@ class Predictor:
                 im_shape = np.expand_dims(im_shape, axis=0).copy()
                 res['image'] = im
                 res['im_size'] = im_shape
-            if self.model_name.count('RCNN') > 0:
-                im, im_resize_info, im_shape = self.transforms(image)
-                im = np.expand_dims(im, axis=0).copy()
-                im_resize_info = np.expand_dims(im_resize_info, axis=0).copy()
-                im_shape = np.expand_dims(im_shape, axis=0).copy()
-                res['image'] = im
-                res['im_info'] = im_resize_info
-                res['im_shape'] = im_shape
         elif self.model_type == "segmenter":
             im, im_info = self.transforms(image)
             im = np.expand_dims(im, axis=0).copy()
@@ -173,6 +160,7 @@ class Predictor:
             'category': self.labels[l],
             'score': preds[output_name][0][l],
         } for l in pred_label]
+        print(result)
         return result
 
     def segmenter_postprocess(self, preds, preprocessed_inputs):
@@ -185,8 +173,10 @@ class Predictor:
         score_name = next(it)
         score_map = np.squeeze(preds[score_name])
         score_map = np.transpose(score_map, (1, 2, 0))
+        
         im_info = preprocessed_inputs['im_info']
-        for info in im_info[::-1]:
+        
+        for info in im_info[0][::-1]:
             if info[0] == 'resize':
                 w, h = info[1][1], info[1][0]
                 label_map = cv2.resize(label_map, (w, h), cv2.INTER_NEAREST)
@@ -195,21 +185,18 @@ class Predictor:
                 w, h = info[1][1], info[1][0]
                 label_map = label_map[0:h, 0:w]
                 score_map = score_map[0:h, 0:w, :]
-            else:
-                raise Exception("Unexpected info '{}' in im_info".format(info[
-                    0]))
         return {'label_map': label_map, 'score_map': score_map}
 
     def detector_postprocess(self, preds, preprocessed_inputs):
         """对图像检测结果做后处理
         """
         outputs = self.net.outputs
-        for name in outpus:
-            if (len(outputs[name].shape == 3)):
+        for name in outputs:
+            if (len(outputs[name].shape) == 3):
                 output = preds[name][0]
         result = []
         for out in output:
-            if (out[0] > 0):
+            if (out[0] >= 0):
                 result.append(out.tolist())
             else:
                 pass

+ 1 - 1
deploy/openvino/src/paddlex.cpp

@@ -185,7 +185,7 @@ bool Model::predict(const cv::Mat& im, DetResult* result) {
   }
   int num_boxes = size / 6;
   for (int i = 0; i < num_boxes; ++i) {
-    if (data[i * 6] > 0) {
+    if (data[i * 6] >= 0) {
       Box box;
       box.category_id = static_cast<int>(data[i * 6]);
       box.category = labels[box.category_id];

+ 3 - 1
docs/deploy/openvino/export_openvino_model.md

@@ -17,6 +17,8 @@ paddle模型转openvino之前需要先把paddle模型导出为inference格式模
 paddlex --export_inference --model_dir=/path/to/paddle_model --save_dir=./inference_model --fixed_input_shape=[w,h]
 ```
 
+**注意**:需要转OpenVINO模型时,导出inference模型请务必指定`--fixed_input_shape`参数来固定模型的输入大小,且模型的输入大小需要与训练时一致
+
 ## 导出OpenVINO模型
 
 ```
@@ -35,7 +37,7 @@ python converter.py --model_dir /path/to/inference_model --save_dir /path/to/ope
 | --model_dir  | Paddle模型路径,请确保__model__, \_\_params__model.yml在同一个目录|
 | --save_dir  | OpenVINO模型保存路径 |
 | --fixed_input_shape  | 模型输入的[W,H] |
-| --data type(option)  | FP32、FP16,默认为FP32,VPU下的IR需要为FP16 |  
+| --data type(option)  | (可选)FP32、FP16,默认为FP32,VPU下的IR需要为FP16 |  
 
 **注意**:
 - 由于OpenVINO 从2021.1版本开始支持ONNX的resize-11 OP的原因,请下载OpenVINO 2021.1+的版本

+ 3 - 1
docs/deploy/openvino/introduction.md

@@ -1,5 +1,7 @@
 # OpenVINO部署简介
-PaddleX支持将训练好的Paddle模型通过OpenVINO实现模型的预测加速,OpenVINO详细资料与安装流程请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html),本文档使用OpenVINO 2020.4测试通过。
+PaddleX支持将训练好的Paddle模型通过OpenVINO实现模型的预测加速,OpenVINO详细资料与安装流程请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html),本文档使用OpenVINO 2020.4与2021.1测试通过。  
+**注意**:由于PaddleX分割模型使用了ReSize-11 Op,OpenVINO 2021.1版本开始支持支持Resize-11 ,请务必下载OpenVINO 2021.1+版本  
+
 
 ## 部署支持情况
 下表提供了PaddleX在不同环境下对使用OpenVINO加速的支持情况  

+ 1 - 1
docs/deploy/openvino/linux.md

@@ -7,7 +7,7 @@
 * GCC* 5.4.0
 * CMake 3.0+
 * PaddleX 1.0+
-* OpenVINO 2020.4
+* OpenVINO 2021.1+
 * 硬件平台:CPU、VPU
 
 **说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/develop/install.html) , OpenVINO安装请根据相应的系统参考[OpenVINO-Linux](https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html)或者[OpenVINO-Raspbian](https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html)

+ 1 - 1
docs/deploy/openvino/windows.md

@@ -5,7 +5,7 @@ Windows 平台下,我们使用`Visual Studio 2019 Community` 进行了测试
 
 ## 前置条件
 * Visual Studio 2019
-* OpenVINO 2020.4
+* OpenVINO 2021.1+
 * CMake 3.0+
 
 **说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/develop/install.html) , OpenVINO安装请参考[OpenVINO-Windows](https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_windows.html)