PixelLink: Detecting Scene Text via Instance Segmentation,该文章发表在AAAI2018上,代码地址:https://github.com/ZJULearning/pixel_link

该篇文章灵感来自于图像分割算法和之前CVPR2017的SegLink,看过SegLink和EAST这两篇文章的话,这篇文章其实很容易理解。

在介绍文章思想之前先介绍一下作者做这个工作的想法,作者认为有些方法比如EAST,采用了框的回归又结合了图像分割(EAST中提取到的score map就是分割结构),实际上图像分割已经能给出文本的位置了,没有必要使用框进行回归,所以文章只使用了分割的方法没有采用框回归进行文本定位。但是文字检测不同于图像分割,文字检查要的定位更为的精确,仅仅采用分割的方法不能精确的将距离近的文本很好的定位,所以采用SegLink中link的思想,在预测中不仅预测出哪些像素是否为文本,还要预测出是文本的像素他们之间是否能连接在一起组成一个好的文本框(比如,有两个像素都被检查成文本像素,但是他们是两个文本框的像素,他们之间的link的概率会较小),从而输出更为精确的检查区域。

看懂上面这段思想后,下面内容就很好理解了。大致流程如下图所示

一、网络结构

文中网络的backbone采用的是VGG16,并将最后两层全连接层改为卷积层,结构采用的是FCN的结构,文章尝试了两种feature map的融合结构,分别取{conv2_2, conv3_3, conv4_3, conv5_3, fc_7(这里其实是第七层卷积层)}进行融合和取{conv3_3, conv4_3, conv5_3, fc_7(第七层卷积层)}进行融合。输入为图片,输出为18通道的结果,其中2通道表示预测的每个像素是否为文本,16通道表示每个像素与它八个邻域是否需要连接的概率图。
网络结构如下图所示(图中的fc6和fc7为卷积层),图中的加号就是feature map相加。

在得到上述的18个通道后,先是使用了两个阈值分别对像素预测结果和link预测的结果进行过滤,然后对于预测为正样本的像素结合link通道的预测结果将所有像素连接起来(因为两个像素有两个link,这里连接的规则是,如果有一个link达到阈值,则将这两个像素连接起来),这样就能得到文本检测的区域,最后使用OpenCV中的minAreaRect(该函数是输出包围点集的最小矩形,该矩形可以是旋转的)。这样就可以输出一些列的文本框了,但是文章为了防止一些噪声的影响,将检查结果中短边小于10或者面积小于300的文本框进行滤除,从而得到最终的文本检查结果。

二、标签(Ground Truth)的生成

标签的生成比较简单,在文本框里的像素为正样本,如果有文本框重叠的问题,重叠区域为负样本。link的标签也很容易理解,如果两个像素来自同一个文本框那么他们之间的link为正样本,其他为负样本。要注意的是,这里groundtruth的大小不是图像大小,具体大小与网络输出大小有关,也就是和网络的输出为同一大小。

三、损失函数的定义

损失函数定义如下
L=λLpixel+LlinkL=\lambda L_{pixel} + L_{link}L=λLpixel​+Llink​
因为link的结果是基于正样本的pixel来计算的,所以λ\lambdaλ这里设置为2.0。

像素的损失计算
因为图像中的文字区域有大有小,如果所有像素的权重是一样的,这样做对小的文字不公平,会导致训练结果效果不好。对此不同的文字区域中的像素的权重是不一样的,具体设置方法如下。
假设一张给定的图像中有N个文本框,那么每个文本框的权重都相等且都设为BiB_{i}Bi​,BiB_{i}Bi​的计算方法如下
Bi=SN,S=∑iNSi,∀i∈1,⋯,NB_{i}=\frac{S}{N}, S=\sum^{N}_{i}S_{i}, \forall_{i}\in {1,\cdots,N}Bi​=NS​,S=∑iN​Si​,∀i​∈1,⋯,N
其中,对于第i个文本框来说Si=areaS_{i}=areaSi​=area,那么该框里面每个像素的权重都设为wi=BiSiw_{i}=\frac{B_{i}}{S_{i}}wi​=Si​Bi​​

按照上述规则正样本中的像素权重就可以确定了,而且小文本框权重更大,反之亦然。之后采用Online Hard Example Ming(OHEM)选出的负样本中像素的权重都设为1。

通过上述两个规则就可以得到一个权重矩阵WWW,下结合这个矩阵就可以计算出LpixelL_{pixel}Lpixel​,计算方法如下
Lpixel=1(1+r)SWLpixelCEL_{pixel}=\frac{1}{(1+r)S}WL_{pixel_CE}Lpixel​=(1+r)S1​WLpixelC​E​
其中LpixelCEL_{pixel_CE}LpixelC​E​是通过交叉熵(Cross-Entropy)损失函数求得像素是否为文本的损失函数矩阵。

连接的损失计算
连接预测的损失是按照link是否为正负样本分开计算的,而且只计算像素为正样本的连接。计算方法如下:
Llink_pos=Wpos_linkLlink_CEL_{link\_pos}=W_{pos\_link}L_{link\_CE}Llink_pos​=Wpos_link​Llink_CE​
Llink_neg=Wneg_linkLlink_CEL_{link\_neg}=W_{neg\_link}L_{link\_CE}Llink_neg​=Wneg_link​Llink_CE​
其中,Llink_CEL_{link\_CE}Llink_CE​是对link的交叉熵损失计算矩阵。Wpos_linkW_{pos\_link}Wpos_link​和Wneg_linkW_{neg\_link}Wneg_link​是link的权重,它们的计算方式如下所示
Wpos_link(i,j,k)=W(i,j)∗(Ylink(i,j,k)==1)W_{pos\_link}(i, j, k)=W(i, j)*(Y_{link}(i, j, k)==1)Wpos_link​(i,j,k)=W(i,j)∗(Ylink​(i,j,k)==1)
Wneglink(i,j,k)=W(i,j)∗(Ylink(i,j,k)==0)W_{neg_link}(i, j, k)=W(i, j)*(Y_{link}(i, j, k)==0)Wnegl​ink​(i,j,k)=W(i,j)∗(Ylink​(i,j,k)==0)
其中,W就是在像素损失计算中介绍的像素的权重,k表示与像素(i,j)相邻的第k个像素,YlinkY_{link}Ylink​表示link的标签值。

最后连接的损失计算如下式所示
Llink=Llink_posrsum(Wpos_link)+Llinknegrsum(Wneg_link)L_{link}=\frac{L_{link\_pos}}{rsum(W_{pos\_link})}+\frac{L_{link_neg}}{rsum(W_{neg\_link})}Llink​=rsum(Wpos_link​)Llink_pos​​+rsum(Wneg_link​)Llinkn​eg​​
其中rsum表示reduce sum。

到这里PixelLink算法基本介绍完了。

中文本定位与识别的评测方法

欢迎加入OCR交流群:785515057(此群已满)
欢迎加入OCR交流群2:826714963

PixelLink: Detecting Scene Text via Instance Segmentation算法详解相关推荐

  1. 目标检测 RCNN算法详解

    原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...

  2. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

  3. Faster RCNN算法详解

    Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal ne ...

  4. DES(Detection with Enriched Semantics)算法详解

    DES算法详解 论文背景 实验结果 算法简介 算法结构 语义信息增强过程 与之前算法的区别 算法细节 Semantic enrichment at low level layer Semantic e ...

  5. 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现

    [更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...

  6. 计算机图形几何算法详解勘误

    一直在看<计算机图形几何算法详解>这本书,但是在用的过程中发现了一些错误,一直以为是自己的错误,后来在网上找到了这本书的勘误信息,不过是英文原版的,但是还是想贴出来,以便查找 07 Jul ...

  7. 离线强化学习(Offline RL)系列3: (算法篇) AWAC算法详解与实现

    [更新记录] 论文信息:AWAC: Accelerating Online Reinforcement Learning with Offline Datasets [Code] 本文由UC Berk ...

  8. 2. IMU原理及姿态融合算法详解

    文章目录 2. IMU原理及姿态融合算法详解 一.组合 二. 原理 a) 陀螺仪 b) 加速度计 c) 磁力计 三. 旋转的表达 a) 欧拉角 b) 旋转矩阵 c) 四元数 d) 李群 SO(3)\t ...

  9. BiDi 算法详解及应用(一)

    在开始本节内容之前,先对这个系列做一个简要的说明,在此系列里面会详细介绍以下几点内容: 什么是BiDi Unicode 的 BiDi 算法详解 ICU 对算法的实现和工业级应用 Html4 和 Htm ...

  10. Apollo6.0代码Lattice算法详解——Part5: 生成横纵向轨迹

    Apollo6.0代码Lattice算法详解--Part5: 生成横纵向轨迹 0.前置知识 1.涉及主要函数 2.函数关系 3.部分函数代码详解 3.1 lattice_planner.cc中代码部分 ...

最新文章

  1. 特征工程(二)TfidfVectorizer
  2. Spring Cloud(二) 配置Eureka Client
  3. 【caffe解读】 caffe从数学公式到代码实现3-shape相关类
  4. Qt智能指针--QScopedPointer
  5. Mysql datadir change on ubuntu
  6. UVA11313 Gourmet Games【数学】
  7. 基于jquery实现身份证验证
  8. macOS 输入法快速切换工具 —— KeyboardHolder
  9. 云真机可以帮助测试解决什么问题?
  10. Intel VT学习笔记(一)—— 基础知识支持检测
  11. 飞凌嵌入式-基于国产A40i核心板-医用呼吸机解决方案
  12. 商汤研究院基础视觉组正式员工(校招/社招)实习生长期招聘
  13. E+H悬浮物测量传感器CUS51D-AAD1A3
  14. python读取、保存图片的方法
  15. The_Last_Geass
  16. 学习Docker之Docker初体验 简单用例---SpringBoot集成Docker的部署、发布与应用
  17. 学会map、reduce、filter这三个函数,让你Python代码看起来更有逼格!
  18. jenkins docker 编译verify出现crash的问题
  19. uni-app聊天功能输入框删除emoji表情
  20. gts250 linux驱动下载,英伟达GTS250显卡驱动下载_GTS250显卡驱动官方版下载 - 系统之家...

热门文章

  1. node-sass 安装失败问题 2022最新版
  2. 基于TCP/UDP的NIO服务端/客户端代码实现damo(java)
  3. Java包装类相关知识点
  4. matlab 读取midi,matlab miditoolbox中的midi文件生成函数的改进
  5. Go语言学习:Channel
  6. 人工智能区块链智能合约_通过业务规则使您的区块链智能合约更智能
  7. SpringBoot系列教程(六十七):SpringBoot自定义Fastjson为JSON消息转换器
  8. BC #38 / HDU5208 Where is Bob · 数位dp
  9. 计算机主机后面的usb哪个不可接入,电脑的USB接口不能使用了怎么回事?主板usb接口全部失灵的解决方法...
  10. 机器学习:特征选择之RFormula(SparkMLlib中的RFormula)