04.OCR学习路径之文本检测(中2)FCN算法简介

2019-11-25 09:06:43 浏览数 (1)

前言

FCN是基于深度学习的语义分割的开山之作,尽管现在很多方法都超越了FCN,但它的思想仍然有很重要的意义。

本次课主要分享FCN(Fully Convolutional Networks for Semantic Segmentation)这篇文章的思想。这是对图像的pixel-wise操作,属于semantic segmentation类内的问题

之前我们讲的文本检测是先提出一个文本区域,然后通过深度神经网络回归预测出该边框的位置信息,因此得到一个矩形框,可以实现对文本的检测任务。

但是FCN全卷积神经网络的提出给文本检测提供了另外一个思路,也就是对像素点的二分类判断,直接在像素点上操作的话,就少了对某一区域是否包含文本的判断,也就是说,不用先提出anchor,也就是我想要分享的one-stage来做目标检测的思想来源以及理论依据。

下面让我们展开来说FCN是怎么应用到检测领域内的!

一、 什么是语义分割(Semantic Segmentation)

语义分割是概括来讲就是像素级别(pixelwise)上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的,图1 与图2 很明显地呈现出目标检测和语义分割的区别。目标检测(图1)是得出一个边界框,通常是矩形的框,这是一个比较粗略的预测,而图2由于其对每个像素点计算的,所以能检测出目标的边缘轮廓信息,也就是说更加精细化了。

图1 目标检测图1 目标检测
图2 图像分割图2 图像分割

二、 FCN算法流程

我们已经知道一般的深度神经网络实现物体分类任务的流程大概是CNN网络提取特征,之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成为一个固定长度的特征向量。此类经典结构适用于图像级别的分类和回归任务,因为它们最后都期望得到输入图像的分类的概率,如VGGNet网络最后一层输出一个1000维的向量表示输入图像属于一千个类别中每一类的概率。

但是FCN与CNN不同的地方在于,FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。如下图所示,上面是经典CNN网络后面三层连接的是全连接层(平铺层4096*1),下面是FCN的结构。简单的说,FCN与CNN的区别在于FCN把CNN最后的全连接层换成卷积层,输出一张已经label好的图。

CNN和FCN对最后三层的处理CNN和FCN对最后三层的处理

全卷积神经网络主要使用了三种技术,如下分三节来介绍。

插播一条广告,别打我!

本课视频在B站有up的哦,嘻嘻嘻~,讲的都是正经东西,欢迎指正哈,谢谢啦。记得点赞哦。蛤蛤蛤~

https://www.bilibili.com/video/av73805100?p=4

3.1 全卷积化(Fully Convolutional)

用于解决逐像素(pixel-wise)的预测问题。通过将基础网络(例如VGG)最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输出图像大小与输入相对应;

3.2 反卷积(deconvolution)

上采样操作,用于恢复图片尺寸,方便后续进行逐像素预测;在机器学习中,反卷积是从低分辨率映射到大分辨率的过程,用于扩大图像尺寸。反卷积是一种特殊的正向卷积,而不是卷积的反过程。正向的卷积,我们知道是一个下采样的过程

符号约定:

  • 输入尺寸(input):N
  • 卷积核大小(kernel size):F
  • 步幅(stride):S
  • 边界扩充(padding): P
  • 输出尺寸(output):W

卷积输出尺寸计算

卷积计算 S=1卷积计算 S=1

W= (N − F 2P )/S 1

反卷积输出尺寸计算

反卷积计算,S=2反卷积计算,S=2

W= S(N-1) 2P-F 2

值得注意的是,当步长为1时,卷积与反卷积输出尺寸计算公式相同。这种情况下反卷积即为卷积,也说明了反卷积是一种特殊的卷积,而非卷积的逆过程。

了解了以上的原理,就可以解释FCN中是如何实现upsample上采样的了,FCN作者分为FCN-32s,FCN-16s,FCN-8s三种,论文中有一个图是描述这个三个过程的,如下图,

FCN实现upsample过程图FCN实现upsample过程图

image是原图像,conv1,conv2..,conv5为卷积操作,pool1,pool2,..pool5为pool操作(pool就是使得图片变为原图的1/2),注意con6-7是最后的卷积层,最右边一列是upsample后的end to end结果。必须说明的是图中nx是指对应的特征图上采样n倍(即变大n倍),并不是指有n个特征图,如32x upsampled 中的32x是图像只变大32倍,不是有32个上采样图像,又如2x conv7是指conv7的特征图变大2倍。

第一行对应FCN-32s,第二行对应FCN-16s,第三行对应FCN-8s。

从论文中的效果图可知,stride为32来放大32倍后得到的分割效果最差,FCN-8s的效果最好,但是不是就可以说越底层越好呢?比如对pool2,pool1实现同样的方法,可以有FCN-4s,FCN-2s,最后得到end to end的输出。这里作者给出了明确的结论,超过FCN-8s之后,结果并不能继续优化。

三种upsample尺度下的预测输出三种upsample尺度下的预测输出

3.3 跳跃结构(skip architecture)

用于融合高低层特征信息,这里的融合是拼接在一起,不是对应元素相加。通过跨层连接的结构,结合了网络浅层的细(fine-grain)粒度信息信息以及深层的粗糙(coarse)信息,以实现精准的分割任务。

三、 总结

结合上述的FCN的全卷积与upsample,在upsample最后一层加上softmax,就可以对该像素点属于每个类别的概率进行估计,实现end to end的预测目的,最后输出的图是一个概率估计,对应像素点的值越大,该像素属于该类的可能性也就越大。FCN的核心贡献在于提出使用卷积层通过学习让图片实现end to end分类。但是,FCN也有其缺点,例如使用了较浅层的特征,因为skip architecture中的fuse操作会加上较上层的pool特征值,导致不能充分利用高维特征,同时也因为使用较上层的pool特征值,导致FCN对图像大小变化有所要求,如果测试集的图像远大于或小于训练集的图像,FCN的效果就会变差。但是,也由于FCN提出了一种新的语义分割的方法,使得后续的不管是语义分割还是实例分割、目标检测都能借鉴到这样一种思想,因此是计算机视觉领域内极有意义的工作。

0 人点赞