Как вырезать сегментированные объекты из RCNN? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь обрезать сегментированные объекты, выданные МАСКА RCNN , единственная проблема в том, что когда я делаю обрезку, я получаю сегменты с цветами маски, а не с их оригиналом colors.

Вот предполагаемое изображение с сегментами:

enter image description here

и вот один сегмент (на этом изображении 17 сегментов) :

enter image description here

Как вы можете видеть, у нас есть сегмент с цветом маски, а не с исходным цветом.

вот код , что я использую:

  from mrcnn.config import Config
  from mrcnn import model as modellib
  from mrcnn import visualize
  import numpy as np
  import colorsys
  import argparse
  import imutils
  import random
  import cv2
  import os


  import matplotlib.image as mpimg
  import cv2

  import matplotlib.pyplot as plt
  import numpy as np

  # construct the argument parse and parse the arguments
  ap = argparse.ArgumentParser()
  ap.add_argument("-w", "--weights", required=True,
      help="path to Mask R-CNN model weights pre-trained on COCO")
  ap.add_argument("-l", "--labels", required=True,
      help="path to class labels file")
  ap.add_argument("-c", "--confidence", type=float, default=0.5,
      help="minimum probability to filter weak detections")
  ap.add_argument("-i", "--image", required=True,
      help="path to input image to apply Mask R-CNN to")

  args = vars(ap.parse_args())

  # load the class label names from disk, one label per line
  CLASS_NAMES = open(args["labels"]).read().strip().split("\n")

  # generate random (but visually distinct) colors for each class label
  # (thanks to Matterport Mask R-CNN for the method!)
  hsv = [(i / len(CLASS_NAMES), 1, 1.0) for i in range(len(CLASS_NAMES))]
  COLORS = list(map(lambda c: colorsys.hsv_to_rgb(*c), hsv))
  random.seed(42)
  random.shuffle(COLORS)

  class SimpleConfig(Config):
      # give the configuration a recognizable name
      NAME = "fashion"

      # set the number of GPUs to use along with the number of images
      # per GPU
      GPU_COUNT = 1
      IMAGES_PER_GPU = 1

       NUM_CLASSES = 1 + 3

      # Skip detections with < 90% confidence
      DETECTION_MIN_CONFIDENCE = args["confidence"]




  # initialize the inference configuration
  config = SimpleConfig()

  # initialize the Mask R-CNN model for inference and then load the
  # weights
  print("[INFO] loading Mask R-CNN model...")
  model = modellib.MaskRCNN(mode="inference", config=config,
      model_dir=os.getcwd())
  model.load_weights(args["weights"], by_name=True)

  # load the input image, convert it from BGR to RGB channel
  # ordering, and resize the image
  # default value 512 form the width
  image = cv2.imread(args["image"])
  image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  image = imutils.resize(image, width=1150)

  # perform a forward pass of the network to obtain the results
  print("[INFO] making predictions with Mask R-CNN...")
  r = model.detect([image], verbose=1)[0]


  image = visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], 
                            ['BG', 'top', 'boots' , 'bag'], r['scores'],
                            title="")

  # get and then save the segmented objects
  i = 0
  mask = r["masks"]
  for i in range(mask.shape[2]):
      image = cv2.imread(args["image"])
      image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
      image = imutils.resize(image, width=1150)

  for j in range(image.shape[2]):

      image[:,:,j] = image[:,:,j] * mask[:,:,i]


  filename = "Output/segment_%d.jpg"%i
  cv2.imwrite(filename,image)
  i+=1

Любая помощь о том, как решить эту проблему, будет принята с благодарностью, спасибо.

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Я нашел ошибку, как это было предложено мне в Github, мне пришлось удалить строку

              `image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)`

, потому что мое изображение уже было преобразовано в RGB.

0 голосов
/ 31 января 2020

Я думаю, вам нужно изменить эту строку строку в визуализации display_intance и изменить цвет лица с none на None.

Я думаю, что это создает случайный цветов, даже если вы не указали это явно

...