前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >02. OCR学习路径之文本检测(上)Faster R-CNN算法简介

02. OCR学习路径之文本检测(上)Faster R-CNN算法简介

原创
作者头像
Aalto
修改2019-11-14 17:02:22
2.6K0
修改2019-11-14 17:02:22
举报
文章被收录于专栏:晓说AI晓说AI

前言

由于目前已经几乎不再使用传统的方法来做OCR,后续我们主要分享基于深度学习的OCR算法。该算法一般需要训练两个模型,一个是文本检测模型,一个是文字识别模型。

我们今天要讲的就是文本检测的算法发展。

文本检测的算法技术是依赖于视觉领域常规物体检测方法(SSD, YOLO, Faster-RCNN等)而产生的,但是直接套用于文字检测任务效果并不理想。不过,既然讲到近期的主题安排是OCR算法的学习路径,我认为有必要先讲一点通用目标检测的算法,文字也是一种目标嘛,只不过这个目标是比较小的目标,所以相比于通用目标检测有其特殊性。

一、通用目标检测综述

进入深度学习时代以来,物体检测发展主要集中在两个方向:two stage算法如R-CNN系列和one stage经典算法如YOLO、SSD等。

one-stage目标检测算法(也称one-shot object detectors),其特点是一步到位,直接在网络中提取特征来预测物体分类和位置,仅仅需要送入网络一次就可以预测出所有的边界框,因而检测速度较快,而two stage算法需要先生成region proposals(有可能包含待检测目标的区域),然后进行细粒度的物体检测,对每个候选框进行分类和返回候选框位置信息。速度稍慢。

本次分享先讲一下two-stage的方法。

二、引入faster-R-CNN

之前已经说过很多two-stage的算法是由著名Faster-RCNN拓展而来。有做过目标检测的同学应该了解过rcnn-> fast rcnn->faster rcnn这样的一个发展过程,我们只讲一个引子,大致了解下目标检测是如何发展而来的。

为了解决Fast R-CNN算法缺陷,使得算法实现two stage的全网络结构,2015年微软研究院的任少庆、何恺明以及 Ross B Girshick 等人又提出了 Faster R-CNN 算法。设计区域生成网络,即RPN(Region Proposal Networks)网络。将算法结构分为两个部分,先由 RPN 网络判断候选框是否为目标,再经分类定位的多任务损失判断目标类型,二者共享卷积神经网络提取的特征信息,快速生成有效候选框,降低计算成本又同时保证检测精度。

下图这个经典的框架图,读过faster-rcnn论文的人都应该有印象

可见,整个faster R-CNN的大致流程为4步:

1. Conv layers。Faster RCNN首先使用一组基础的CNN网络层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。

2. Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。

3. RoI Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。

4. Classifier。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

2.1获取图像特征

以上每一步都能拓展出很多知识细节,限于篇幅只能讲一些比较与文本检测关系较近的东西。所以步骤一不作过多赘述,就是一个获取feature map的过程。

卷积后的feature map:conv4_3 相比于输入,下采样了16倍,也就是说输入的图片尺寸为 3×H×W,那么feature的尺寸就是 C×(H/16)×(W/16)

2.2 RPN的训练过程

Faster R-CNN 最突出的贡献就在于提出了 Region Proposal Network(RPN)代替了 Selective Search,从而将候选区域提取的时间开销几乎降为 0(2s -> 0.01s)。

训练时(eg:输入600*1000的图像),如果anchor box的边界超过了图像边界,那这样的anchors对训练loss也不会产生影响,我们将超过边界的anchor舍弃不用。假设一幅600*1000的图像经过VGG16后大约为40*60,则此时的anchor数为40*60*9,约为21k个anchor boxes。生成的anchor中,有些anchor的边界超过了图片的边界,为无意义的anchor,可把这些anchor过滤掉,只保留inside anchor,论文的意思是这时,21k个anchor能减少至6k个。而这么多数量的proposals之间还有很多是互相重叠的,因此需要使用非极大值抑制法(NMS,non-maximum suppression)将IoU>0.7的区域全部合并,最后就剩下约2k个proposal regions。同理,在最终检测端,可以设置将概率大约某阈值P且IoU大约某阈值T的预测框采用NMS方法进行合并)。NMS不会影响最终的检测准确率,但是大幅地减少了建议框的数量。NMS之后,我们用建议区域中的top-N个来检测(即排过序后取N个)。

解释一下上图:

1)在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图(feature maps),所以相当于feature map每个点都是256-dimensions

2)在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息),同时256-d不变

3)假设在conv5 feature map中每个点上有k个anchor(原文如上k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates(scores和coordinates为RPN的最终输出)

4)补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练(至于什么是合适的anchors接下来RPN的训练会讲)

RPN通过反向传播(BP,back-propagation)和随机梯度下降(SGD,stochastic gradient descent)进行端到端(end-to-end)训练。依照Fast R-CNN中的“image-centric”采样策略训练这个网络。每个mini-batch由包含了许多正负样本的单个图像组成。我们可以优化所有anchor的损失函数,但是这会偏向于负样本,因为它们是主要的。

每一个mini-batch包含从一张图像中随机提取的256个anchor(注意,不是所有的anchor都用来训练),前景样本和背景样本均取128个,达到正负比例为1:1。如果一个图像中的正样本数小于128,则多用一些负样本以满足有256个Proposal可以用于训练。

RPN网络有两个同级输出层(cls score和bbox_prdict层),都是全连接层,称为multi-task。

遵循multi-task loss定义,最小化目标函数,PRN中对一幅图像的函数定义为:

1. cls loss,即rpn_cls_loss层计算的softmax loss,用于分类anchor为positive与negative的网络训练

2. reg loss,即rpn_loss_bbox层计算的soomth L1 loss,用于bounding box regression网络训练。

2.3 Roi Pooling

该层则利用2.2得到的proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

将保留下来的proposal赋给rois

RoI Pooling层负责收集所有的候选框,并计算每一个候选框的特征图,然后送入后续网络,从Faster RCNN的结构图我们可以看到RoI Pooling层有两个输入:

  • 原始的特征图;
  • RPN网络输出的候选框;

1、 为何使用RoI Pooling

但是由于 RPN 网络可在卷积特征图中生成多尺寸的候选框,导致出现可变目标尺寸和固定感受野不一致的现象。

回忆RPN网络生成的proposals的方法:对foreground anchors进行bounding box regression,那么这样获得的proposals也是大小形状各不相同,即也存在上述问题。所以Faster R-CNN中提出了RoI Pooling解决这个问题。不过RoI Pooling是从Spatial Pyramid Pooling发展而来,输出的size取决于feature map被分了多少块,有兴趣的读者可以自行查阅相关论文。

2、RoI Pooling原理

我们把每一个候选框的特征图水平和垂直分为pooled_w(7)和pooled_h(7)份,对每一份进行最大池化处理,这样处理后,即使大小不一样的候选区,输出大小都一样,实现了固定长度的输出,池化后的特征维数为49,送入全连接层。

2.4 分类和框回归

从PoI Pooling获取到7x7大小的proposal feature maps后,通过全连接主要做了:

· 通过全连接和softmax对proposal regions进行具体类别的分类(人,树,车等);

· 再次对proposal regions进行bounding box regression,获取更高精度的rectangle box。

三、Fast R-CNN的训练

Faster R-CNN使用RPN生成候选框后,剩下的网络结构和Fast R-CNN中的结构一模一样。在训练过程中,需要训练两个网络,一个是RPN网络,一个是在得到框之后使用的分类网络。通常的做法是交替训练,即在一个batch内,先训练RPN网络一次,再训练分类网络一次。两个网络的训练都是利用Softmax Loss和L1 Loss完成分类和定位。


下面是广告时间:

小编在B站有Up视频哦,欢迎来找茬,蛤蛤蛤~

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

溜了溜了~

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、通用目标检测综述
  • 二、引入faster-R-CNN
    • 2.1获取图像特征
      • 2.2 RPN的训练过程
        • 2.3 Roi Pooling
          • 1、 为何使用RoI Pooling
            • 2、RoI Pooling原理
              • 2.4 分类和框回归
              • 三、Fast R-CNN的训练
                • 下面是广告时间:
                相关产品与服务
                文字识别
                文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档