fcn拟合结果(2)

来源:互联网 发布:win7怎么卸载软件 编辑:程序博客网 时间:2024/06/05 10:08

前面主要说的是二分类的训练过程,作为一个FCN训练的一个尝试。对于多分类的过程,我会尽可能详尽描述我的训练过程。不过涉及公司,所以不能开源我的训练代码,抱歉啦,但是欢迎大家讨论。

首先作为对可行驶区域的一个检测,我们最主要考虑的是将可行驶的道路检测出来,避免和行人,车辆以及道路的边缘。在调研中,我发现对于将路边作为一类可以大大提高可行驶区域的检测精度(不会把绿化带什么的认为是道路)。所以在做数据集的时候,我把车及人设为一类,路是一类,道路边为一类,其余全设为255(忽略的label)。

然后修改train.prototxt和deploy.prototxt,修改了output_num,将反卷积设为了可学习。在solver.prototxt中我还是把iter_size设为1。我先使用已有的FCN-32s的模型先训练我的32s模型,然后用我的32s模型训练16s的模型,最后使用16s的模型训练8s的模型,最后在加入CRF训练。数据集主要使用的是Cityscape的数据。

在训练32s的模型时,loss的速度下降的很快,很快降到了10000以下。

但是最后得出的三类模型对于cityscape的测试数据集效果不是很好,于是我又分为6类去做,绿化带为一类,道路边为一类,车及人设为一类,建筑物为一类,天空为一类,可行驶路面为一类去训练,训练到8s的模型loss大概在50000左右。我同时测试类32s,16s还有8s的模型,发现三者的结果相差并不是很大,大概在24000代左右都已经达到了最优。

我把模型用于我们的数据集进行测试,发现总会有大片的可行驶区域检测不到,效果并不理想。看了dilated-convolution的文章,我认为最主要的原因在于pool层的下采样过程(个人理解,损失了很多细节特征导致)。

后期采用dilated convolution来代替pool层,还有上采样过程考虑使用UDC的方法(Understanding Convolution for Semantic Segmentation)代替,后续的实验结果我会继续更新。