OCR 文字检测(Differentiable Binarization --- DB)

这篇具有很好参考价值的文章主要介绍了OCR 文字检测(Differentiable Binarization --- DB)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

百度飞桨(PaddlePaddle) - PaddleOCR 文字识别简单使用

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理(离线部署)
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS)
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)推荐

图像二值化

OCR 文字检测(Differentiable Binarization --- DB)
OCR 文字检测(Differentiable Binarization --- DB)
OCR 文字检测(Differentiable Binarization --- DB)

图像二值化( Image Binarization),指将图像上的像素点灰度值设为0或255,将整个图像呈现出明显的黑白效果过程,二值图像每个像素只有两种取值:要么纯黑,要么纯白
图像二值化,有利于图像的进一步处理, 使图像变得简单,数据量减少(256位的灰度图,共有256级,变成黑白图像后,只有2级),能凸显出感兴趣的目标轮廓,然后进行二值图像的处理与分析
阈值法是指选取一个数字,大于它就视为全白,小于它就视为全黑,0代表全黑,255代表全白
所有灰度大于或等于阀值的像素,被判定为属于特定物体,其灰度值为255表示,
否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的特体区域

OpenCV (固定伐值)

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2

# Load image
img = cv2.imread('images/006.jpg')

# Apply thresholding
binary = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)[1]

save_file = './ocr_result/binary_image.jpg'
# Save output image
cv2.imwrite(save_file, binary)

# 显示图片--二分值
img1 = mpimg.imread(save_file)
plt.figure(figsize=(10, 10))
plt.imshow(img1)
plt.axis('off')
plt.show()

OCR 文字检测(Differentiable Binarization --- DB)

文本检测

OCR 文字检测(Differentiable Binarization --- DB)
基于分割的做法(如蓝色箭头所示):
传统的pipeline使用固定的阈值对于分割后的热力图进行二值化处理【见上文】

  • 首先,它们设置了固定的阈值,用于将分割网络生成的概率图转换为二进制图像
  • 然后,用一些启发式技术(例如像素聚类)用于将像素分组为文本实例

DB的做法(如红色箭头所示):
而本文提出的pipeline会将二值化操作嵌入到分割网络中进行组合优化,会生成与热力图对应的阈值图,通过二者的结合生成最终的二值化操作。

  • 在得到 分割map后,与网络生成的threshold map一次联合做可微分二值化得到二值化图,然后再经过后处理得到最终结果。
  • 将二值化操作插入到分段网络中以进行联合优化,通过这种方式,可以自适应地预测图像每个位置的阈值,从而可以将像素与前景和背景完全区分开。 但是,标准二值化函数是不可微分的,因此,我们提出了一种二值化的近似函数,称为可微分二值化(DB),当训练时,该函数完全可微分。将一个固定的阈值训练为一个可学习的每个位置的阈值

标签生成

首先看label是如何生成的,网络要学习的目标gt 与 threshold map是怎样的生成和指导网络去训练的,知道threshold_map的label值跟gt的值,我们才能更好地去理解“可微分二值化”是如何实现的;

OCR 文字检测(Differentiable Binarization --- DB)
给定一张文字图像,其文本区域的每个多边形由一组线段描述:

\(\ G = \{S_k\}^n_{k = 1}\)

其中,\(G\)为标注的 gt,\(S\) 为gt的边,\(n\)为顶点的数量 , 将\(G\)向内偏移\(D\),形成\(G_s\),在预测图上将\(G_s\)内的值设定为1,\(G_s\)外设定为0

使用Vatti clipping algorithm (Vati 1992)缩小多边形,对 gt 多边形(polygon) 进行缩放;收缩偏移量(offset of shrinking)\(D\) 可以通过周长 \(L\) 和面积 \(A\) 计算:

\(\ D = \frac {A(1-r^2)}{L}\)

其中,\(r\) 是缩放比例,依经验一般取值为 0.4

  • 这样我们就通过 gt polygon 形成 缩小版的 polygon 的gt mask图 probability map(蓝色边界)
  • 以同样的 offset D 从多边形polygon \(G\) 拓展到 \(G_d\) ,得到如图中 threshold_map中的(绿色边界)
    threshold_map中由 \(G_s\)\(G_d\) 之间形成了一个文字区域的边界。

一组图来可视化图像生成的结果:
OCR 文字检测(Differentiable Binarization --- DB)
我们可以看到 probability map 的 gt 是一个完全的0,1 mask ,polygon 的缩小区域为1,其他背景区域为0;
但是在threshold_map文字边框值并非0,1;
使用PyCharm的view array 我们能看到threshold_map中文字边框的数值信息:
OCR 文字检测(Differentiable Binarization --- DB)
文字最外圈边缘为0.7,靠近中心区域是为0.3的值。(0.3-0.7为预设的阈值最大最小值)。我们可以看到文字边界为阈值最大,然后根据文字实例边缘距离逐渐递减。
知道threshold_map的label值跟gt的值,我们才能更好地去理解“可微分二值化”是如何实现的;

获取边界框

OCR 文字检测(Differentiable Binarization --- DB)

整体流程如图所示:

  • backbone网络提取图像特征
  • 类似FPN网络结构进行图像特征融合后得到两个特征图 probability map 跟 threshold map
  • probability map 与threshold map 两个特征图做DB差分操作得到文字区域二分图
  • 二分图经过cv2 轮廓得到文字区域信息

首先,图片通过特征金字塔结构的backbone,通过上采样的方式将特征金字塔的输出变换为同一尺寸,并级联(cascade)产生特征F;然后,通过特征图F预测概率图(P — probability_map)和阈值图(T — threshold_map); 最后,通过概率图P和阈值图T生成近似的二值图(B — approximate_binary_map)。

在训练阶段,监督被应用在阈值图、概率图和近似的二值图上,其中后两者共享同一个监督;在推理阶段,则可以从后两者轻松获取边界框。

可微的二值化(Differentiable binarization)

传统的阈值分割做法为:
OCR 文字检测(Differentiable Binarization --- DB)
$\ B_{i,j} $ 代表了probability_map中第i行第j列的概率值。这样的做法是硬性将概率大于某个固定阈值的像素作为文字像素,而不能将阈值作为一个可学习的参数对象(因为阈值分割没办法微分进行梯度回传)

可微分的二值化公式:
OCR 文字检测(Differentiable Binarization --- DB)
首先,该公式借鉴了sigmod函数的形式(sigmod 函数本身就是将输入映射到0~1之间),所以将概率值 $\ P_{i,j} $ 与阈值 $\ T_{i,j} $ 之间的差值作为sigmod函数的输出,然后再经过放大系数 \(k\), 将其输出无限逼近两个极端 0 或者1;
其中, \(\hat{B}_{i,j}\) 是近似的二值化图 ,\(T_{i,j}\) 是阈值图上由网络训练时生成的值 \(k\) 为放大因子,依经验设定为 50
带有自适应阈值的可微分二值化不仅有助于把文字区域与背景区分开,而且还能把相近的实例分离开来。
OCR 文字检测(Differentiable Binarization --- DB)
我们来根据label generation中的gt 与 threshold_map来分别计算下。经过这个可微分二值化的sigmod函数后,各个区域的像素值会变成什么样子:
文字实例中心区域像素:

  • probability map 的gt为 1
  • threshold map的gt值为0.3
    OCR 文字检测(Differentiable Binarization --- DB)

如果不经过放大系数K的放大,那么区域正中心的像素如上图所示经过sigmod函数后趋向于0.6左右的值。但是经过放大系数k后,会往右倾向于1。

文字实例边缘区域像素:

  • probability map 的gt为 1
  • threshold map的gt值为0.7
    OCR 文字检测(Differentiable Binarization --- DB)
    如果不经过放大系数K的放大,那么区域正中心的像素如上图所示经过sigmod函数后趋向于0.5左右的值。但是经过放大系数k后,会往右倾向于1。

文字实例外的像素:

  • probability map 的gt为 0
  • threshold map的gt值为0.3
    OCR 文字检测(Differentiable Binarization --- DB)
    经过放大系数k后,激活值会无限趋近于0; 从而实现二值化效果。
    解释了DB利用类似sigmod的函数是如何实现二值化的效果,那么我们来看其梯度的学习性:

传统二值化是一个分段函数,如下图所示:
图(a):标准二值化和可微二值化的对
图(b):\(x<0\) 的部分为正样本预测为负样本的情况,可以看到,增益因子k将梯度进行了放大
图(c):\(x>0\) 的部分为负样本预测为正样本时,梯度同样也被放大了。
OCR 文字检测(Differentiable Binarization --- DB)

SB(Standard Binarization)其梯度在0值被截断无法进行有效地回传。
DB(Differentiable Binarization)是一个可微分的曲线,可以利用训练数据+优化器的形式进行数据驱动的学习优化。

我们来看其导数公式,假设 \(l_+\) 代表了正样本, \(l_-\) 代表了负样本,则:
OCR 文字检测(Differentiable Binarization --- DB)
根据链式法则我们可以计算其loss梯度

百度paddle中提供的接口可以实现下面的效果:

OCR 文字检测(Differentiable Binarization --- DB)
OCR 文字检测(Differentiable Binarization --- DB)文章来源地址https://www.toymoban.com/news/detail-438060.html

摘自: https://zhuanlan.zhihu.com/p/235377776 https://www.cnblogs.com/monologuesmw/p/13223314.html#top

到了这里,关于OCR 文字检测(Differentiable Binarization --- DB)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)

    目录 安装 Docker 安装 PaddleOCR 安装 准备PaddleServing的运行环境, 模型转换 Paddle Serving pipeline部署 重启 测试 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理(离线部署) 百度飞桨(Paddl

    2024年02月07日
    浏览(46)
  • 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)

    目录 Paddle Serving服务化部署实战 准备预测数据和部署环境 环境准备 安装 PaddlePaddle 2.0 安装 PaddleOCR 准备PaddleServing的运行环境, 模型转换 Paddle Serving pipeline部署 确认工作目录下文件结构: 启动服务可运行如下命令: 测试 Python发送服务请求: Postman 发送请求 参数调整 百度飞

    2024年02月07日
    浏览(58)
  • 基于百度飞桨PaddleOCR的图片文字识别

    PaddleOCR项目源码:https://github.com/PaddlePaddle/PaddleOCR 飞桨开源文字识别模型套件PaddleOCR,目标是打造丰富、领先、实用的文本识别模型/工具库。最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别;支持倾斜、竖排等多种方向文字识别;支持GPU、CPU预测;用户既可

    2024年02月10日
    浏览(44)
  • 百度飞桨(PaddlePaddle) - PaddleOCR 文字识别简单使用

    百度飞桨(PaddlePaddle)安装 OCR 文字检测(Differentiable Binarization --- DB) 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理(离线部署) 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于

    2024年02月04日
    浏览(52)
  • 百度OCR通用文字识别的使用

    目录 1、 首先进入百度AI开放平台,注册百度智能云账号,进入控制台并创建应用 1.1、 登录百度AI开放平台 1.2、 进入控制台-文字识别 1.3、 创建应用 1.4、 查看帮助文档 2、python下载baidu-aip库 3、两种方式调用api发送请求,获取文字识别结果 3.1、 通过AipOcr交互 3.1.1、 新建A

    2024年02月07日
    浏览(43)
  • 【实操】Java+百度ocr,实现图片识别文字小工具

    图片识别文字,咱用java也可以 通过 java+百度ocr ,实现一个截图或上传图片, 图片识别文字的小工具 。并通过 exe4j工具 将jar包封装成exe可执行桌面文件,方便使用及学习。 一位特别的老友即将 在2023年10月26日 年满 30周岁 ,愿 平安喜乐 公众号:【JavaDog程序狗】 关注公众号

    2024年02月08日
    浏览(45)
  • SpringBoot项目(百度AI整合)——如何在Springboot中使用文字识别OCR入门

    前言:本系列博客尝试结合官网案例,阐述百度 AI 开放平台里的组件使用方式,核心是如何在spring项目中快速上手应用。 本文介绍如何在Springboot中使用百度AI的文字识别OCR 其他相关的使用百度AI的文章列表如下: 如何在Springboot中使用语音文件识别 ffmpeg的安装和使用 1.从官

    2024年02月02日
    浏览(38)
  • C# Onnx 百度飞桨开源PP-YOLOE-Plus目标检测

    目录 效果 模型信息 项目 代码  下载 C# Onnx 百度飞桨开源PP-YOLOE-Plus目标检测 Inputs ------------------------- name:image tensor:Float[1, 3, 640, 640] name:scale_factor tensor:Float[1, 2] --------------------------------------------------------------- Outputs ------------------------- name:multiclass_nms3_0.tmp_0 tensor:Fl

    2024年02月04日
    浏览(39)
  • OCR文字检测与识别系统:融合文字检测、文字识别和方向分类器的综合解决方案

    前两章主要介绍了DBNet文字检测算法以及CRNN文字识别算法。然而对于我们实际场景中的一张图像,想要单独基于文字检测或者识别模型,是无法同时获取文字位置与文字内容的,因此,我们将文字检测算法以及文字识别算法进行串联,构建了PP-OCR文字检测与识别系统。在实际

    2024年02月10日
    浏览(50)
  • Opencv项目实战:01 文字检测OCR(1)

    由图我们可知,对图片进行了数字和字母的识别。 (1)下载Tesseract 点击此网址:tesseract-ocr alternative download - Browse Files at SourceForge.net 我下载的是第四个版本,下载后是zip包的形式,压缩后可安装,选择路径可更改,否则会在默认的C:\\\\Program Files里面,没有什么大的影响。 (

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包