文字检测过程分两步,第一步为检测出文字所在的位置,第二步根据检测框里的内容进行文字识别。

SAST是一种自然场景下的文本检测算法,论文地址:https://arxiv.org/abs/1908.05498

一、背景知识

1、语义分割算法: FCN全卷机层

通常CNN网络会在若干个卷积神经网络后面接全连接神经网络,将二维的feature map转化为一组固定长度的特征向量。以Alexnet为代表的经典CNN结构适用于图像的分类和回归任务,即最后得到的特征向量用于记录概率分数,得分最高的几类即为该图像中包括的类别。

例如,图中的猫输入到Alexnet中,得到一组1000大小的输出向量表征类别概率,其中cat这一类在统计概率中得分最高。

FCN语义分割算法对图像做像素级的分类,去掉了CNN网络中的全连接层,代替以反卷积层。反卷积层会对feature map进行上采样,使它恢复原输入图像的尺寸,从而使每个像素都可以产生一个预测。反卷积层保留了原图像的空间信息,使分类任务可以在每个像素上进行,最后的输出结果也基于每个像素做soft max回归,得到预测值。

upscaling 反卷积过程:

以Alexnet为例,最后三层全连接层输出大小为 4096,4096,1000,FCN将这三层表示为卷积层,卷积核大小为 (通道数,宽,高) 分别为 (4096,1,1)、(4096,1,1)、(1000,1,1)。这样原网络最后一层卷积层(最后一层卷积层所产生的特征图也叫heatmap,是一个尺寸很小的高维特征图) 经过变化后,通道数变为1000,图像大小恢复到原图像大小。

最后输出的是1000张经过upsampling变为原图像大小的图片,每个像素点经过1000个预测分类概率的softmax计算后,已经成为一张语义分割好的图片。

FCN论文地址:https://arxiv.org/abs/1411.4038

参考:

https://www.cnblogs.com/gujianhan/p/6030639.html

2、FPN 特征图金字塔网络

传统的图像金字塔任务是用不同尺度大小的卷积核对原图像进行特征提取,在每层feature map上同时进行特征提取和回归分类,每层都会得到多个特征框,然后进行NMS非极大抑制筛选。如SSH(Single Shot MultiBox Detector)特征金字塔算法:

SSH论文地址:https://arxiv.org/abs/1512.02325

虽然SSH在不同大小的feature map下可以更好的提取出大小不同的object,但这样带来的内存占用较大和很高的计算时间消耗问题。在物体检测里面,网络的感受野(深度)和stride是一对矛盾的东西。常用的网络stride一般会比较大,这样为了缩小feature map尺寸,然而图像中较小的物体甚至会小于stride的大小,造成的结果就是小物体检测率很低。SSH解决办法就是提取多个不同大小的feature map,增加感受野大小,但随之带来的问题就是运算量增大。

所以,问题是,如何高效计算多尺度的特征表示?

FPN的做法是让卷积层特征自上而下的融合,每一层feature map在原有图像像素基础上采用合适的差值法插入上一层feature map的元素,之后feature map的大小扩大了一倍

最后只采用最后一层特征图的结果,得到预测值。

FPN论文地址:https://arxiv.org/abs/1612.03144

参考:https://blog.csdn.net/hancoder/article/details/89048870

3、LSRM 循环神经网络

循环神经网络是具有循环的网络,允许信息持续存在:

Xt经过网络A变成ht,A网络同时会传递消息给B网络,再接着传给C 网络,达到信息的连续性。

LSRM全称long short term memory,是一种特殊的网络结构,能够学会间隔较久的依赖关系。

二、SAST 提出原因

文本检测存在如下挑战:文本尺寸、宽高比、方向、外形具有多边性,且文本数量和大小没有限制。

文本检测属于localization,属于定位检测,定位检测算法有RCNN,Fast-RCNN,YOLO等方法。RCNN是在图像上做随机selective search,截取出2000张大小形状不等的检测框,然后resize到统一大小后输入到VGG-16网络中去,得到2000张维度为4096的feature map,最后使用SVM做分类和NMS。

图片经过网络的运算后,object被一个大小合适的长方形框标出。

但是文字的形状和方向多变,大部分时候一个长方形框很难为文字做准确的定位,由此需要使用基于全卷积神经网络的语义分割算法做文字定位,同时也会出现新的问题:

(1)相邻紧密的文字很难通过语义分割的方法进行分离;

(2)长文本容易被碎片化,尤其当字符相隔较远且背景较为复杂时。

SAST即是一种基于语义分割的文本检测器,使用基于FCN的框架并进行预测文本特征,使用高效的点对齐方法,能够准确高效的检测任意长度的文本。

z

参考:https://blog.csdn.net/lz867422770/article/details/108169760

三、SAST应用理解

1、Network Architecture

主要使用Resnet50作为网络的backbone,将最后的全连接层以FCN全卷积层替代,由此输出与原图大小相同的语义分割结果。并且不同层次的feature map会以FPN算法进行三次特征点融合,使得特征网络可以包含更多大小不一的物体的信息。

2、数据处理

训练使用的数据集为ICDAR2015数据集,分为训练和测试两个部分。训练集包含1000张含有字符的图片,每张图片都标注了文字所在位置的四个角坐标和字符内容。SAST会对数据进行预处理,

3、损失函数

SAST网络的输出分为四个部分,分别为TCL TCO TVO 和 TBO特征图。TCL表征了文本区域,是区分文本图片/非文本图片的单通道分割特征图,另外三个特征图是相对于TCL的像素偏移量。TCO特征图是相对于TCL特征图的文本像素中心偏移量,TVO特征图是相对于TCL特征图的文本四个边框顶点的像素偏移量,TBO是相对于TCL特征图上下边界的偏移量。

由此构造了损失函数 SASTLoss:

λ1、λ2、λ3和λ4用来平衡四个任务,使得其在这个模型中重要程度相同,因此我们设置了{1.0, 0.5, 0.5, 1.0}来让四个损失梯度值在反向传播中作用程度均等。

4、训练结果

加载数据集与预训练模型,优化算法采用adam优化算法。下图为总loss值的波动曲线:

由于是在backbone Resnet50预训练模型上进行二次训练,初始损失值已经较低了,经过了epoch为30次的训练后,loss值接近平稳,在1附近上下波动。

文字检测定位--SAST相关推荐

  1. 【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 OCR--简介 文字识别也是图像领域一 ...

  2. 【文字检测算法整理】

    文字检测与其他目标检测的区别: 一.长宽比差异很大,而且普遍较小: 二.文字是以字符为基本单元按照一定空间排列而成的序列,而不是一个单独的目标: 三.文字存在多种粒度和多语言. 传统方法系列: 一.流 ...

  3. 自然场景下的文字检测:从多方向迈向任意形状

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经作者授权转载自知乎旷视Detection组专栏: https://zhuanlan.zhihu.com/p/68058851 旷视检测组在刚刚结束 ...

  4. 基于YOLOv3 与CRNN的中文自然场景文字检测与识别

    (欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 52CV君曾经分享过多篇关于文字检测与识别的文章: 华科白翔老师团队ECCV2018 OCR论文:Mask Tex ...

  5. OpenCV 文字检测与识别模块

    OpenCV 文字检测与识别模块 该模块在扩展模块中,需自行下载 下载地址:https://github.com/opencv/opencv_contrib/tree/4.0.0 说明文档: 文字检测 ...

  6. 白翔团队新作:借助CLIP完成场景文字检测

    作者:秃头小苏 编辑:3D视觉开发者社区 原文链接:https://arxiv.org/pdf/2302.14338.pdf 代码链接:https://github.com/wenwenyu/TCM ...

  7. 文字检测与识别项目整理

    一.文字检测 (1)方法 方法主要是基于EAST和Refinenet进行的.首先,图像经过Resnet50得到不同层的特征,然后通过Refinet的特征融合方式融合多层特征,接着,经过多任务回归预测每 ...

  8. (一)图像文字检测论文:CTPN方法

    论文传送门:Detecting Text in Natural Image with Connectionist Text Proposal Network 1 摘要 我们提出一个新颖的级联文本推荐网 ...

  9. 基于语义分割的身份证部件解析和文字检测

    概述 这个工作主要是利用之前项目的语义分割算法,顺便探索一下身份证部件解析的功能.安排实习生利用合成的身份证照片进行了语义分割的标注. 我的目的有两个:1.检测身份证上的信息是否齐全:2.确定身份证各 ...

最新文章

  1. Linux tree命令
  2. pip安装包时如何指定安装在哪个python下?
  3. shp系列(六)——利用C++进行Dbf文件的写(创建)
  4. 01_9_ServletContext
  5. Java 解析URL
  6. 2014秋应用计算机,2014年秋计算机应用基础》期末试卷A(A3版).doc
  7. flutter 日志输出,Flutter打印日志,flutter log,flutter 真机日志
  8. 第一:Git安装和使用github(超详解)
  9. 常用邮箱后缀总结,常用邮箱域名信息汇总
  10. 关于安装ANACONDA遇到的无法定位动态链接库问题
  11. linux与windows笔记本连线共享wifi
  12. 获取所有选中的复选框
  13. 2023年【安徽省安全员C证】免费试题及安徽省安全员C证证考试
  14. arm GIC介绍之一
  15. 腾讯云服务器使用中遇到的问题
  16. Mac安装多版本java
  17. sql中用EXISTS替代IN、用NOT EXISTS替代NOT IN显著变化
  18. java中获取指定时间的时间戳
  19. 全面屏的 iPhone X,雷军妥协的库克做到了
  20. TIKTOK赚钱项目到底是真是假 有哪些?

热门文章

  1. scratch编程——画笔模块画各种同心图案
  2. 水库大坝安全监测监控系统平台axure分析+辽阳市水库大坝安全检测平台+志豪未来科技有限公司+陈志豪
  3. 阿D SQL注入工具常用的一些注入命令
  4. 有道翻译 python 翻译
  5. 数组名和数组名取地址
  6. 对数组名取地址 a[ ],a
  7. 去除影像黑边-修改影像背景值-比Envi影像去除黑边-ArcGIS去除影像黑边-好用
  8. 九章云极发布YLearn因果学习开源项目;字节跳动大量招聘芯片工程师;苹果被俄法院罚款约21.6万元 | 每日大事件...
  9. Bison for Windows
  10. Java匹马行天下之教你用学汉语式方法学编程语言