复现DeepLabV3+和训练自己的数据集(Linux环境下)

  1. 所需代码和参考文章:

       代码链接:https://github.com/jfzhang95/pytorch-deeplab-xception 

      参考文章: Linux下Pytorch版deeplabv3+环境配置训练自己的数据集_ToLiveXX的博客-CSDN博客_deeplabv3+训练自己的数据集pytorchhttps://blog.csdn.net/qq_36766560/article/details/110009622 2.复现代码所遇问题总结:

     2.1 数据集目录格式(没有VOC2012数据的json标签,我自己的数据集只有原图和分割mask)

复现DeepLabV3+和训练自己的数据集(Linux环境下)_第1张图片

复现DeepLabV3+和训练自己的数据集(Linux环境下)_第2张图片

 详细的数据集中的图片格式参考文章:(更详细的可以去找网上很多)(3条消息) 制作自己的语义分割数据集(仿voc2012数据集)_丹啊丹的博客-CSDN博客_语义分割数据集

 2.2 根据自己数据集修改(我的数据集是分割二分类的数据集,具体修改看参考文章,不多赘述)

2.3 所遇问题一:

ValueError: Expected more than 1 value per channel when training, got input size torch.Size([1, 256, 1, 1])

 解决方案: 模型中用了batchnomolization,训练中用batch训练的时候,应该是有单数,比如dataset的总样本数为17,你的batch_size为8,就会报这样的错误。或者调整你的batch-size数目,使总的dataset数目能够整除batcnsize数目。

2.4 所遇问题二:

RuntimeError: CUDA error: device-side assert triggered

解决方案:在写自己的数据集.py文件中,把自己的num_classes改为256(这个问题我一直不知道为什么,希望有大佬解答)。

2.5 所遇问题三:

cuDNN error:CUDNN_STATUS_NOT_INITIALIZED

 由问题二我之前一直以为是类别设置问题,但是我所做的就是二分类,将类别设置为256虽然代码能训练,但是在理论上思想是错的,在别的博主那到的回答是查看自己标签的像素,运行参考文章的数据集格式,标签图片需要8为灰度图,PIL里的类别是L;可以自己重新处理一下标签图片的像素,背景像素为0,目标像素为1;具体怎么修改图片像素:PIL Image里面有getpixel 和putpixel

你可能感兴趣的:(学习自存,深度学习)