PaddleOCR使用笔记之配置文件的详细解释

本文详细介绍了深度学习模型训练中常用的优化器配置参数,包括Adam、Momentum等优化器的设置,如学习率、指数衰减率、正则化方式等,并展示了如何通过配置文件调整这些参数以优化模型训练效果。同时,还提及了模型保存、评估指标、数据集配置等相关细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可选参数列表

以下列表可以通过--help查看

FLAG支持脚本用途默认值备注
-cALL指定配置文件None配置模块说明请参考 参数介绍
-oALL设置配置文件里的参数内容None使用-o配置相较于-c选择的配置文件具有更高的优先级。例如:-o Global.use_gpu=false

配置文件参数介绍

rec_chinese_lite_train_v2.0.yml 为例

Global-全局参数配置

字段用途默认值备注
use_gpu设置代码是否在gpu运行true\
epoch_num最大训练epoch数500\
log_smooth_windowlog队列长度,每次打印输出队列里的中间值20\
print_batch_step设置打印log间隔10\
save_model_dir设置模型保存路径output/{算法名称}\
save_epoch_step设置模型保存间隔3\
eval_batch_step设置模型评估间隔2000 或 [1000, 2000]2000 表示每2000次迭代评估一次,[1000, 2000]表示从1000次迭代开始,每2000次评估一次
cal_metric_during_train设置是否在训练过程中评估指标,此时评估的是模型在当前batch下的指标true\
load_static_weights设置预训练模型是否是静态图模式保存(目前仅检测算法需要)true\
pretrained_model设置加载预训练模型路径./pretrain_models/CRNN/best_accuracy\
checkpoints加载模型参数路径None用于中断后加载参数继续训练
use_visualdl设置是否启用visualdl进行可视化log展示False教程地址
infer_img设置预测图像路径或文件夹路径./infer_img\
character_dict_path设置字典路径./ppocr/utils/ppocr_keys_v1.txt\
max_text_length设置文本最大长度25\
character_type设置字符类型chen/ch, en时将使用默认dict,ch时使用自定义dict
use_space_char设置是否识别空格True仅在 character_type=ch 时支持空格
label_list设置方向分类器支持的角度[‘0’,‘180’]仅在方向分类器中生效
save_res_path设置检测模型的结果保存地址./output/det_db/predicts_db.txt仅在检测模型中生效

Optimizer-优化器参数配置

字段用途默认值备注
name优化器类名Adam目前支持Momentum,Adam,RMSProp, 见ppocr/optimizer/optimizer.py
beta1设置一阶矩估计的指数衰减率0.9\
beta2设置二阶矩估计的指数衰减率0.999\
clip_norm所允许的二范数最大值\
lr设置学习率decay方式-\
name学习率decay类名Cosine目前支持Linear,Cosine,Step,Piecewise, 见ppocr/optimizer/learning_rate.py
learning_rate基础学习率0.001\
regularizer设置网络正则化方式-\
name正则化类名L2目前支持L1,L2, 见ppocr/optimizer/regularizer.py
factor学习率衰减系数0.00004\

Architecture-网络结构参数配置

在ppocr中,网络被划分为Transform,Backbone,Neck和Head四个阶段

字段用途默认值备注
model_type网络类型rec目前支持rec,det,cls
algorithm模型名称CRNN支持列表见algorithm_overview
Transform设置变换方式-目前仅rec类型的算法支持, 具体见ppocr/modeling/transform
name变换方式类名TPS目前支持TPS
num_fiducialTPS控制点数20上下边各十个
loc_lr定位网络学习率0.1\
model_name定位网络大小small目前支持small,large
Backbone设置网络backbone类名-具体见ppocr/modeling/backbones
namebackbone类名ResNet目前支持MobileNetV3,ResNet
layersresnet层数34支持18,34,50,101,152,200
model_nameMobileNetV3 网络大小small支持small,large
Neck设置网络neck-具体见ppocr/modeling/necks
nameneck类名SequenceEncoder目前支持SequenceEncoder,DBFPN
encoder_typeSequenceEncoder编码器类型rnn支持reshape,fc,rnn
hidden_sizernn内部单元数48\
out_channelsDBFPN输出通道数256\
Head设置网络Head-具体见ppocr/modeling/heads
namehead类名CTCHead目前支持CTCHead,DBHead,ClsHead
fc_decayCTCHead正则化系数0.0004\
kDBHead二值化系数50\
class_dimClsHead输出分类数2\

Loss-损失参数配置

字段用途默认值备注
name网络loss类名CTCLoss目前支持CTCLoss,DBLoss,ClsLoss
balance_lossDBLossloss中是否对正负样本数量进行均衡(使用OHEM)True\
ohem_ratioDBLossloss中的OHEM的负正样本比例3\
main_loss_typeDBLossloss中shrink_map所采用的的lossDiceLoss支持DiceLoss,BCELoss
alphaDBLossloss中shrink_map_loss的系数5\
betaDBLossloss中threshold_map_loss的系数10\

PostProcess-后处理参数配置

字段用途默认值备注
name后处理类名CTCLabelDecode目前支持CTCLoss,AttnLabelDecode,DBPostProcess,ClsPostProcess
threshDBPostProcess中分割图进行二值化的阈值0.3\
box_threshDBPostProcess中对输出框进行过滤的阈值,低于此阈值的框不会输出0.7\
max_candidatesDBPostProcess中输出的最大文本框数量1000
unclip_ratioDBPostProcess中对文本框进行放大的比例2.0\

Metric-模型评估参数配置

字段用途默认值备注
name指标评估方法名称CTCLabelDecode目前支持DetMetric,RecMetric,ClsMetric
main_indicator主要指标,用于选取最优模型acc对于检测方法为hmean,识别和分类方法为acc

Dataset-数据集参数配置

字段用途默认值备注
dataset每次迭代返回一个样本--
namedataset类名SimpleDataSet目前支持SimpleDataSetLMDBDateSet
data_dir数据集图片存放路径./train_data\
label_file_list数据标签路径["./train_data/train_list.txt"]dataset为LMDBDateSet时不需要此参数
ratio_list数据集的比例[1.0]若label_file_list中有两个train_list,且ratio_list为[0.4,0.6],则从train_list1中采样40%,从train_list2中采样60%组合整个dataset
transforms对图片和标签进行变换的方法列表[DecodeImage,CTCLabelEncode,RecResizeImg,KeepKeys]ppocr/data/imaug
loaderdataloader相关-
shuffle每个epoch是否将数据集顺序打乱True\
batch_size_per_card训练时单卡batch size256\
drop_last是否丢弃因数据集样本数不能被 batch_size 整除而产生的最后一个不完整的mini-batchTrue\
num_workers用于加载数据的子进程个数,若为0即为不开启子进程,在主进程中进行数据加载8\
<think>好的,用户现在遇到了在运行`env -i bash --noprofile --norc`时出现“参数列表过长”的错误。之前我给出了详细的解决方案,但现在用户再次提问,需要更聚焦于这个特定命令的问题原因和解决办法。 首先,我需要确认用户的问题核心。用户可能是在尝试启动一个干净的环境时遇到了问题。这时候,错误提示“参数列表过长”通常是因为环境变量或启动文件加载了太多参数,超出了系统限制。但用户已经用了`env -i`来清空环境变量,并且`--noprofile --norc`来避免加载配置,理论上应该不会有太多参数。这时候需要深入分析可能的原因。 可能的原因之一是,即使用使用了这些参数,某些系统级的配置可能仍然被加载。比如,如果系统中有全局的bash配置文件(如/etc/profile或/etc/bash.bashrc),这些可能在启动时被加载,尤其是如果用户的bash版本或系统配置有特殊设定的话。另外,用户可能在命令行中传递了其他参数,或者在调用env时带有其他变量,导致总长度超过限制。 另一个可能性是用户的环境变量本身在未被完全清除的情况下,仍然携带了大量数据。例如,某些shell可能会继承父进程的部分环境变量,即使用户用了`env -i`,但可能存在某些特殊情况。此外,ARG_MAX的限制不仅包括命令行参数,还包括环境变量的总大小,所以如果环境变量本身很大,即使清空了,可能还有其他因素影响。 解决方案方面,首先需要验证用户的环境是否真的被清空。可以建议用户运行`env -i bash --noprofile --norc -c 'env'`来查看实际加载的环境变量。如果发现有残留变量,可能需要检查bash的启动文件是否被正确绕过。另外,可以建议用户使用绝对路径来调用bash,避免通过其他可能添加参数的包装脚本。 如果问题依然存在,可能需要考虑系统级的ARG_MAX限制。用户可以通过`getconf ARG_MAX`来查看当前限制,并考虑是否需要调整。但修改系统参数需要谨慎,尤其是生产环境。替代方法包括使用其他工具如`find`或`xargs`来处理大量文件,避免在命令行中一次性传递过多参数。 另外,用户可能存在对命令的误解,比如在调用env时意外添加了其他参数。需要检查实际输入的命令是否正确,是否有拼写错误或多余的参数。例如,用户是否在env命令后添加了其他环境变量,导致总长度增加。 总结来说,解决这个问题的步骤应包括: 1. 确认环境变量是否完全清空。 2. 检查系统启动文件是否被加载。 3. 验证ARG_MAX限制,并考虑调整或替代方法。 4. 确保命令输入正确,避免额外参数。 需要将这些步骤以清晰的方式呈现给用户,避免技术术语过多,同时提供具体的命令示例和验证方法,帮助用户逐步排查问题。</think>### 原因分析与解决方案 `env -i bash --noprofile --norc` 报错 **"参数列表过长"** 的根本原因在于: 1. **环境变量残留**:`env -i` 理论上会清空环境变量,但某些系统(如通过 `LD_PRELOAD` 或内核模块)可能强制注入变量[^1] 2. **Shell启动文件意外加载**:`--noprofile --norc` 可能未完全禁用全局配置文件(如 `/etc/bash.bashrc`) 3. **隐藏参数传递**:父进程可能通过 `execve` 系统调用传递了超长参数 --- ### 一、快速验证步骤 #### 1. 检查纯净环境是否生效 ```bash # 启动纯净Shell并打印环境变量 env -i /bin/bash --noprofile --norc -c 'env | wc -l' ``` - **预期结果**:输出 `0`(无环境变量) - **若结果非零**:说明存在系统级环境变量注入(需检查 `/etc/environment`) #### 2. 诊断参数总长度 ```bash # 计算当前进程参数总大小(字节) ps -o args= -p $$ | wc -c # 对比系统限制 getconf ARG_MAX ``` - **临界值**:若输出值超过 `ARG_MAX` 的 80%(默认约 2MB),即会触发错误 --- ### 二、针对性解决方案 #### 场景1:系统强制注入环境变量 ##### 症状 - 执行 `env -i bash --noprofile --norc` 后仍能读取到 `LANG`、`TERM` 等变量 ##### 修复方法 ```bash # 使用绝对路径 + 硬编码关键变量 env -i LANG=C TERM=xterm /bin/bash --noprofile --norc ``` #### 场景2:全局配置文件加载 ##### 症状 - 在 `/etc/bash.bashrc` 中存在 `export` 语句或函数定义 ##### 修复方法 ```bash # 临时跳过所有配置文件 env -i /bin/bash --noprofile --norc --init-file /dev/null ``` #### 场景3:父进程参数污染 ##### 症状 - 从其他进程(如Python脚本)调用此命令时附加了隐藏参数 ##### 修复方法 ```python # Python中调用时应显式指定参数列表 import subprocess subprocess.run(["/bin/bash", "--noprofile", "--norc"], env={}) ``` --- ### 三、高级调试技巧 #### 1. 使用 `strace` 追踪系统调用 ```bash strace -e execve env -i bash --noprofile --norc ``` - **关注输出**:查找 `execve` 调用中的 `argv` 和 `envp` 总长度 #### 2. 内核参数调优(临时) ```bash # 提升单个进程参数限制(需root) sudo sysctl -w kernel/arg_max=4194304 # 4MB ``` #### 3. 替代启动方案 ```bash # 通过exec重组进程环境 exec -c -- /bin/bash --noprofile --norc ``` --- ### 四、典型故障案例 某Kubernetes集群中,用户因在Pod的 `securityContext` 中设置了过长的 `SYS_ADMIN` 能力列表,导致 `env -i` 启动失败。**解决方案**: 1. 精简Linux Capabilities配置 2. 改用 `unshare` 命令创建隔离命名空间: ```bash unshare -fp --mount-proc bash --noprofile --norc ``` --- ### 关键公式:参数限制计算 系统允许的最大参数空间由以下因素决定: $$ \text{可用空间} = \text{ARG_MAX} - (\text{环境变量总字节数} + \text{参数字符串长度} + \text{指针数组开销}) $$ 其中指针数组开销约为 `(参数个数 + 环境变量个数 + 3) * sizeof(char*)`[^2] ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值