基于SSD的图片文本检测及快速方法



基于SSD的图片文本检测及快速方法

算法概述

SSD算法是一种直接预测bounding box的坐标和类别的object detection算法,没有生成proposal的过程。针对不同大小的物体检测,传统的做法是将图像转换成不同的大小,然后分别处理,最后将结果综合起来,而ssd利用不同卷积层的feature map进行综合也能达到同样的效果。而相比较于其他检测算法, R-CNN系列的检测速度慢,YOLO的mAP性能差,而SSD消除了中间的 bounding boxes、pixel or feature resampling 的过程,同时,在 feature map 上使用小的卷积核,去 predict 一系列 bounding boxes 的 box offsets,这样就在提升速度的同时保证了精度,适合用在嵌入式上。


算法详解

SSD算法在训练的时候只需要一张输入图像及其每个object的ground truth boxes。基本的网络结构是基于VGG16,在ImageNet数据集上预训练完以后用两个新的卷积层代替fc6和fc7,另外对pool5也做了一点小改动,还增加了4个卷积层构成官方的网络。
摘自论文

在训练阶段,算法在一开始会先将default box(是指在feature map的每个小格(cell)上都有一系列不同大小,不同横纵比的box)和ground truth box进行匹配,比如蓝色的两个虚线框和猫的ground truth box匹配上了,一个红色的虚线框和狗的ground truth box匹配上了。所以一个ground truth可能对应多个default box。在预测阶段,直接预测每个default box的偏移以及对每个类别相应的得分,最后通过NMS得到最终的结果。并且default box在不同的feature层有不同的scale,在同一个feature层又有不同的aspect ratio,因此ssd基本上可以覆盖输入图像中的各种形状和大小的object。

项目实现

一是由于检测目标相对较小(比如车牌),并且ssd在低层的feature map,感受野比较小,高层的感受野比较大,所以我们选择将conv6-2之后的层去掉,这样既不影响精度也满足带宽要求;二是ssd的default box拥有不同尺度,我们修改了其尺度变换使其符合车牌实际尺度;三是类别,ssd官方类别有20类,而我们的车型项目大概有6类,车牌只有一类,所以我们对类别进行了删减.

流程图



Created with Raphaël 2.1.0








数据输入:data层





特征提取:conv1_1,conv1_2,conv2_2,conv3_2,


conv4_3,conv5_2,fc6,fc7,conv6_2及对应Relu和Pooling层





回归:conv4_3_norm_mbox_loc,fc7_mbox_loc,conv6_2_mbox_loc 分类:conv4_3_norm _mbox_conf,fc7_mbox_conf,conv6_2_mbox_conf





数学运算





通道合并:Concat层





损失函数:Softmax层(同时决定default box)





输出:DetectionOutput