yolov3损失函数_基于YOLOv3的文本检测

文本检测的特点:

1,文本行的长宽比变化范围较大,汉字的长宽比接近1:1,横排分布与竖排分布的文本行长宽比差异非常大。

2,文本行具有方向性,文本可水平,垂直,或其他角度分布。

3,存在艺术字,这些字的排列方式可能是弯曲的。

4,字体类型非常丰富。

为什么是YOLOv3?

yolov3在工业界运用的比较广泛,是一个鱼与熊掌兼得的检测算法,主要应用在一般性的目标检测任务中,比如行人检测,物体检测等。在了解了文本检测的特点后,我们很容易对算法做出改动,使之可以适应文本目标检测的任务,主要改动点,后面会逐一介绍。

YOLOv3的检测流程:

1, 网络的backbone部分提取输入图片的特征。

2,neck部分通过top-down机制,对特征进行融合,并转化成位置信息,以及类别信息。

3,采用NMS对预测的bboxes 进行去重,并输出最后的结果。

网络结构:

backbone:

backbone部分提出了darknet53结构,该结构在推理阶段具有更快的速度。

900b01c7976af7dadde80b221322e448.png
darknet53网络参数

DarkNet53属于残差结构模型,与ResNet不同的是,这里每一个残差模块,会先利用1x1的卷积对通道进行压缩,然后再连接3x3的卷积,如此一来,卷积层的参数量可大幅度减少,(1x1x256x128+3x3x128x256 vs 1x1x512x256+3x3x256x256),在推理过程中,速度也会有一定的提升。

neck:

neck部分采用的是FPN结构,如下图:

1e537aed0457dbbfd6c004bd8a693afa.png
Neck结构

该结构接受三个输入,每个输入对应一个输出,它们分别来自于网络的浅层特征,中间层特征以及深层特征;而其对应的输出为目标位置以及目标类别,由于神经网络的特性,三个输出对检测目标的尺寸各有偏好,深层特征感受大,语意信息丰富,适合检测大目标,中间层特征适合检测中等目标,而浅层特征位置信息精确,适合检测小目标。

神经网络如何表达目标位置信息?

通过卷积神经网络将输入MxMx3的图片映射为NxNxC的feature map,可以将feature map看做为一个NxN的网格,以网格的每一个点为中心,并结合预先定义的anchor,通过如下公式:

b9821138027e7377c39d90dfff8bb647.png
box表示

在每个网格点处,预测多个不同尺寸的四边形,其中,tx,ty,tw,th为网络回归的参数,即位置中心以及位置长宽的偏移量,以及缩放量。利用四边形的中心位置以及长宽信息,可以轻松地转化得到(x1,y1,x2,y2)的位置表达方式。

loss:

通常使用(x1,y1,x2,y2)表示目标的位置(分别表示四边形的左上角位置以及右下角位置),因此回归任务的目标就是尽可能的让网络学习到每一个object的(x1,y1,x2,y2).

如何定义损失函数?

我们需要最小化标注位置以及网络预测位置的差异,即让左上角的预测位置位置以及右下角的预测位置位置尽可能与标注位置重合。

原论文中使用的是MSE,但通常使用smooth l1作为损失函数:

0ae0c4945b17f55d530b5d9b94921a93.png
smooth l1 loss

好处在于当预测位置与标注位置相差较大时,梯度不会太大(太大可能让网络发散);而当预测位置与标注位置相差较小时,梯度也不会太小(太小让网络的学习效率低下,较难收敛)。

但是,smooth l1的损失把回归目标中的两个顶点视作是独立的,实际上可能存在一定的关联性,此外,在目标检测中,在评价过程中采用的IoU作为准则,在smooth l1 loss 相同的情况下,IoU差异可能很大(可任意构造几个顶点,即可满足上述的说法)。

随后出现了IoU loss系列:IoU loss,GIoU loss(解决了不重叠bboxes无法优化的问题), DIoU loss(将bboxes中心距离作为一种度量(一个bboxes被完全包含的情况下,无法体现两个bboxes的重叠方式),引入到损失函数中,可加快收敛速度) ,CIoU loss(将bboxes的比例考虑到损失函数中,不同比例的预测框的所反映的预测质量也不一样,希望比例尽可能的与原始目标的比列近似),特别是CIoU loss,提升了几个百分点。

关于分类

由于在文本检测任务不要不求对文本框做细划分,因此每个bbox只需要额外引入置信度的得分即可,而做一般性的目标检测,需要根据目标的类别数,定义分类分支,值得一提的是,在yolov3中考虑到目标可能存在重叠的情况,因此引入了多类别分类任务,这点在文本检测中无需注意。

后处理

如上所述,网络已经可以进行目标检测了,但是你会发现,在同一个目标周围会出现很多重叠面积较大的预测框,这显然是存在问题的,我们希望同一个目标只用一个预测框去描述,那么如何实现呢?

常用的方法为非极大值抑制(NMS), 算法流程为:

1,选择一个目标类别,过滤掉该类别中指定度较低的目标

2,确定该类别中置信度最高的目标,并遍历其他同类别的目标,如果两个目标的重叠面积超过事先设定的阈值,就将置信度较低的同类别目标过滤掉,保留下置信度较高的目标。

3,如果重叠面积未超过指定阈值,则保留该目标,作为一个独立的新目标。

常见的NMS方法包含hard NMS,soft NMS ,DIoU NMS

soft NMS相比于hard NMS需要利用IoU额外计算一个权重系数,并重新计算目标的置信度,如此一来,bbox score一直处在调整之中,那些score被调整到很低的box,会直接过滤掉。DIoU NMS则是在hard NMS的基础上考虑了bboxes之间的中心距离。

如何应用到文本检测中?

考虑到文本检测任务中长宽比以及方向性的问题,需要修改的最重要的两个点为:

1,调整anchor,引入水平瘦长的anchor以及竖直瘦长的anchor.

2, 修改坐标表达方式,为了体现方向性,同时回归两个任务,分别是(x1,y1,x2,y2,x3,y3,x4,y4)和(x1,y1,x2,y2)。前者可以描述任意形状任意角度的四边形,后者仅可以描述矩形,引入后面的回归任务主要是为了更加快速的进行NMS操作,与TextBoxess++所提出的cascaded NMS,在我们的应用场景中直接将step2忽略了,仅适用(x1,y1,x2,y2)所描述的四边形进行重叠框的过滤删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值