Edge_gan总结

最近刚好在做分割,顺手玩玩用GAN做边缘检测. 本意是想在BSDS轮廓分割数据集上做,同时验证针对样本极不平衡的损失函数挑选问题,简单做个小结


整体结构为CGAN,由于训练数据太少,使用了预训练的VGG16作为baseline. BSDS训练集只有200张图像,因此使用canny算子生成了3万张边缘图像.使用标准二值交叉熵损失作为生成器损失函数. 训练30轮.

结果如下:

实验使用的训练集图像均为室内房屋图像,未出现人. 结果而言,网络具有较强的泛化能力.


实验之初,考虑到BSDS训练集太少,因此考虑使用迁移学习先生成canny边缘检测图像用以提升边缘检测能力,再使用BSDS训练集fine-tune. 效果不太理想,放弃了. 但从实验过程中验证了针对样本极不平衡情况下的损失函数效果对比.

对于BSDS轮廓数据集,正负样本比例应该在1:1000,甚至更高. 原始的二值交叉熵损失如理论而言失效,网络的生成结果全是一片黑. 然后尝试了focal loss,但生成器损失迅速变为NAN(原因有待考证). 然后选择了类间平衡交叉熵损失,训练的前几轮输出结果还能看见轮廓,之后就没了. 最后实验了带权交叉熵损失,效果明显提升,能够得到很清晰的轮廓,但是太清晰了😓. 得不断的尝试不同的权重,很麻烦. 以下是几个权值得到的分割结果对比图. 调了几个后放弃了BSDS,由contour_GAN的目标变为了edge_GANa😄