TextFuseNet 个人理解与这几天的收获。

本文介绍了尝试使用TextFuseNet、ContourNet和DB三种文本检测算法,并在无训练数据情况下,基于作者提供的模型进行实验。TextFuseNet表现出色,但模型较大;ContourNet效果接近但模型过大会影响硬件性能;DB模型虽小但准确率较低。作者深入研究TextFuseNet结构,分析了语义分割、RPN和RoIAlign等关键步骤,并讨论了字符级特征的可能提取方式。同时,作者发现TextFuseNet可能不支持中文检测,并对模型大小和效率提出担忧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:因为公司想做文字检测识别,所以我试了几个检测算法,包括TextFuseNet,ContourNet, DB。因为目前没有训练数据。所以就用的是他们的作者提供的模型,在我们自己数据集上跑。目前表现最好的是TextFuseNet,模型占空间稍微有些大,准确率最高;ContourNet其实感觉上效果也不差,跟TextFuseNet差不多,但是自己数完数据比TextFuseNet差一点点,关键是模型太大了,估计芯片受不了;DB效果略差,模型不大,是最小的模型。

于是就开始看TextFuseNet论文。想着先看看别人怎么做的,没想到搜了百度和csdn ,没有一个解析,全是论文的复制,翻译。有可能是在大佬看来这篇结构比较简单吧,不值一讲?哎,靠人不如靠己。不过这篇文章也只是我自己的理解,由于能力有限,肯定有错误的地方,如您发现,还请指出,不然我不知道我错了,也会误导其他没有辨别力的人!

我是之前没怎么看深度学习的,只知道卷积是怎么运算。而且对核的比较蒙,现在也是,主要是一个维度的问题,有时候核是二维有时候是三维有时候是四维,其实我也知道四维的时候一个是核数量,一个是通道数,一个是 宽,一个是高。但三维的时候一个宽,一个高,第三个数就不知道是通道数还是核数量,因为卷积运算要求核的通道数与被卷积目标通道数相同,核数量与卷积后结果的通道数相同。算了 扯远了。还是来说文章吧。

TextFuseNet的结构,论文有图:

在这里插入图片描述
先给大家贴出来一篇文章,是讲mask-rcnn的;而TextFuseNet是基于detectron2的,detectron2是包含一些通用算法的比如faster-rcnn,mask-rcnn之类的,里面很多东西讲的很清楚,有重复的地方我就不讲了:
https://blog.csdn.net/remanented/article/details/79564045

首先,左侧输入一张图片,然后经过resnet网络和FPN处理得到特征图。处理方法见上述文章。
然后有两条路:1,特征图经过语义分割,形成新的特征图,这个网络得到的是全局级别的特征。
2,是经过RPN,ROILIGON来到detection网络和mask网络

先看语义分割。
这个文章讲了几种分割的区别:
https://blog.csdn.net/kk123k/article/details/86584216?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164756706016780357278325%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164756706016780357278325&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-2-86584216.142v2pc_search_result_cache,143v4register&utm_term=%E8%AF%AD%E4%B9%89%E5%88%86%E5%89%B2%E5%92%8C%E5%AE%9E%E4%BE%8B%E5%88%86%E5%89%B2&spm=1018.2226.3001.4187
这个文章讲了FCN网络,语义分割的一种算法,涉及全卷积之类的。
https://blog.csdn.net/qq_28266311/article/details/81458936
我实际没有做过,不知道全卷积的ground_truth是啥样的,不过最后是有特征图矩阵的。

然后再看RPN,也在讲mask-rcnn的文章里,讲得也还行,和这篇文章一起食用:https://blog.csdn.net/lanran2/article/details/54376126
很多文章都有提到1*1卷积,建议看这篇文章:
https://blog.csdn.net/qq_40211493/article/details/106709516
总而言之,RPN网络的输出是一些候选框,然后就要进行Roialign了。
Roiligon在mask_rcnn的那篇文章里讲的比较详细了。提一下双线性插值,我的理解就是,RPN的候选区分块后,有边界线嘛,映射回原图像也有边界线,边界线的元素像素提取出来,然后用他们做双线性插值。详情见
https://blog.csdn.net/gusui7202/article/details/84799535?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164757237016780255219794%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164757237016780255219794&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-2-84799535.142v2pc_search_result_cache,143v4register&utm_term=roialign&spm=1018.2226.3001.4187
得到的结果直接就是单词级的特征。看下面的图world-level features。
在这里插入图片描述
现在我们还差一个字符级的特征图。
我们刚刚做单词级时有Roialign的结果。这个就没人说了,全靠我自己理解,不知道对不对:
由上图和论文可以看出字符级特征是多个特征的和,多个特征在我看来就是每个字符的特征。先不要着急。
我理解的是,用一个东西(什么东西?)检测字符A,字符会有相应的矩形框,让候选框与矩形框求交集,再除以矩形框,如果大于0.8(某个阈值),就保留。并把检测A的时候生成的特征图拿出来,作为字符A的特征图,然后依次BCDEFG012345之类的,就有一堆特征图了,然后再合成一个特征图。就是我们的字符级特征图了。勉强跟RPN扯上关系了。
但图中画的是多个字符级特征经过roialign直接得到,跟我说的不一样。但它的画的语义分割也有roialign。。。还有FPN的结果直接拿去Roialign,所以我严重怀疑这个图画的有问题,跟他前面的图都不一致了。。。这也是我“敢”这么猜测字符级特征来源的勇气来源。
但其实还有一个问题就是textfusenet是可以检测汉字的,汉字那么多。。如果像我这么搞,不知道猴年马月了。。。所以我又对我这个猜测保持怀疑态度。
哦…对了,这里只是检测,并不是识别,所以不必关心字符到底是哪个,只需要关心他是不是字符。就像我们遇到一个不认识的汉字,但我们最少知道他是一个字,检测算法学习的应该就是这种能力。但这样想就产生新的问题了, 如何产生多个字符级特征。
在这里插入图片描述
你们看这个图下面的几层红圈圈起来的,每一层都是一个完整的图像的特征,里面有1个字符单独出来,所以我是那么猜的,而不是猜测对某一小块区域进行字符级特征提取。

在看CNN时,好像说CNN的参数优化也是反向传播,我在看全连接神经网络时感觉DP算法与梯度下降有异曲同工之妙,但是我想不到CNN如何反向传播。
如果是图像级的,那因变量应该是个值,最后的几个全连接层每个位置是自变量,这样就跟最基础的神经网络相似了,然后是特征图转全连接层,这个是直接移动,没什么参数,那特征图与特征图之间,个人理解上层特征图作为因变量,下层特征图作为自变量,中间卷积核作为参数。因为卷积运算有自己的公式,所以自变量与因变量之间也可写成表达式,就可以优化了。哎,学习全靠直觉跟猜。。。。。。。。太难了。

先写这么多吧,以后有啥补充的再改。我先去看看代码,也许有新的线索。


更新:
刚刚在github看了一些别人遇到的问题和作者的回复。貌似TextFuseNet 不可以检测中文。看了example_annotations 后发现他一共有63个类,“text”单词 + “0~9” 10个数字+26*2个英文字母。
所以前面也没什么“汉字数量太多,训练模型复杂”的担忧了 = = 。 只不过光有英文的模型已经很大了,再加上汉字的,岂不是要爆炸。
但是CTW数据集的模型好像可以检测中文。。但是没有相应的example_annotations.气死我了;从图片来看,是没有分割这一部分的,检测到的结果基本全是“text”类型;我有一张图片的两个检测区域有重合,不知道能不能改善改善=。= 。

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值