基于caffe的FCN图像分割(一)

作者: 侠之大者_7d3f | 来源:发表于2018-12-11 17:48 被阅读44次

前言

在计算视觉领域,除了图像分类,目标检测,目标跟踪之外,图像分割也是研究的热点之一。 图像分割的常用医学图像,比如CT图像分割,视网膜图像的分割,在其他领域例如地理图像分割中应用也比较广泛。本人之所以对图像分割感兴趣,主要是想将深度学习的图像分割方法用于人像分割,人脸分割,这些应用更贴合我们的生活。


目标

  1. 研究常见的基于深度学习的图像分割方法。目前已知的方法:FCN,SegNet,UNet....
  2. 训练FCN网络,实现人脸肤色分割

开发环境

  • Ubuntu 18.04
  • caffe, pycaffe
  • fcn工程

环境搭建

caffe,pycaffe的安装

caffe的安装在Ubuntu18.0上非常简单,一句命令搞定:
sudo apt-get install caffe-cpu
pycaffe也会自动安装到Ubuntu系统自带的python的安装包中。

FCN工程的配置

step1: 下载FCN源码
git clone https://github.com/shelhamer/fcn.berkeleyvision.org.git

FCN源码下载

image.png

step2: 下载预训练好的模型

image.png
打开文件夹voc-fcn8s,打开caffemodel-url文件。下载模型
image.png
image.png

下载好模型之后,我直接保存到voc-fcn8s路径。


image.png

测试FCN图像分割

在训练网络之前,我们先用下载好的模型跑几张图片,测试一下效果。这样一方面我们可以有个直观的认识。

  • 准备测试图像
    在工程的demo文件夹下已经包含了一张测试图像,以及分割的结果。这个图像的尺寸为334x500。
image.png

这是demo中的原始图像


image.jpg

分割的结果


output.png

可视化结果


visualization.jpg

再准备几张测试图像,注意:尺寸保存334x500。

dog3_resize.jpg person2_resize.jpg
  • 测试代码
    测试代码保存在infer.py文件
image.png
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('xxxx.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('output.png')
masked_im = Image.fromarray(vis.vis_seg(im, out, voc_palette))
masked_im.save('visualization.jpg')


运行:
在当前路径下打开终端,输入: python3 ./infer.py
可能会有错误产生,比如xange错误, 因为xrange是python2的用法,python3已经不再支持,只需要把xrange替换为range即可。

  • 图像分割的结果
    dog图像的分割:
    output.png
visualization.jpg

person图像的分割:


output3.png visualization3.jpg

FCN的分割效果看起来还不错,在深度学习之前,任意目标的图像分割还是一个比较棘手的问题,传统的图像算法比如满水填充water fill, 区域生长 只能适应背景简单的图像。


End

相关文章

  • 基于caffe的FCN图像分割(一)

    前言 在计算视觉领域,除了图像分类,目标检测,目标跟踪之外,图像分割也是研究的热点之一。 图像分割的常用医学图像,...

  • 自动驾驶入门日记-3-图像语义分割

    在基于图像的语义分割问题中,为了解决FCN中结果比较粗糙的问题,后续在FCN的基础上进行了许多精细化工作,主要可以...

  • 语义分割

    FCN FCN对图像像素级的分类,从而解决了语义级别的图像分割问题。与经典的CNN在卷积层之后使用全连接层得到固定...

  • (20)图像分割——FCN

    FCN是全卷积神经网络,用于图像语义分割,将图像级别的分类扩展到像素级别的分类。FCN将传统网络后面的全连接层换成...

  • FCN详解

    FCN是深度学习应用在图像分割的代表作, 是一种端到端(end to end)的图像分割方法, 让网络做像素级别的...

  • 图像语义分割基础知识整理(CNN,FCN,Unet,CVPR-D

    整理的一些关于图像语义分割,CNN,FCN,Unet等的基础知识同时对CVPR-DeepGlobe路网分割竞赛部分...

  • 关于FCN与图像分割

    参考自:blog.csdn.net/taigw/article/details/51401448 深度学习的资料清...

  • 【图像分割模型】从FCN说起

    今天开启新的专栏《图像分割模型》。在这里,我们将共同探索解决分割问题的主流网络结构和设计思想,这是第1篇文章。 今...

  • 生物医学图像语义分割(一)FCN

    Index Introduction Analysis FC layer -> Convolutional lay...

  • 全卷积网络FCN

    Paper Address 什么是全卷积网络? FCN是深度学习应用在图像分割的代表作, 是一种端到端(end t...

网友评论

    本文标题:基于caffe的FCN图像分割(一)

    本文链接:https://www.haomeiwen.com/subject/izsehqtx.html