FlyingQianMM 5 anni fa
parent
commit
f4fafab700

+ 13 - 2
deploy/cpp/src/transforms.cpp

@@ -118,7 +118,18 @@ bool Padding::Run(cv::Mat* im, ImageBlob* data) {
               << ", but they should be greater than 0." << std::endl;
     return false;
   }
-  if (im->channels() < 4) {
+  if (im->channels() < 5) {
+    cv::Scalar value;
+    if (im->channels() == 1) {
+      value = cv::Scalar(im_value_[0]);
+    } else if (im->channels() == 2) {
+      value = cv::Scalar(im_value_[0], im_value_[1]);
+    } else if (im->channels() == 3) {
+      value = cv::Scalar(im_value_[0], im_value_[1], im_value_[2]);
+    } else if (im->channels() == 4) {
+      value = cv::Scalar(im_value_[0], im_value_[1], im_value_[2],
+                                    im_value_[3]);
+    }
     cv::copyMakeBorder(
     *im,
     *im,
@@ -127,7 +138,7 @@ bool Padding::Run(cv::Mat* im, ImageBlob* data) {
     0,
     padding_w,
     cv::BORDER_CONSTANT,
-    cv::Scalar(0));
+    value);
   } else {
     std::vector<cv::Mat> padded_im_per_channel(im->channels());
     #pragma omp parallel for num_threads(im->channels())

+ 13 - 2
deploy/openvino/src/transforms.cpp

@@ -122,7 +122,18 @@ bool Padding::Run(cv::Mat* im, ImageBlob* data) {
               << ", but they should be greater than 0." << std::endl;
     return false;
   }
-  if (im->channels() < 4) {
+  if (im->channels() < 5) {
+    cv::Scalar value;
+    if (im->channels() == 1) {
+      value = cv::Scalar(im_value_[0]);
+    } else if (im->channels() == 2) {
+      value = cv::Scalar(im_value_[0], im_value_[1]);
+    } else if (im->channels() == 3) {
+      value = cv::Scalar(im_value_[0], im_value_[1], im_value_[2]);
+    } else if (im->channels() == 4) {
+      value = cv::Scalar(im_value_[0], im_value_[1], im_value_[2],
+                                    im_value_[3]);
+    }
     cv::copyMakeBorder(
     *im,
     *im,
@@ -131,7 +142,7 @@ bool Padding::Run(cv::Mat* im, ImageBlob* data) {
     0,
     padding_w,
     cv::BORDER_CONSTANT,
-    cv::Scalar(0));
+    value);
   } else {
     std::vector<cv::Mat> padded_im_per_channel(im->channels());
     #pragma omp parallel for num_threads(im->channels())

+ 1 - 0
paddlex/cv/models/mask_rcnn.py

@@ -67,6 +67,7 @@ class MaskRCNN(FasterRCNN):
             self.mask_head_resolution = 14
         self.fixed_input_shape = None
         self.input_channel = input_channel
+        self.with_dcn = False
 
     def build_net(self, mode='train'):
         train_pre_nms_top_n = 2000 if self.with_fpn else 12000

+ 3 - 3
paddlex/cv/transforms/seg_transforms.py

@@ -94,11 +94,11 @@ class Compose(SegTransform):
 
     @staticmethod
     def decode_image(im_path, label, input_channel=3):
-        if isinstance(im, np.ndarray):
-            if len(im.shape) != 3:
+        if isinstance(im_path, np.ndarray):
+            if len(im_path.shape) != 3:
                 raise Exception(
                     "im should be 3-dimensions, but now is {}-dimensions".
-                    format(len(im.shape)))
+                    format(len(im_path.shape)))
             im = im_path
         else:
             try:

+ 1 - 2
paddlex/deploy.py

@@ -158,8 +158,7 @@ class Predictor:
                 self.transforms,
                 self.model_type,
                 self.model_name,
-                thread_pool=thread_pool,
-                input_channel=self.input_channel)
+                thread_pool=thread_pool)
             res['image'] = im
         elif self.model_type == "detector":
             if self.model_name in ["PPYOLO", "YOLOv3"]: