deeplabv3运行报错

报错详情:

RuntimeError: only batches of spatial targets supported (3D tensors) 
but got targets of size: : 【8, 480, 480, 3】

原因:

损失函数 nn.CrossEntropyLoss()的输入应该是一个4维的张量(网络的输出)和一个三维的张量(target),而数据集的标签为RGB三通道的图片 [batch size,weight,height,RGB]。需要将该四维张量的RGB图片输入转为单值的类别信息,重新将标签制作为单值灰度图。

通俗来说就是:

        SegmentationClass文件夹中的mask标签,即png图片是24位的,应该为8位的索引图。

解决方法:

将24位的png改为8位的索引图(8位索引图也是彩色的),python代码如下:

from PIL import Image
import cv2
import os
image_path = r"F:\1ship_height\COCO\Boats\VOC\SegmentationClass"   # 要转换的图片所在路径
save_path = r"F:\1ship_height\COCO\Boats\VOC\SegmentationClass_8"  # 保存路径
for image_name in os.listdir(image_path):
    image = os.path.join(image_path, image_name)
    img = Image.open(image)
    img = img.convert('P')
    save_name = os.path.join(save_path, image_name)
    img.save(save_name)

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值