pannet文本检测网络模型和后处理详解

PANNET文本检测模型笔记

一 网络优点和总体设计思想

优点:pannet是psenet的优化版本,一方面是在网络结构上的优化,采用了resnet18+FFPE+FFM,相对于resnet+FPN来说,网络中的参数减少了,但优化重点在于对于后处理的简化,与psenet复杂和后处理相比,pannet后处理速度快得多。

总体思想:pannet是基于实例分割的文本检测算法,检测速度快而且精度高。一般来说,基于实例分割的文本检测算法对于靠得很近的文字区域容易粘连到一起,pannet采用了和psenet基本一致的思想,预测文本核心区域和文本区域,采用从核心区域往外逐步扩展的方法解决距离近的文本区域粘连的问题,但和psenet不一样的是pannet在向外扩展的时候没有采用psenet的逐层不停往外扩展,而且在预测的矩阵中加入了一个表达距离的向量,往外扩展的时候只扩展距离在指定值之下的,并且只预测一层文字区域,相对于psenet预测n个逐步扩展大大减少了计算量。

 网络模型结构详解

总体模型结构:

总体结构可参考下图,可以分为backbone提取特征,fpem特征增强,ffm融合特征,然后输出一个通道数为6的长和宽都和输入图片相同的矩阵,其中2个通道中保存文本核心区域和文本整体区域的分割图,另外四个通道中保存的是输入图片每一个像素点对应的向量,该向量在之后的区域扩展中用于计算文字区域和核心区域的距离。

 

如上图所示:

Backbone采用resnet18,结构如下:

 

取出后面的四个block输出的矩阵,再通过一个卷积层把通道数目全部变为6,这里变为6是因为面的输出需要的通道数目是6。取出之后通过k层FPEM,FPEM的输入和输出的矩阵shape是完全一致的,结构如下:

 

如上图,取出的四个矩阵先将shape小的进行上采样,和大的进行相加,然后再以相加之后shape较大的tensor进行下采样和下一层相加,最终输入的[c2,c3,c4,c5]和输出的[c2’,c3’,c3’,c4’]shape相同,这样的网络结构可以重复叠加,重复叠加并不改变输出的shape。

FPEM除了这个结构之外,模型参数比较少,原因是因为采用了深度可分离卷积和空间可分离卷积来代替卷积,同时上采样环节采用了双线性插值的方法,所以参数较少。

FFM:

经过了resnet18和FPEM进行特征提取和增强了之后,将每一个fpem输出的[c2’,c3’,c4’,c5’]进行相加,得到[c2’’,c3’’,c4’’,c5’’],最后将[c3’’,c4’’,c5’’]进行上采样到和C2’’相同的shape,再通过一层卷积,此时的shape为(B,6,H,W),其中B是batch_size,6是固定的,H和W是输入到模型的图像的高和宽。

后处理:

经过了resnet18-->[fpem*k]-->ffm之后模型输出了一个shape为[B,6,H,W]的矩阵,后处理需要做的从这个矩阵中解析出文字区域所在的位置,一般说来就是解析出所有文字区域对应的多边形。

解析算法采用了和psenet类似的算法,从kernel的中心往外广度优先的方式扩展,但不同的是pannet只需要扩展一张特征图,psenet将输出分为了n个特征图,从kernel往外扩展需要扩展n张图,依次从小到大,这里也是pannet后处理比psenet快得多的一个重要原因;另外,pannet添加了一个相似度向量,输出矩阵的后四维为每个像素点对应的特征向量,在从kernel往外扩展的时候,只有与kernel的相似度大于预定义的阈值的时候,才会扩展这个点。

后处理算法的流程大概如下:( 定义输出矩阵为out)

  1. 取out[0]作为文本区域矩阵
  2. 取out[1]作为文本kernel区域矩阵
  3. 取out[2:]作为相似度矩阵sx
  4. 去掉不在文本区域中的kernel
  5. 用连通区域分析的方法取出所有kernel区域,得到kernel的编号和位置,并将kernel中所有点的特征向量求均值,得到代表这个kernel核心的一纬向量[k0,k1,k2,k3]
  6. 将所有的文本kernel的点的位置都添加到队列中
  7. 从队列中不断取出kernel点的位置,往上下左右四个方向扩展,从sx中取出扩展点的特征向量,如果该点在文本区域中,计算该点和kernel区域的特征向量之间的距离,如果两个向量的距离下雨预定义的阈值,则扩展该点。
  8. 得到了扩展之后的文字区域图之后,去掉面积过小和score过小的文本区域,用opencv的minAreaRect函数可获得区域的最小外接矩形(倾斜矩形)

后处理方法还涉及到一些细节的处理,大家可以看源代码:https://github.com/WenmuZhou/PAN.pytorch.git,或者在评论区提问,我会尽快在博客中补全。

如果您发现文中的错误,还请指出,我会尽快修正,感激不尽。另外,本文章的内容主要由博主看源代码理解的,不能保证100%正确,仅作参考。

 

 

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值