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

2021SC@SDUSC
代码位置:ppocr->modeling->architectures->base_model.py

class BaseModel(nn.Layer):
    def __init__(self, config):
        """
        the module for OCR.
        args:
            config (dict): the super parameters for module.
        """
        super(BaseModel, self).__init__()
        in_channels = config.get('in_channels', 3)
        model_type = config['model_type']
        # build transfrom,
        # for rec, transfrom can be TPS,None
        # for det and cls, transfrom shoule to be None,
        # if you make model differently, you can use transfrom in det and cls
        if 'Transform' not in config or config['Transform'] is None:
            self.use_transform = False
        else:
            self.use_transform = True
            config['Transform']['in_channels'] = in_channels
            self.transform = build_transform(config['Transform'])
            in_channels = self.transform.out_channels

        # build backbone, backbone is need for del, rec and cls
        config["Backbone"]['in_channels'] = in_channels
        self.backbone = build_backbone(config["Backbone"], model_type)
        in_channels = self.backbone.out_channels

        # build neck
        # for rec, neck can be cnn,rnn or reshape(None)
        # for det, neck can be FPN, BIFPN and so on.
        # for cls, neck should be none
        if 'Neck' not in config or config['Neck'] is None:
            self.use_neck = False
        else:
            self.use_neck = True
            config['Neck']['in_channels'] = in_channels
            self.neck = build_neck(config['Neck'])
            in_channels = self.neck.out_channels

        # # build head, head is need for det, rec and cls
        config["Head"]['in_channels'] = in_channels
        self.head = build_head(config["Head"])

        self.return_all_feats = config.get("return_all_feats", False)

    def forward(self, x, data=None):
        y = dict()
        if self.use_transform:
            x = self.transform(x)
        x = self.backbone(x)
        y["backbone_out"] = x
        if self.use_neck:
            x = self.neck(x)
        y["neck_out"] = x
        x = self.head(x, targets=data)
        if isinstance(x, dict):
            y.update(x)
        else:
            y["head_out"] = x
        if self.return_all_feats:
            return y
        else:
            return x

_init_函数的作用是选择合适的模型框架,分别选择
transform 图像变换算法 TPS或STN
backbone 特征提取 Vgg RestNet MobileNet
neck 特征增强 FRN RNN
head 输出 Attention DBHead

对图像变换来说,文本识别可以是TPS算法或者没有,对检测和分类则一定是空参。
对backbone来说,三者都是必须的
对neck来说
det 检测:可以是FPN,BIFPN等等
cls 分类:应该是空参
rec 识别:应该是cnn rnn或者空参
对于head来说 三者都是必须的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值