此篇博客记录Scene text detection深度学习相关论文笔记。
Ref:Scene Text Detection and Recognition: The Deep Learning Era
世界没有一定…才能…,just do it.
FCN
是一种semantic segmentation深度学习方法。
特点
- 使用不同的backbone networks进行实验
- 卷积化,将fully connected layers全部换成卷积,以使得可以处理任意size的输入
- 使用固定参数(FYI:bilinear interpolation且学习率为0)的transposed convolutions实现将最终的输出还原回input尺寸,通道维表示各个类别的预测
- 使用skip architecture进行fuse coarse information and fine information提高IU值,分别有FCN8s、FCN16s、FCN32s三种架构。其中FCN32s最终输出由最后的卷积层32 X upsampling得到;FCN16s是使用最后的卷积层2 X upsampling加上pooling 4的外加一层预测卷积的输出,然后进行16 X upsampling得到FCN16s的最终输出;FCN8s是使用FCN16s的1/16的加和的2 X upsampling加上pooling 3的外加一层预测卷积的输出,然后进行8 X upsampling得到FCN8s的最终dense预测输出。显然FCN8s获得最好效果,相对FCN16s提高很小,所以作者并没有继续使用FCN4s
- end-to-end training
- fine-tune
缺点
对于fine detail 处理并不是很好。
深入浅出SVM
在DSN论文中使用了SVM,SVM在DL也有应用,之前并没有怎么深入理解,趁着这篇论文的契机,重新捡起来。this section参考了李航的《统计学习方法》。
some mathematic conceptions
从数学角度谈谈自己对超平面的理解。
各种SVM
linear support vector machine in linearly separable case with hard margin maximization
linear support vector machine with soft margin maximization
non-linear support vector machine with kernel method and soft margin maximization
感知机与SVM的区别
HED Edge Detection Algorithm
multi-scale and multi-level learning
最初接触multi-scale learning是在学习SSD的时候,在SSD中multi-scale的object可以通过backbone网络后的各个多尺度检测块进行检测和学习。在HED论文中,作者对multi-scale和multi-level learning进行了总结,例如multi-scale learning可以用神经网络本身的学习过程(i.e. multiscale receptive field or multiscale feature representations learned by each layer)和multiscale input image来解释。
接下来,作者将常见的multi-scale deep learning architectures分为了4个类型:
- multi-stream architecture:典型特征是创建多个streams,多个streams使用不同的参数,拥有不同的感受野,对应了multi-scale,最后将这些输出进行concat,然后传入最后的输出层产生最终的结果。
- skip-layer network learning:典型特征是使用single stream,提取单一single stream中的不同层的feature maps,然后将他们合并,典型代表就是FCN网络,从某种意义上经典的特征提取网络FPN网络也是用了这样的结构。这个architecture和上面的architecture都是得到single prediction,这与一般流行的边检测算法不一致。
- single model on multiple inputs:基于multiple scaled input images和单个网络,在训练时,相当于使用了图像增强技术进行训练,在测试时多次的前向传播,效率极低。
- training independent networks:它是第一种architecture的变形,这里将训练多个独立的网络,不同的网络使用不同的depth以及得到不同的prediction。但是效率同样很低。
- holistically-nested networks:正如前面所述,大量的重复计算使得现存方法效率不高,这里提出的方法和方法2(例如:FCN)很相似,都是利用了单一神经网络不同层学习的多尺寸特征。利用single stream network中各个层产生side outputs,如果需要可以将这些side outputs做一个fusion操作,最终的最优结构结合了side outputs的平均和fusion结果。
- 作者为了解决high-level side output layer造成的梯度爆炸问题,以及提高模型的能力和鲁棒性,使用了多个标注器,至少3个annotators标注一个pixel为positive时,这个pixel才被标记为positive class,其余都是negative class。
- 作者也使用了image augmentation技术,将一个图片经过一些变换,得到32张图片。在测试时,使用这32张图片的预测结果的平均值作为test image的prediction并没有提高表现,所以作者在执行test时,就只是使用原始图片。
- poolling function对edge detection result影响较大
- 与FCN网络相似,这里作者也使用bilinear上采样得到original image size的side output,且上采样的weights是被固定为bilinear interpolation参数即学习率为0。在FCN论文中作者指出可以使用learned deconvolution(虽然FCN代码并没有learn deconvolution weights),但是这篇文章中作者在采用learned deconvolution layer时并没有获得显著的模型能力提升。
- HED结合了FCN(存在于HED的fusion过程,但FCN和HED的fusion处理过程是有点不同的)和DSN(存在于side output supervision,这是和FCN的single loss function完全不同的)技术,作者实验中比较了FCN8s和FCN2s(换成了cross entropy loss function)、HED without DSN,结果都比HED with DSN差,原因主要是作者将每一个网络层及其之前的层看作一个单独的network,对应的side output loss是这个network的损失函数,这样每一个side output network能够依靠损失函数优化对应scale的edge map。而且经过实验,在HED without DSN框架,由于没有对side output的控制即损失函数的引导,仅仅有最后的loss function,它更加关注large structure edge,所以一些存在于lower layer的关键的edge就缺失掉了,效果下降。下面展示一个example result:(来源于作者Github源码example页面,上面是fusion output 和 下面是五张side outputs)
- 在测试时直接使用fusion output作为prediction或者是所有outputs的平均。
总结:无论哪一种方法,我们都是基于了neural network本身的nature即hierarchical learning,利用这个nature我们能够设计得到各种architectures,这些architectures能够进行multi-scale预测。更进一步,我们并不能用feature map的size去表现multi-scale,更加根本地应从receptive field size去表现,因为即使feature map size与原图保持一致,而感受野可以很大。我们要实现multi-scale学习,可以尝试创建更大的感受野feature map,然后基于这些multi-scale receptive field maps去进行multi-scale object detection,像SSD算法、FPN、Mask-RCNN等都是这样做的。
Training & Testing
隐藏层的监督可以提高结果表现。
因为target set中标签分布的不均匀,为了进行平衡,作者使用了一种简单的cost-sensitive loss function for per-pixel,即weighted cross-entropy loss function,使用负类和正类所占比例作为权值。损失函数是建立在side-outputs和fusion output与target set的差别上的。
Comparing FCN with HED about architecture
HED与FCN相比,相同点:
- 都使用了单一神经网络的各个层学习的特征组合得到最终结果
- 在这些层后面加上额外的1x1卷积然后进行transposed convolution
- 都使用了额外的1x1卷积改变中间层的输出通道为类别数
- 在上采样部分依然使用了bi-linear采样初始化,
不同点:
- 被transposed convolution的层不一致,HED用的是卷积层输出且在层数方面使用的深度范围更深
- 与FCN8s相比,HED分别对每一层额外卷积输出结果直接transposed convolution到input image shape,然后concat这些结果,组成5通道的输出,然后传入一个卷积层输出fuse的结果(同样为单通道),接着将这个fuse结果和其他的side output 进行concat,最后对这个结果使用激活函数作为输出。而FCN8s是将最后一层的输出进行2x transposed convolution,然后加上pool4额外卷积输出,再进行2x transposed convolution, pool3同样的道理
Regard text detection as semantic segmentation problem
由于前面很多的工作是在local region进行搜索text,而且几乎所有的前面的工作都是检测horizontal or near-horizontal的text,忽略了non-horizontal区域
Features
- 使用FCN网络进行holistic的预测,不再基于局部(基于整个图片进行预测),能够有效地利用contextual information,抑制false positives
- 能够解决non-horizontal predict
- 当两个文本行距离太近的时候,作者在论文中提到简单地使用两分类的语义分割器,将导致分割的结果是粘连在一起的,意味着这样的语义分割器很困难去单独识别每一个文本行,直接使用语义分割技术是不足够用于文本检测任务的。作者解决这个问题是通过除了考虑text region location,还考虑了单个character的中心和尺寸以及相邻characters的linking orientation;
Ref
[1] J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In Proc. of CVPR, 2015.
[2] C.-Y. Lee, S. Xie, P. Gallagher, Z. Zhang, and Z. Tu. Deeply- supervised nets. In AISTATS, 2015.