• 五、OCR-PaddlePaddle训练源码解析系列-文字检测


    一、linux调试

    1、解压创建时添加的数据集

    unzip -d ./PaddleOCR/train_data data/data158454/train_data.zip
    
    • 1

    2、下载模型到特定目录

    wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/pretrained/MobileNetV3_large_x0_5_pretrained.pdparams
    
    • 1

    2.1、解释

    wget命令详解https://www.cnblogs.com/sx66/p/11887022.html

    -P,  --directory-prefix=PREFIX  以 PREFIX/... 保存文件
    
    • 1

    3、安装包

    pip install -r requirements.txt
    
    • 1

    4、训练

    cd  PaddleOCR
    
    • 1
    python3 tools/train.py -c configs/det/det_mv3_db.yml \
         -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained
    
    
    • 1
    • 2
    • 3

    4.1、报错

    AttributeError: module 'cv2' has no attribute '_registerMatType'
    
    • 1

    4.2、解决方案

    There is mess with versions:
    
    _registerMatType is a part of OpenCV 4.5.4
    but you mention 4.5.1
    Please ensure that you have installed one version of OpenCV only.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    pip install opencv-python --upgrade
    
    • 1

    二、win10调试

    1、训练train

    python3 train.py -c ../configs/det/det_mv3_db.yml 
    -o Global.pretrained_model=../pretrain_models/MobileNetV3_large_x0_5_pretrained Global.use_gpu=false Train.dataset.data_dir=../train_data/icdar2015/text_localization/ Train.dataset.label_file_list=[../train_data/icdar2015/text_localization/train_icdar2015_label.txt]
    Train.loader.batch_size_per_card=2
    Eval.dataset.data_dir=../train_data/icdar2015/text_localization/ Eval.dataset.label_file_list=[../train_data/icdar2015/text_localization/train_icdar2015_label.txt]
    
    • 1
    • 2
    • 3
    • 4

    1.1、运行报错

    ModuleNotFoundError: No module named ‘yaml‘
    
    • 1

    1.2、解决方案

     pip install pyyaml
    
    • 1

    1.3、配置理解

    -代表后面的是列表,列表里面的元素可以是字典,也可以是值本身
    在这里插入图片描述

    1.4、yaml类型转换python类型

    config = yaml.load(open(file_path, 'rb'), Loader=yaml.Loader)
    
    • 1

    1.5、python类型转换yaml类型

     with open(os.path.join(save_model_dir, 'config.yml'), 'w') as f:
                yaml.dump(
                    dict(config), f, default_flow_style=False, sort_keys=False)
    
    • 1
    • 2
    • 3

    1.6、eval() 函数

    dataset = eval(module_name)(config, mode, logger, seed)
    
    • 1

    eval() 函数用来执行一个字符串表达式,并返回表达式的值。

    语法
    以下是 eval() 方法的语法:

    eval(expression[, globals[, locals]])
    参数
    expression – 表达式。
    globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
    locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
    返回值
    返回表达式计算结果。

    1.7、sample(self, population, k)

    """Chooses k unique random elements from a population sequence or set.
    
    • 1

    1.8、 eval()字符串配置转换成op类

    def create_operators(op_param_list, global_config=None):
        """
        create operators based on the config
    
        Args:
            params(list): a dict list, used to create some operators
        """
        assert isinstance(op_param_list, list), ('operator config should be a list')
        ops = []
        for operator in op_param_list:
            assert isinstance(operator,
                              dict) and len(operator) == 1, "yaml format error"
            op_name = list(operator)[0]
            param = {} if operator[op_name] is None else operator[op_name]
            if global_config is not None:
                param.update(global_config)
            op = eval(op_name)(**param)
            ops.append(op)
        return ops
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1.9、 输入数据和label的特征提取和转换

    def transform(data, ops=None):
        """ transform """
        if ops is None:
            ops = []
        for op in ops:
            data = op(data)
            if data is None:
                return None
        return data
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    类操作函数
    在这里插入图片描述

    2.0、 输入图片的处理

    在这里插入图片描述

    2.1、 输入label的处理

    在这里插入图片描述
    有值和无值的对应
    在这里插入图片描述
    鼠标放在相应的位置的时候,会有相关的路径提示
    在这里插入图片描述

    2.1、检测分3个loss

    在这里插入图片描述
    第一个,是否包含待检测物体
    在这里插入图片描述
    第二个坐标差
    在这里插入图片描述
    第三个,交叉的并集
    在这里插入图片描述

  • 相关阅读:
    C#学习相关系列之匿名方法和Lambda表达式
    HashMap原理
    Mybatis做批量操作
    【ITRA】2022年ITRA赛事注册流程 从0-1
    SQL优化
    怎么把录音转文字?只需三步,手把手教会你
    分享《泰坦陨落2》缺少msvcr120.dll的解决方法,亲测有效的5个修复方法
    Mac电脑无法识别移动硬盘怎么办?
    SpringMVC【框架】
    【算法刷题】—7.21带你了解矩阵,矩阵置零
  • 原文地址:https://blog.csdn.net/qq_15821487/article/details/126804272