FCN图像分割的mask标签使用transforms.ToTensor问题

最近在用pytorch写FCN时,将损失函数换成了CrossEntropyLoss,出现的问题是在第一个反向传播后,loss一下变成了0,之后再怎么训练loss都是0不再变化。而最初的loss看起来是一个正常的浮点数,很显然网络不可能经过一个epoch就找到了最优解。
经过仔细排查后,发现经过dataloader出来的标签里面的值都为0,正常应该会包含一些[0,calss_num)的整数标签,原来是读取的mask文件经过transforms.ToTensor()方法之后都变成了0,该方法的源码中也写到
because the input image is scaled to [0.0, 1.0], this transformation should not be used when transforming target image masks.
也就是说文件中的所有值在totensor之后最后映射在[0,1]这个区间,而我还转成了long类型(为了匹配loss函数的要求),所以最后都变成了0。
因此解决方法为使用torch.as_tensor(img)方法将读取的mask_img转成tensor,再使用torch.unsqueeze(img,0)提升一个维度,这样就能无缝替换上面ToTensor了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值