Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >02. OCR学习路径之文本检测(上)Faster R-CNN算法简介

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

原创
作者头像
Aalto
修改于 2019-11-14 09:02:22
修改于 2019-11-14 09:02:22
3.2K0
举报
文章被收录于专栏:晓说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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。
智能算法
2019/12/06
10.9K1
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」
之前我所在的公司七月在线开设的深度学习等一系列课程经常会讲目标检测,包括R-CNN、Fast R-CNN、Faster R-CNN,但一直没有比较好的机会深入(但当你对目标检测有个基本的了解之后,再看这些课程你会收益很大)。但目标检测这个领域实在是太火了,经常会看到一些写的不错的通俗易懂的资料,加之之前在京东上掏了一本书看了看,就这样耳濡目染中,还是开始研究了。
全栈程序员站长
2022/06/30
8050
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」
Sparse R-CNN
proposal box 和 proposal feature是网络中要学习的两个重要参数。两者的数目相同(都为N)且一一对应,每一个proposal box得到的RoI只和它对应的proposal feature做进一步的融合。
为为为什么
2022/09/23
1.1K0
Sparse R-CNN
深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。object detection要解决的问题就是物体在哪里,是什么这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。 object detection技术的演进: RCNN->SppNET->Fast-RCNN->Faster-RCNN 从图像识别的任务说起 这里有一个图像任务: 既要把图中的物体
机器学习AI算法工程
2018/04/17
1.4K0
深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
Faster R-CNN
Fast-RCNN基本实现端对端(除了proposal阶段外),下一步自然就是要把proposal阶段也用CNN实现(放到GPU上)。这就出现了Faster-RCNN,一个完全end-to-end的CNN对象检测模型。
CreateAMind
2018/07/24
5340
Faster R-CNN
从编程实现角度学习 Faster R-CNN(附极简实现)
Faster R-CNN 的极简实现: github: simple-faster-rcnn-pytorch(http://t.cn/RHCDoPv ) 本文插图地址(含五幅高清矢量图):draw.io(http://t.cn/RQzroe3 ) 1 概述 在目标检测领域, Faster R-CNN 表现出了极强的生命力, 虽然是 2015 年的论文(https://arxiv.org/abs/1506.01497),但它至今仍是许多目标检测算法的基础,这在日新月异的深度学习领域十分难得。Faster
AI研习社
2018/03/16
2.6K0
从编程实现角度学习 Faster R-CNN(附极简实现)
目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
Minerva
2020/05/25
1.3K0
【深度学习】深度图像检测算法总结与对比
一. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation
黄博的机器学习圈子
2023/01/10
1.2K0
【深度学习】深度图像检测算法总结与对比
基于Pytorch构建Faster-RCNN网络进行目标检测(一)
尽管R-CNN是物体检测的鼻祖,但其实最成熟投入使用的是faster-RCNN,而且在pytorch的torchvision内置了faster-RCNN模型,当然还内置了mask-RCNN,ssd等。既然已经内置了模型,而且考虑到代码的复杂度,我们也无需再重复制造轮子,但对模型本身还是需要了解一下其原理和过程。
python与大数据分析
2023/09/06
1.2K0
基于Pytorch构建Faster-RCNN网络进行目标检测(一)
Faster R-CNN算法
  Faster R-CNN算法是作者Ross Girshick对Fast R-CNN算法的一种改进。Fast R-CNN在速度和精度上都有了不错的结果,但仍有一些不足之处。Faster R-CNN算法同样使用VGG-16网络结构,检测速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在ILSVRC和COCO 2015竞赛中获得多个项目的第一名。在Faster R-CNN中提出了区域生成网络(Region Proposal Network,RPN),将候选区域的提取和Fast R-CNN中的目标检测网络融合到一起,这样可以在同一个网络中实现目标检测。Faster R-CNN主要是解决Fast R-CNN存在的问题:
全栈程序员站长
2022/10/04
6450
Faster R-CNN算法
经典神经网络 | Faster R-CNN 论文解析
Faster R-CNN是为了改进Fast R-CNN而提出来的。因为在Fast R-CNN文章中的测试时间是不包括search selective时间的,而在测试时很大的一部分时间要耗费在候选区域的提取上。所以作者提出了RPN来提取候选框,使时间大大的减少了。
墨明棋妙27
2022/09/23
7500
论文阅读学习 - Faster R-CNN
[Paper - Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks]
AIHGF
2019/02/18
5110
faster-rcnn原理介绍
本博客大部分参考http://blog.csdn.net/zy1034092330/article/details/62044941,其中夹杂着自己看论文的理解
全栈程序员站长
2022/11/09
5420
faster-rcnn原理介绍
最全综述 | 图像目标检测
图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车, 还要在图片中标记出它的位置, 用边框或红色方框把汽车圈起来, 这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。
AI算法与图像处理
2019/07/11
1.4K0
最全综述 | 图像目标检测
深入浅出理解Faster R-CNN
。这个方法显然存在一些问题,比如当物体是不同大小有不同的宽高比,那训练一个效果很好的检测模型将会是非常复杂的(复杂的原因有两个,一个是如果整个图片很大,那么预测出的边界框坐标的绝对值变化很大,不容易拟合;第二个原因则是框的大小长宽都在变化,加大了我们的拟合难度)。另一个问题则是会存在一些无效的预测,比如当预测
CristianoC
2020/06/02
6470
faster rcnn 详解
经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。
全栈程序员站长
2021/06/17
8050
faster rcnn 详解
经典论文解读 : Faster R-CNN,RPN网络的诞生
《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》,该论文由CV领域大牛RGB和何凯明于2016年发表,此篇论文堪称经典论文之一。
唐国梁Tommy
2021/05/28
5.7K0
经典论文解读 :  Faster R-CNN,RPN网络的诞生
MMDetection学习系列(1)——Faster RCNN深度探索与实战指南
目标检测是当前计算机视觉领域内研究的一个热点,与图像分类不一样的是,目标检测不仅要准确地识别出图像中目标的类别,还要准确的定位该目标的位置,并用边界框把目标框起来。
CoovallyAIHub
2025/01/15
3240
MMDetection学习系列(1)——Faster RCNN深度探索与实战指南
深度学习500问——Chapter08:目标检测(1)
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
JOYCE_Leo16
2024/04/16
4210
深度学习500问——Chapter08:目标检测(1)
一文读懂Faster RCNN
来源:信息网络工程研究中心 本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络。 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方
数据派THU
2023/03/29
1.1K0
一文读懂Faster RCNN
相关推荐
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档