实践FCN+VOC2012语义分割
首先阅读了FCN论文,大概了解了利用FCN实现语义分割的方法和原理。
接着我了解了下语义分割的评价指标:
参考网址--https://www.jeremyjordan.me/evaluating-image-segmentation-models/
接着进行实践:
01.FCN网络参考如下网址中的
awesome-semantic-segmentation-pytorch/core/models/fcn.py
02.FCN训练PASCALVOC2012数据集—参考:
https://github.com/kawhidiot/pytorch-segmentation-voc
03.VOC2012用于分割的数据集可以参考:
https://oldpan.me/archives/pascal-voc2012-guide
实际上VOC2012仅仅部分图片适用于分割(2913张)(包括train和val)
注:02中代码是利用deeplabv3实现语义分割的,其中的加载数据部分和评价最后的指标写的挺好,就借助大体的框架,将训练网络和测试网络换成FCN,结果是可以进行训练和测试的。
在设定epoch和学习率之后,完成训练,并进行测试,但是结果很差,MIOU只有0.22,结果如下图所示,我尝试了多次,还是没有找到具体的原因。图示如下:
可视化的结果如下:
我还未找到具体失败的原因在哪里,以上可以成功实现运用FCN网络进行VOC2012数据集的语义分割训练,方法可以参考。如果有人知道我失败的原因可以提一下,我进行改正。
最后大家如果对分割感兴趣的话,可以参考以下网址进行学习(包含各种网络以及API实现语义分割的教程及代码)
https://github.com/mrgloom/awesome-semantic-segmentation
之后又进行了反思,应该是上次找的代码有点问题,之后我又用PSPNET进行了实践,发现差不多达到了论文中的效果,
参考代码:https://github.com/hszhao/semseg
按照它的教程进行实验,我用的数据集是VOC2012Aug,相比于普通的VOC2012训练集更大,模型效果会更好,下图是voc2012_pspnet50模型的测试结果:
之后进行了可视化,效果还是挺好的,如下所示: