1. 数据集图片大小问题
U-Net是经过几次下采样,再经过几次上采样恢复到原来的大小,因此需要数据集图片经过几次下采样后,不为奇数,否则可能会在网络结构那里报错,输入输出不对应。
解决办法:第一种方法是resize为特定大小,但这样图片改变了,可能效果不好;另一种方法是将图片进行裁剪,这样保留了IOU区域的原始大小。
2. 对于训练结果全黑或全白的情况
可能的原因有几个:
- 损失函数选择不对,交叉熵损失函数可能不适用于这种IOU区域和背景区域面积相差较大的情况,可以改用为focal loss、dice loss或Tversky loss等图像分割常用的loss。
- 训练集样本太少,之前仅采用40张图片进行训练,效果出不来;
- 训练迭代次数太少,之前仅训练10个epoch,也是没有效果,后来增加至30,50;
- 训练学习率太大了,之前是10e-4,后来改为了10e-6;
另外,训练的batch_size越大越好,这样越具有代表性;卷积核大小也可以调整。
3. 对于数据集中图片读取时顺序为0,1,10,100…的情况
可以用下面的程序解决,按照0,1,2…顺序进行排列
imgs.sort(key=lambda x: int(x.replace("..\\test\\","").split('.')[0])) # 按照数字进行排序后按顺序读取文件夹下的图片
其中,"…\test\"为图像文件夹的路径
4. 对于结果为灰色(不为黑白)
一般情况是因为还没有完全拟合,可以考虑将epoch增大