【目标检测】output with shape [1, 300, 300] doesn‘t match the broadcast shape [3, 300, 300]

2023-11-03

问题描述

训练SSD网络时报错:RuntimeError: output with shape [1, 300, 300] doesn’t match the broadcast shape [3, 300, 300]

导致原因

数据集中存在单通道图片

解决办法

1. 若使用的是opencv

import cv2

gray_image = cv2.imread(‘path_to_your_gray_image’, cv2.IMREAD_GRAYSCALE)
rgb_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2RGB)

2. 若使用的是PIL

from PIL import Image

gray_image = Image.open(‘path_to_your_gray_image’).convert(‘L’)
rgb_image = gray_image.convert(‘RGB’)

SSD中有如下代码

img_path = os.path.join(self.img_root, data["filename"])
        image = Image.open(img_path)
        if image.format != "JPEG":
            raise ValueError("Image '{}' format not JPEG".format(img_path))

在 image 读取之后,加入转换RGB代码

img_path = os.path.join(self.img_root, data["filename"])
        image = Image.open(img_path)
        #################### 悠青 #####################
        if image.mode != 'RGB':
            # print('the picture is not rgb:')
            # print(img_path)
            image = image.convert('RGB')
        #################### 悠青 #####################
        if image.format != "JPEG":
            raise ValueError("Image '{}' format not JPEG".format(img_path))

但此时又遇到了新的问题

使用image.convert()之后,image.mode = None 而不是JEPG了,导致判断语句image.format != “JPEG” 成立,就会报错退出。

在转换后的图像上调用image.format,它可能会返回None,因为经过色彩空间转换后的图像不再关联原始的文件格式。这不会影响到图像的数据和色彩模式,你仍然可以正常地对图像进行操作和处理。

1. 暴力解决

由于报错代码如下,将其注释掉即可

if image.format != "JPEG":
    raise ValueError("Image '{}' format not JPEG".format(img_path))
  1. 定义一个新函数
    这个方法我没有试,具体如下:
class ConvertToRGB:
    def __init__(self):
        self.original_format = None

    def __call__(self, image):
        self.original_format = image.format
        if image.mode != 'RGB':
            image = image.convert('RGB')
        return image
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【目标检测】output with shape [1, 300, 300] doesn‘t match the broadcast shape [3, 300, 300] 的相关文章

  • E280-2G4T12S(SX1280)_STM21F1X驱动分享

    根据需求 我们需要实现的功能有 1 工作模式的切换 2 接收数据的存储处理 3 发射数据的准备 4 通信逻辑的设计 SX1280驱动开发的主要步骤如下 初始化 工作模式的切换 测试结果 1 1 初始化 首先参考手册的硬件连接 控制芯片的工作
  • 力扣之各位相加(给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。)

    各位相加 题目描述 给定一个非负整数 num 反复将各个位上的数字相加 直到结果为一位数 示例 输入 38 输出 2 解释 各位相加的过程为 3 8 11 1 1 2 由于 2 是一位数 所以返回 2 var addDigits funct
  • 区块链+社交=颠覆性的革新?

    要说在如今互联网时代 最有价值的应用是什么 毫无疑问 是社交 不论是微信 微博还是Facebook或者Twitter 这些社交媒体的出现 都让人们有了更快获取信息的途径与渠道 同时在社交媒体平台中由于用户也在不断产生新的内容 因此获得了非常

随机推荐