PaddleOCR 文字检测部分源码学习(4)-模型(2)

2021SC@SDUSC
骨干网络
代码位置:ppocr->modeling->backbones->det_mobilenet_v3.py

def make_divisible(v, divisor=8, min_value=None):
    if min_value is None:
        min_value = divisor
    new_v = max(min_value, int(v + divisor / 2) // divisor * divisor)
    if new_v < 0.9 * v:
        new_v += divisor
    return new_v

这各函数的作用是使可除,相当于对数据的一个预处理操作。

#init函数的片段
        if model_name == "large":
            cfg = [
                # k, exp, c,  se,     nl,  s,
                [3, 16, 16, False, 'relu', 1],
                [3, 64, 24, False, 'relu', 2],
                [3, 72, 24, False, 'relu', 1],
                [5, 72, 40, True, 'relu', 2],
                [5, 120, 40, True, 'relu', 1],
                [5, 120, 40, True, 'relu', 1],
                [3, 240, 80, False, 'hardswish', 2],
                [3, 200, 80, False, 'hardswish', 1],
                [3, 184, 80, False, 'hardswish', 1],
                [3, 184, 80, False, 'hardswish', 1],
                [3, 480, 112, True, 'hardswish', 1],
                [3, 672, 112, True, 'hardswish', 1],
                [5, 672, 160, True, 'hardswish', 2],
                [5, 960, 160, True, 'hardswish', 1],
                [5, 960, 160, True, 'hardswish', 1],
            ]
            cls_ch_squeeze = 960
        elif model_name == "small":
            cfg = [
                # k, exp, c,  se,     nl,  s,
                [3, 16, 16, True, 'relu', 2],
                [3, 72, 24, False, 'relu', 2],
                [3, 88, 24, False, 'relu', 1],
                [5, 96, 40, True, 'hardswish', 2],
                [5, 240, 40, True, 'hardswish', 1],
                [5, 240, 40, True, 'hardswish', 1],
                [5, 120, 48, True, 'hardswish', 1],
                [5, 144, 48, True, 'hardswish', 1],
                [5, 288, 96, True, 'hardswish', 2],
                [5, 576, 96, True, 'hardswish', 1],
                [5, 576, 96, True, 'hardswish', 1],
            ]
            cls_ch_squeeze = 576
        else:
            raise NotImplementedError("mode[" + model_name +
                                      "_model] is not implemented!")

这里是对参数进行赋值,根据选择的参数进行赋值。
这是MobileNetV3-Large网络结构
在这里插入图片描述
MobileNetV3-Small
在这里插入图片描述
在这里插入图片描述
上面两张图是MobileNetV2和MobileNetV3的网络块结构。可以看出,MobileNetV3是综合了以下三种模型的思想:MobileNetV1的深度可分离卷积(depthwise separable convolutions)、MobileNetV2的具有线性瓶颈的逆残差结构(the inverted residual with linear bottleneck)和MnasNet的基于squeeze and excitation结构的轻量级注意力模型。
在这里插入图片描述
MobileNetV2模型中反转残差结构和变量利用了11卷积来构建最后层,以便于拓展到高维的特征空间,虽然对于提取丰富特征进行预测十分重要,但却引入了二外的计算开销与延时。为了在保留高维特征的前提下减小延时,将平均池化前的层移除并用11卷积来计算特征图。特征生成层被移除后,先前用于瓶颈映射的层也不再需要了,这将为减少10ms的开销,在提速15%的同时减小了30m的操作数。
h-swish激活函数,计算公式如下:
在这里插入图片描述
作者发现swish激活函数能够有效提高网络的精度,然而,swish的计算量太大了。作者提出h-swish(hard version of swish)如下所示
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PaddleOCR检测模型是一种计算机视觉模型,用于图像中的文本检测。它是基于深度学习技术构建的,通过对输入图像进行分析和处理,可以检测出其中的文字区域,并将其标记出来。 PaddleOCR检测模型采用了端到端的网络结构,将图像作为输入,经过一系列卷积层、池化层、特征融合层等操作,最终得到一个特征图。这个特征图能够很好地表达出文字区域的位置信息。接着,模型会对特征图进行后处理,通过阈值设定、边界框生成等操作,确定文字区域的位置和大小。 PaddleOCR检测模型在训练过程中,使用了大量的含有文字区域标注信息的图像数据,通过反向传播算法进行优化,使得模型能够准确地检测出图像中的文字区域。同时,为了提高模型的性能,研究人员还尝试了一些技术手段,比如引入注意力机制、改进网络结构等,从而进一步提高检测模型的准确率和鲁棒性。 PaddleOCR检测模型具有广泛的应用价值。例如,可以应用于文档识别、自动化办公、车牌识别等领域。通过将图片输入到检测模型中,可以自动识别出文本区域,并对其进行后续的文字识别和语义理解。这对于提高工作效率、简化操作流程非常有帮助。 综上所述,PaddleOCR检测模型是一种用于图像中文本检测的深度学习模型,通过训练和优化,能够准确地检测出图像中的文字区域,并具有广泛的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值