文章目录

  • 简述
  • 网络结构
    • 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相关推荐

  1. 阅读笔记——ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve Network

    目录 概述 方法 贝塞尔曲线检测 贝塞尔标注生成 贝塞尔合成数据集 贝塞尔对齐 识别分支 实验及指标 概述 尽管文字检测识别已经取得了很大进展,但自然场景下的文字检测识别,一方面由于受到包括文字样式多 ...

  2. TextDragon: An End-to-End Framework for Arbitrary Shaped Text Spotting阅读笔记

    摘要 本文提出一种用来制造文本检测与识别关系的可微运算RoISlide,使模型成为端到端模型.本文在两个弯曲文本数据集CTW1500和Total-Text上的表现达到最佳,在常规文本数据集ICDAR2 ...

  3. 文本检测 论文阅读笔记之 Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks

    Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks 摘要:最近语义分割和通用对象检测框架已被场景广泛采用文 ...

  4. 《Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spotting》论文阅读笔记

    论文阅读笔记 去年在ECCV上发表的<Mask TextSpotter v3: Segmentation Proposal Network for Robust Scene Text Spott ...

  5. 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)...

    XiangBai--[CVPR2017]Detecting Oriented Text in Natural Images by link Segments 目录 作者和相关链接 方法概括 方法细节 ...

  6. SegLink(Detecting Oriented Text in Natural Images by Linking Segments)算法详解

    <Detecting Oriented Text in Natural Images by Linking Segments>是和EAST同年的一篇发表在CVPR2017的OCR论文.代码 ...

  7. OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting

    OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting 端到端文本识别(End-to-End Text Spotting)是将文本阅读问题看成一个整体 ...

  8. 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 ...

  9. deep features for text spotting 在windows上使用

    deep features for text spotting这篇文章中给的matlab代码eccv2014_textspotting,是作者在mac上编译好的,我们在Windows和linux下使用 ...

最新文章

  1. 【运维】使用FC命令辅助查杀DLL木马
  2. C++中的默认初始化
  3. excel转txt工具
  4. python凯撒密码实现_密码:凯撒密码及其Python实现
  5. 2018年需要关注的10个设计趋势
  6. 共用体变量不能在定义时初始化_【C语言资料更新】共用体联合体
  7. VS2010大左括号置新行及代码批量格式化
  8. ifconfig: command not found(CentOS专版,其他的可以参考)
  9. 计算机应用基础试卷分析报告,计算机应用基础试卷分析.pdf
  10. Netty实现群聊系统
  11. Python抓取行政区域划分存入MySQL数据库
  12. SIFI尺度不变特征变换算法
  13. Vue 接入firebase验证、Google登陆、Facebook登陆完整流程
  14. 图像风格迁移cvpr2020_CVPR 2018:一种交互式纹理迁移通用框架
  15. 人工智能芯片龙头之一gti概念股_AI芯片相关股票有哪些?AI芯片概念股票龙头一览...
  16. 使用unity制作AR的方法 EasyAR+ARCore
  17. MySQL数据库学习笔记2
  18. OnTimeAction
  19. 算法-并查集-加边无向图
  20. SAS 学习笔记(六)— SAS与属性数据分析

热门文章

  1. High Capacity Reversible Data Hiding in Encrypted Image Based on Adaptive MSB Prediction
  2. animate.ccss_引入CCSS(组件CSS)
  3. 微信JSSDK中的初始化方法调用遇到的问题
  4. 吴军:未来被颠覆的六大传统产业
  5. 怎样用U盘装Win7
  6. 一个好玩的偏视觉交互的前端开发工具箱 / 套件 - Uix Kit 3 更新啦
  7. #define SQR(x) (x*x) 值的探究
  8. 基于Django手机销售网站
  9. 查看手机安卓版本,手机品牌:
  10. 不讲武德放大招 云上安全桥头堡