FCN语义分割训练数据(以siftflow和voc2012数据集为例)

截至目前,现已经跑通了siftflow-fcn32s,voc-fcn32s,并制作好了自己的数据集,现在就等大批数据的到来,进而针对数据进行参数fine-tuning,现对我训练的训练流程和训练过程中遇到的问题,做出总结和记录,从而对以后的学习作铺垫。

通过这篇分析语义分割的文章可以知道,FCN作为2014年的网络,现在看来确实有些老旧了,从下表可以看出FCN的表现得分也不是最高的,但是不管黑猫白猫,能捉住老鼠的就是好猫,能应用到项目中的,解决问题就是ok的。

chapter 1 基础环境安装和搭建

首先,必要的环境是ubuntu操作系统,FCN使用的框架是caffe,所以还要完成caffe的搭建。在搭建cffe环境的时候,建议直接使用干净的系统进行配置,因为常用的深度学习框架除了caffe还有就是tensorflow,而两者之间是不兼容的,当然可以借助于Anaconda环境进行共存,但是由于FCN是对caffe的直接调用且应用的是python2,所以还是建议前期不要借助于anaconda进行安装,从装显卡驱动,装CUDA8.0,装cudnn6.0,再到opencv3.1,最后编译caffe,安装caffe,一气呵成!

参考资料:https://blog.csdn.net/pnan222/article/details/81003725

后期亲测,虽然都说安装了caffe之后再安装tensorflow会出现软链接错误的问题,如果不使用anaconda的话,只能舍去其中一个来成全另一个,但是通过anaconda,借助于conda进行安装,在虚拟的环境下,应用conda install重新安装新的cuda和cudnn(尽量不要优先选择pip,因为pip安装不会重装cuda和cudnn,还是会出现软链接错误),这样就不会出现两个框架公用一个cuda和cudnn的错误,则不会出现软链接错误。

chapter 2 应用训练好的module实现语义分割

1.在GitHub上下载作者开源的FCN代码,链接如下:https://github.com/shelhamer/fcn.berkeleyvision.org ;

相关文献的链接如下:

https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf

FCN在多个数据集上都进行了训练,比如:Pascal VOC模型,nyudv2模型,siftflow模型,Pascal-Context模型。

2.下载源码之后解压,首先就是要先应用用作者已经训练好的模型,对满足要求的数据进行预测,看一下效果。通过阅读源码和文章可以知道,训练FCN的过程是:要先根据Vgg16的model,训练FCN32s,再应用得到的FCN32s的model,训练FCN16s,再应用得到的FCN16s的model,训练FCN8s,得到最后的model,应用该model对网络正向传播,可以得到较好的表现结果。

下载voc-fcn32s,voc-fcn16s和voc-fcn8s的caffemodel,并应用于网络正向传播进行预测,作者已经训练好的model可以在每个数据集中进行下载,下载方式为进入对应目录下,找到一个名为caffemodel-url的文件,该文件保存的就是对应model的下载链接,通过链接即可以下载到model,并将model放在对应的目录下,由于fcn8s是最终表现效果最好的model,所以应用的也是该model。

接下来就是修改fcn.berkeleyvision.org目录下的infer.py文件了,以下是我的文件,仅供参考。

import sys
sys.path.append('/home/pzn/caffe/python')
import numpy as np
from PIL import Image

import caffe
import vis

# the demo image is "2007_000129" from PASCAL VOC

# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
im = Image.open('demo/image.jpg')
in_ = np.array(im, dtype=np.float32)
in_ = in_[:,:,::-1]
in_ -= np.array((104.00698793,116.66876762,122.67891434))
in_ = in_.transpose((2,0,1))

# load net
net = caffe.Net('voc-fcn8s/deploy.prototxt', 'voc-fcn8s/fcn8s-heavy-pascal.caffemodel', caffe.TEST)
# shape for input (data blob is N x C x H x W), set data
net.blobs['data'].reshape(1, *in_.shape)
net.blobs['data'].data[...] = in_
# run net and take argmax for prediction
net.forward()
out = net.blobs['score'].data[0].argmax(axis=0)

# visualize segmentation in PASCAL VOC colors
voc_palette = vis.make_palette(21)
out_im = Image.fromarray(vis.color_seg(out, voc_palette))
out_im.save('demo/output.png')
masked_im = Image.fromarray(vis.vis_seg(im, out, voc_palette))
masked_im.save('demo/visualization.jpg')

其中,加入

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值