论文:Long_Fully_Convolutional_Networks
简介
- 全卷积网络相对于之前的cnn,是对图像中的每个像素点进行分类
- 常用于图像的语义分割中
参考
- https://github.com/shelhamer/fcn.berkeleyvision.org
- 该github的代码是基于caffe实现了voc的分类,而且给出了很多的caffemodel
- https://zhuanlan.zhihu.com/p/22976342
- 本文主要参考,详细介绍了fcn,以及其论文等
测试
- 需要下载
pascalVoc
的数据集 下载代码之后,在其根目录下新建py文件如下
import numpy as np from PIL import Image import matplotlib.pyplot as plt caffe_root = '/home/gry/libs/caffe/' import sys sys.path.insert(0,caffe_root + 'python/') import caffe fn = 'data/pascal/VOCdevkit/VOC2012/JPEGImages/2007_000129.jpg' im = Image.open( fn ) # im = im.resize([500,500],Image.ANTIALIAS) # im.save("1.jpg","JPEG") npimg = np.array( im, dtype=np.float32 ) print( 'max val of the npimg is : %f'%(npimg.max()) ) npimg -= np.array((104.00698793,116.66876762,122.67891434)) npimg.shape npimg = npimg.transpose( (2,0,1) ) # load net # net = caffe.Net( 'voc-fcn8s/deploy.prototxt','voc-fcn8s/fcn8s-heavy-pascal.caffemodel', caffe.TEST ) net = caffe.Net( 'voc-fcn16s/deploy.prototxt','voc-fcn16s/fcn16s-heavy-pascal.caffemodel', caffe.TEST ) # shape for input (data blob is N x C x H x W), set data # note : the H X W is not necessary to be equal with the network H X W # but the channel must be equal net.blobs['data'].reshape(1, *npimg.shape) net.blobs['data'].data[...] = npimg # net.blobs['data'].data.shape # run net and take argmax for prediction net.forward() out = net.blobs['score'].data[0].argmax(axis=0) plt.imshow(out,cmap='autumn');plt.axis('off') plt.savefig('test.png') plt.show() print('end now')
用不同的caffemodel得到的结果如下
- 原图
- voc-fcn8s
- voc-fcn16s
- voc-fcn32s
- 原图
SegNet
简介
- 基于caffe
参考链接
- https://github.com/alexgkendall/SegNet-Tutorial
- https://github.com/TimoSaemann/caffe-segnet-cudnn5
- https://github.com/alexgkendall/SegNet-Tutorial/blob/master/Example_Models/segnet_model_zoo.md
- https://github.com/alexgkendall/caffe-segnet
*http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html
测试
- 下载基于cudnn5的segnet代码与segnet-tutorial的代码,按照参考链接里的教程组织文件结构
- 修改
trian.txt
与test.txt
,并3进行训练 - 如果显存超过限制,则需要减小训练的
batchsize
- 转换caffemodel并按照教程里的方式进行测试,可以实时显示原图、groudtruth与网络输出图像
- 原代码中使用的是
plt.show()
,需要关闭之后才能继续运行,为更方便的显示,可以结合opencv
的imshow
与waitKey
。