车牌检测和识别,很久没关注了。作者提出了一个一体化的深度网络,同时进行车牌的检测和识别,在识别时不需要字符分割,而是使用带有CTC的RNN网络,具体的实现细节在论文的参考论文【14】中。
模型首先使用卷积层应用到输入图像,之后提取车牌proposals,接下来使用RoI池化层和MLP进行车牌检测和bbox回归,同时使用带有CTC的RNN进行牌照识别,网络的结构如图1所示:
车牌检测网络:
车牌检测判断提供的RoIs是否为车牌,两个fc层加一个dropout层将特征图转化为向量,编码的特征用于车牌打分和bbox回归。
车牌识别网络:
为了避免进行字符分割,将车牌识别作为序列标记问题,带有CTC损失的双向RNN(BRNN),用于标记序列特征,如图2所示:
对于RoI池化后的特征,先经过两个卷积层,两个卷积层之间有一个矩形池化层,这对于识别窄字符有效,这些操作将车牌区域特征变换为序列
D×L
,D=512,L=19。使用
V=(V1,V2,...,VL)
表示。
BRNN应用到V,两个相互分离的RNN,其中一个前向处理特征序列,另外一个后向处理序列。两个隐含的状态级联一起,输入具有37个输出的线性变换中。接下来是Softmax层,将37个输出转换到概率,对应26个字母,10个数字及一个非字符类的概率。经过BRNN编码,特征序列转换到与L具有相同长度的概率估计 q=(q1,q2,...,qL) ,BRNN获取了丰富的上下文信息,字符识别将会更准确。为了解决RNN训练中的梯度消失问题,使用了LSTM。LSTM定义了记忆细胞,三个乘法门,可以选择性的保存信息。
CTC层被用来做序列解码,通过BRNN的输出序列寻找具有最大概率的近似最优路径,即,
π
是标记的序列,B算子用于一处重复的标记及非字符标记,示例为:
B(a−a−b−)=B(−a−−a−bb)=(aab)
。CTC具体的细节在论文【A novel connectionist system for unconstrained handwriting recognition】。根据CTC的损失函数,车牌识别的目标函数为网络输出正确标记的负log概率,即:
整个检测和识别网络多任务损失为:
实验结果