首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >04.OCR学习路径之文本检测(中2)FCN算法简介

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

原创
作者头像
Aalto
修改2019-11-25 09:06:43
1.6K0
修改2019-11-25 09:06:43
举报
文章被收录于专栏:晓说AI晓说AI晓说AI

前言

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提出了一种新的语义分割的方法,使得后续的不管是语义分割还是实例分割、目标检测都能借鉴到这样一种思想,因此是计算机视觉领域内极有意义的工作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 一、 什么是语义分割(Semantic Segmentation)
      • 二、 FCN算法流程
        • 3.1 全卷积化(Fully Convolutional):
          • 3.2 反卷积(deconvolution)
            • 3.3 跳跃结构(skip architecture)
              • 三、 总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档