目录
原文地址:https://blog.csdn.net/qq_14845119/article/details/81539155
论文地址:Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework ICCV 2017文章
Github地址:https://github.com/MichalBusta/DeepTextSpotter
1. 概述:
提出了一种场景文本定位和识别方法。 新颖性包括:在单个端到端传递的训练文本检测和识别,识别CNN的结构和其输入层的几何形状保留文本的表征,并使其分辨率适应数据。所提出的方法在两个标准数据集(ICDAR 2013和ICDAR 2015)上实现了端到端文本识别的最先进准确度,同时比竞争方法快一个数量级 - 整个流程以10帧运行每秒在NVidia K80 GPU上。
整体流程,输入图片先进行一个基于YOLOv2 的全卷积网络,然后经过RPN网络,输出经过NMS过滤后的ROI边框,然后根据该边框在最后一层卷积层上通过类似于STN的方式映射出高度固定的patch块。然后基于ctc进行识别。再根据识别的结果进行NMS过滤,得到最终结果。
这里在训练的时候,只取预测边框和targets的IOU最大的边框进行loss计算。而在测试的时候,如果也这样做,会出现漏检的情况。因此修改为通过一个阈值的限制,只要高于固定阈值的都会进行前向传播,后续再将得到的结果进行合并。
2. FCN:
该基础结构采用YOLOv2 的结构,使用了18个卷积层,5个pooling层。假设输入图片为H*W*3,最终得到的featuremap大小为(W/32)* (H/32)*1024
3. RPN:
首先RPN模块的anchor还是采用YOLOv2 中使用的基于kmeans的方式,在训练集合上生成的包含了各种aspect ratio和scale的一共14个anchor,即k=14。
RPN模块会输出预测的中心坐标rx,ry,宽高rw,rh,角度rseita,得分rp。一共6个维度的特征。加上anchor的维度,最终将会输出(W/32)* (H/32)*6k 的特征图。
坐标的预测方式和Yolov2也一样。角度seita是Yolov2中没有的。
如上式所示,rx,ry,rw,rh,rseita为需要预测的值。
这里预测中心坐标rx,ry,和宽高rw,rh来生成最终的边框。最终的x,y,w,h分别表示中心坐标相对于anchor中心的倍数和宽高相对于anchor宽高的倍数。
cx,cy为框的中心坐标所在的grid cell 距离左上角第一个grid cell的cell个数。
rx,ry为预测的边框的中心点坐标。
σ()函数为logistic函数,将坐标归一化到0-1之间。最终得到的bx,by为归一化后的相对于grid cell的值。
rw,rh,为预测的边框的宽,高。求exp函数后会得到anchor的不同倍数,包括小于1和大于1的。
aw,ah为anchor的宽,高。
seita等于rseita,为直接预测的角度。角度区间为(-pi/2,pi/2)
4. Bilinear Sampling :
该模块主要进行旋转,平移,缩放的仿射变换。通过该变换,将ROI区域都归一化到固定32个像素的高度。类似于stn的操作。和roi pooling操作还是有区别。roi pooling只能得到固定大小的ROI区域,但是Bilinear Sampling 可以得到固定高度,宽度不一定的ROI区域,很好的保证了aspect ratio。缺点就是,这块没法像roi pooling那样走并行了。
5. Text Recognition :
识别模块的网络结构如下:
Loss使用的是ctc loss。
6. 总结:
(1)以前的检测框架都是利用检测的分数来过滤检测框。但是本文利用识别结果的分数来对检测框进行过滤,思想很好。更好的使用检测辅助识别,识别辅助检测。这样做的优势就是只需要一个RPN模块就可以了,而不需要额外的后续的fast RCNN模块了。自然网络整体效率就会大大提升。
(2)整体RPN检测模块+ctc识别模块,相比mask text spotter只能识别26个字母和10个数字更加具有通用性。