【问题标题】:Tensorflow Object Detection API 1-channel imageTensorFlow Object Detection API 1 通道图像
【发布时间】:2018-02-12 10:50:49
【问题描述】:

有什么方法可以在针对 RGB 图像进行训练的 Tensorflow 的 Object Detection API 中使用预训练模型来处理单通道灰度图像(深度)?

【问题讨论】:

    标签: tensorflow object-detection depth


    【解决方案1】:

    我尝试了以下方法,使用 Tensorflow 中的预训练模型 (faster_rcnn_resnet101_coco_11_06_2017) 对灰度(1 通道图像)执行对象检测。它确实对我有用。

    该模型是在 RGB 图像上训练的,所以我只需要修改 object_detection_tutorial.ipynb 中的某些代码,可在 Tensorflow 存储库中找到。

    第一次更改: 请注意,ipynb 中的现有代码是为 3 通道图像编写的,因此请更改 load_image_into_numpy 数组函数,如下所示

    来自

    def load_image_into_numpy_array(image):
      (im_width, im_height) = image.size
      return np.array(image.getdata()).reshape(
          (im_height, im_width, 3)).astype(np.uint8)
    

    def load_image_into_numpy_array(image):
      (im_width, im_height) = image.size
      channel_dict = {'L':1, 'RGB':3} # 'L' for Grayscale, 'RGB' : for 3 channel images
      return np.array(image.getdata()).reshape(
          (im_height, im_width, channel_dict[image.mode])).astype(np.uint8)
    

    第二次更改:灰度图像只有 1 个通道中的数据。要执行目标检测,我们需要 3 个通道(推理代码是为 3 个通道编写的)

    这可以通过两种方式实现。 a) 将单通道数据复制到另外两个通道中 b) 用零填充其他两个通道。 两个都行,我用的是第一种方法

    在 ipynb 中,转到读取图像的部分并将它们转换为 numpy 数组(ipynb 末尾的 forloop)。

    将代码更改为:

    for image_path in TEST_IMAGE_PATHS:
      image = Image.open(image_path)
      # the array based representation of the image will be used later in order to prepare the
      # result image with boxes and labels on it.
      image_np = load_image_into_numpy_array(image)
      # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
      image_np_expanded = np.expand_dims(image_np, axis=0)
    

    到这里:

    for image_path in TEST_IMAGE_PATHS:
      image = Image.open(image_path)
      # the array based representation of the image will be used later in order to prepare the
      # result image with boxes and labels on it.
      image_np = load_image_into_numpy_array(image)
      if image_np.shape[2] != 3:  
          image_np = np.broadcast_to(image_np, (image_np.shape[0], image_np.shape[1], 3)).copy() # Duplicating the Content
          ## adding Zeros to other Channels
          ## This adds Red Color stuff in background -- not recommended 
          # z = np.zeros(image_np.shape[:-1] + (2,), dtype=image_np.dtype)
          # image_np = np.concatenate((image_np, z), axis=-1)
      # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
      image_np_expanded = np.expand_dims(image_np, axis=0)
    

    就是这样,运行文件,您应该会看到结果。 这是我的结果

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 2019-07-27
      • 2018-01-28
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2018-07-30
      相关资源
      最近更新 更多