FCN算是当前最火的一个深度网络了,目的在与解决密集估计(Dense prediction)(例如语义分割/显著性检测等任务)问题。自从去年11月提出之后,就广受欢迎,并且获得了CVPR2015最佳论文奖(提名)。具体论文大家可以参见arViv论文,caffe-future代码可以从caffe-future 获得。
本篇中简要说说如何在自己的数据上训练自己的FCN网络,具体的理论知识,等过了考试月我再加入进来。
准备数据
网络结构数据(.caffemodel & .prototxt)
本篇文章我们采用VGG 16模型,原模型文件大家可以从Caffe的Model Zoo 下载。
由于这一模型是做图像分类的,因此,我们需要将其从全连接层(fc6和fc7)往上的层全部“砍掉”,。其实在FCN的Model Zoo中,论文作者已经为我们写好了他修改的模型定义文件 (该模型是FCN-16s,其他的8s/32s也可在Model zoo中找到下载链接)。作者是在Pascal VOC Context Segmentation上进行的。但是对于这一定义文件仅仅是针对于一个59类别的语义分割任务展开的,因此,我们还需要进一步修改prototxt文件,但这已经远远要比自行从VGG 16的定义文件修改容易得多。
修改定义文件
修改deploy.prototxt
deploy.prototxt是用于模型测试时的模型定义文件。我们需要将作者所有的score层中的num_output: 60
修改为自己的输出值。在作者的数据集中,共有59类别和一个背景类别,因此是60.
之前刚刚说过,我们需要将模型的后几层“砍掉”,其实,在实际操作中,并不是将其砍掉不顾。而是:我们在网络定义文件中新建自己的层,将原来的fc6/7弃之不用即可。那么对于Jonathan Long提供的