FOTS解读 —— Fast Oriented Text Spotting with a Unified Network
文章目录
- 简述
- 网络结构
- backbone
- 检测分支
- RoIRotate分支
- 识别分支
- 损失函数
- References
简述
FOTS是CVPR 2018的一篇论文,其是第一篇针对多方向文本的端到端可训练的文本检测+识别算法。(反正论文中是这么说的,感觉貌似不是,莫在意)
- paper:https://arxiv.org/abs/1801.01671
- code:https://github.com/jiangxiluning/FOTS.PyTorch
概述:FOTS(Fast Oriented Text Spotting)是图像文本检测与识别联合训练、端到端可学习的网络模型。检测和识别任务共享卷积特征层,既节省了计算时间,也比两阶段训练方式能学习到更通用的图像特征。引入了旋转感兴趣区域(RoIRotate), 可以从卷积特征图中产生出水平轴对齐且高度固定(论文中固定为8)的文本区域,从而支持倾斜文本的识别。
得益于检测和识别这两种互补监督的端到端训练,实现了效率和精度的双提升,在icdar 2015上取得89.84%的F1,帧率达到22.6fps。很强的算法!(就是现在还没有官方开源)
上图所示红框内为两阶段法(先检测再识别),蓝框内为端到端(FOTS)的方式,可见端到端的方式比两阶段法几乎快了一倍。
一般来说文本检测和识别是分为两项任务进行的,分开更容易实现,可是也带来了先验知识的损失。FOTS提出了ROIRotate方法,将文本检测和文本识别这两项监督进行融合互补。观察其网络结构可以发现,是将east(检测)和crnn(识别)两个算法通过其提出ROIRotate连接起来。通过这种方式不仅速度快而且相比分开两项任务精度还能所有提升。能有效减少“漏检”、“错检”、“字符错误分割”、“字符错误合并”等4种错误。
网络结构
首先是网络结构,如下:
FOTS的整体结构由4部分组成。shared convolutions(共享特征),the text detection branch(检测分支),RoIRotate operation(仿射变换分支),the text recognition branch(识别分支)。数据通过主干网络提取共享特征,经过检测分支来预测文本框位置和方向,利用仿射变换在共享特征图上将文本框的内容变换到标准x,y坐标轴上,最后经过识别分支得出文本内容。
本文的检测分支为EAST,识别分支为CRNN,所以就整个网络来说,此网络的关键创新点为:提出了RoIRotate ,类似于roi pooling 和roi align,该操作主要池化带方向的文本区域,通过该操作可以实现将文本检测和文本识别端到端的连接起来。
backbone
FOTS的backbone为ResNet50 with FPN,共享卷积层采用了类似U-net的卷积共享方法,将底层和高层的特征进行了融合。这部分和EAST中的特征共享方式一样。最终输出的特征图大小为原图的1/4(论文中说是为了检测小物体)。
检测分支
这部分和EAST基本完全一样,这里我直接拿了“EAST文本检测算法”的网络结构图来作说明:(仅关注红框内的部分)
EAST算法输出了6个channel的feature map:第一个channel表示每个pixel属于正样本(文本区域)的概率;对于每个正样本,后面的4个channel表示该pixel到包围它的bounding box的上、下、左、右边界的距离(这里不太懂不要紧,后面还会说);最后一个channel预测相应bounding box的方向(旋转角度)。
所以检测部分的loss为:文本分类loss和一个bounding box regression loss。其中,文本分类loss是一个交叉熵损失,bounding box regression loss由一个iou loss和一个rotation angle loss组成。文中将 λ θ \lambda_\theta λθ设置为了10,将 λ r e g \lambda_{reg} λreg设置为了1。(超参)
注:其中, Ω是通过OHEM算法在score map上选取的正样本区域, |Ω|表示像素点数, H(px, px*)表示交叉熵。
RoIRotate分支
该模块的目的是:将有角度的文本块(EAST文本检测算法得到的),经过仿射变换,转化为正常的axis-align的,高度固定(论文中固定为了8),且长宽比保持不变的文本块,以满足后续识别分支(CRNN)的输入要求。
该变换分为两步。一是通过text proposals的预测值或者text proposals真实值计算仿射变换矩阵M;二是分别对检测分支得到的不同的文本框实施仿射变换,通过双线性插值获取水平feature map。(训练的时候输入给recognize的部分,是gt的部分经过roirotate得到的feature map;预测的时候输入给recognize的部分是使用的east回归的出来的参数进行roirotate得到的feature map。所以说训练和预测阶段的处理有点不太一样。)
下面是EAST检测分支的输出(这里忽略了第一个表示前景概率的channel),EAST得到的文本框是这样定义的: (???, ?, ?, ?, ?, ?),如下图所示:
然后对EAST得到的文本框进行RoIRotate变换,得到仿射变换矩阵M,方式如下:
其中M是仿射变换矩阵。 h t , w t h_t,w_t ht,wt分别表示仿射变换后特征图的高度(论文中设置为8)和宽度。 ( x , y ) (x,y) (x,y)表示共享特征图上点的坐标, ( t , b , l , r ) (t,b,l,r) (t,b,l,r) 分别表示到达框内某点到文本候选框的顶部,底部,左侧,右侧的距离,以及 θ \theta θ表示文本候选框的方向。 ( t , b , l , r ) (t,b,l,r) (t,b,l,r)和 θ \theta θ可以由真实候选框或检测分支给出。
得到仿射变换矩阵M, 思路是:
- 先计算ROI内的点(x,y)(在ROI内的坐标为(l, t))旋转至水平后要平移的距离。
- 计算目标高度ht与预测高度(t+b)的比值s, 为保持ROI的高宽比, 预测的长度(l+r)进行s倍的放缩。
- 平移(tx, ty), 放缩, 旋转得到水平的ROI。
- 按照仿射矩阵M, 可得目标ROI上每个像素点对应的原ROI上的坐标。
接下使用仿射变换参数,可以轻松生成最终的target RoI特征:
上公式表示目标ROI(I, j, c)处要填入的像素值, hs,ws表示ROIRotate的高和宽, Umn表示原ROI中(n, m, c)处的像素值, k()表示通用采样核(generic sampling kernel), 其参数φx, φy定义了采样方式, 此处取双线性插值采样。处理旋转好的目标ROI在宽的方向用0填充至固定宽度, 填充的部分不计算loss。
识别分支
识别分支就是CRNN,这部分不再详细介绍,可以参考我的另一篇博客。
这部分的损失函数和CRNN也是一样的,如下:
损失函数
综上所述,整个网络的损失函数为一个多任务损失函数:
这里 λ r e c o g \lambda_{recog} λrecog设置为了1。
这确实是一个很强悍的算法,就是目前没开源且复现代码没成功,有什么疑问欢迎留言。
done~
References
- https://arxiv.org/abs/1801.01671
- https://zhuanlan.zhihu.com/p/51090538
- https://blog.csdn.net/u013063099/article/details/89236368
- https://blog.csdn.net/yang_daxia/article/details/88047035
- https://blog.csdn.net/sinat_30822007/article/details/89294068
- https://blog.csdn.net/qq_14845119/article/details/84635847
FOTS解读 —— Fast Oriented Text Spotting with a Unified Network相关推荐
- 阅读笔记——ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve Network
目录 概述 方法 贝塞尔曲线检测 贝塞尔标注生成 贝塞尔合成数据集 贝塞尔对齐 识别分支 实验及指标 概述 尽管文字检测识别已经取得了很大进展,但自然场景下的文字检测识别,一方面由于受到包括文字样式多 ...
- TextDragon: An End-to-End Framework for Arbitrary Shaped Text Spotting阅读笔记
摘要 本文提出一种用来制造文本检测与识别关系的可微运算RoISlide,使模型成为端到端模型.本文在两个弯曲文本数据集CTW1500和Total-Text上的表现达到最佳,在常规文本数据集ICDAR2 ...
- 文本检测 论文阅读笔记之 Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks
Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks 摘要:最近语义分割和通用对象检测框架已被场景广泛采用文 ...
- 《Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spotting》论文阅读笔记
论文阅读笔记 去年在ECCV上发表的<Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spott ...
- 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)...
XiangBai--[CVPR2017]Detecting Oriented Text in Natural Images by link Segments 目录 作者和相关链接 方法概括 方法细节 ...
- SegLink(Detecting Oriented Text in Natural Images by Linking Segments)算法详解
<Detecting Oriented Text in Natural Images by Linking Segments>是和EAST同年的一篇发表在CVPR2017的OCR论文.代码 ...
- OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting
OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting 端到端文本识别(End-to-End Text Spotting)是将文本阅读问题看成一个整体 ...
- Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks
文章目录 Abstract 1. Introduction 2. Related Work 2.1. Text Detection 2.2. Text Recognition 2.3. Text Sp ...
- deep features for text spotting 在windows上使用
deep features for text spotting这篇文章中给的matlab代码eccv2014_textspotting,是作者在mac上编译好的,我们在Windows和linux下使用 ...
最新文章
- 【运维】使用FC命令辅助查杀DLL木马
- C++中的默认初始化
- excel转txt工具
- python凯撒密码实现_密码:凯撒密码及其Python实现
- 2018年需要关注的10个设计趋势
- 共用体变量不能在定义时初始化_【C语言资料更新】共用体联合体
- VS2010大左括号置新行及代码批量格式化
- ifconfig: command not found(CentOS专版,其他的可以参考)
- 计算机应用基础试卷分析报告,计算机应用基础试卷分析.pdf
- Netty实现群聊系统
- Python抓取行政区域划分存入MySQL数据库
- SIFI尺度不变特征变换算法
- Vue 接入firebase验证、Google登陆、Facebook登陆完整流程
- 图像风格迁移cvpr2020_CVPR 2018:一种交互式纹理迁移通用框架
- 人工智能芯片龙头之一gti概念股_AI芯片相关股票有哪些?AI芯片概念股票龙头一览...
- 使用unity制作AR的方法 EasyAR+ARCore
- MySQL数据库学习笔记2
- OnTimeAction
- 算法-并查集-加边无向图
- SAS 学习笔记(六)— SAS与属性数据分析
热门文章
- High Capacity Reversible Data Hiding in Encrypted Image Based on Adaptive MSB Prediction
- animate.ccss_引入CCSS(组件CSS)
- 微信JSSDK中的初始化方法调用遇到的问题
- 吴军:未来被颠覆的六大传统产业
- 怎样用U盘装Win7
- 一个好玩的偏视觉交互的前端开发工具箱 / 套件 - Uix Kit 3 更新啦
- #define SQR(x) (x*x) 值的探究
- 基于Django手机销售网站
- 查看手机安卓版本,手机品牌:
- 不讲武德放大招 云上安全桥头堡