)
人工智能深度学习计算机视觉OCR【免费下载链接】doctrdocTR (Document Text Recognition) - a seamless, high-performing accessible library for OCR-related tasks powered by Deep Learning. Ongoing development and maintenance by t2k.项目地址https://gitcode.com/gh_mirrors/do/doctr点击查看免费下载导读本文基于 docTRDocument Text Recognition仓库中 references/classification 目录下的官方训练脚本完整讲解如何用 PyTorch 训练两类图像分类模型字符分类器Character Classification识别单个字符属于哪个字符类别与方向分类器Orientation Classification判断文档页面或单词裁剪图被旋转了 0°、90°、180° 还是 -90°。读完本文后你将掌握从环境安装、数据组织、命令行参数含义、设备与混合精度配置到 checkpoint 管理、训练监控、ONNX 导出与 HuggingFace Hub 推送的完整实战流程并了解这些脚本在 docTR 源码层面的底层实现逻辑。一、环境准备训练脚本依赖 docTR 本体以及若干训练辅助库官方 README 给出的安装方式如下pip install -e . --upgrade pip install -r references/requirements.txt第一条命令以可编辑模式安装当前仓库根目录下的 docTR-e .指向仓库根目录的 setup.py / pyproject.toml第二条命令安装训练辅助依赖内容见 references/requirements.txt包括依赖用途tqdm训练进度条且支持通过tqdm.contrib.slack将进度推送到 Slackslack-sdkSlack 日志所需的 SDKwandb0.10.31Weights Biases 实验跟踪配合--wb使用clearml1.11.1ClearML 实验跟踪配合--clearml使用matplotlib3.1.0样本可视化与 LR 搜索曲线绘制安装完成后两个入口脚本分别位于 references/classification/train_character.py 与 references/classification/train_orientation.py。二、字符分类训练train_character.py字符分类任务的定位是为 OCR 流水线中的单个字符训练分类头可配合识别模型或独立使用。最简单的训练命令为python references/classification/train_character.py mobilenet_v3_large --epochs 5 --device 0第一个位置参数arch指定分类骨干网络例如mobilenet_v3_large--epochs 5表示训练 5 个 epoch--device 0表示使用 CUDA 设备 0设备选择规则详见下文。从源码 train_character.py 的parse_args()可以拿到完整的参数清单逐一说明如下参数默认值说明arch必填分类模型架构名如mobilenet_v3_small、resnet18、vit_s等--output_dir.checkpoint 与元数据保存目录--nameNone实验名缺省时自动生成为{arch}_{时间戳}--epochs10训练轮数-b/--batch_size64训练批量大小--device自动选择CUDA index如0、cuda:N、mps、cpu--input_size32输入尺寸模型输入为(input_size, input_size)的方形图--lr0.001Adam / AdamW 学习率--wd/--weight-decay0权重衰减AdamW 下若为 0 会自动落到1e-4-j/--workers自动DataLoader 工作进程数缺省为min(16, cpu_count)--resumeNone从指定 checkpoint 恢复权重model.from_pretrained--fontFreeMono.ttf,FreeSans.ttf,FreeSerif.ttf合成字符图像使用的字体族逗号分隔--vocabfrench训练词表取自doctr.datasets.VOCABS--train-samples1000每个字符的合成训练样本数总样本数 train_samples × vocab 长度--val-samples20每个字符的合成验证样本数--test-only关闭只跑验证循环不训练--show-samples关闭展示一批未归一化的训练样本--wb关闭启用 Weights Biases 日志--clearml关闭启用 ClearML 日志--push-to-hub关闭训练结束后推送模型到 HuggingFace Hub--pretrained关闭训练前加载 ImageNet 预训练权重--export-onnx关闭训练结束后导出 ONNX 模型--optimadam优化器可选adam/adamw--schedcosine学习率调度可选cosine/onecycle/poly--amp关闭开启自动混合精度仅 CUDA 支持--amp-dtypefloat16autocast 精度可选float16/bfloat16--find-lr关闭学习率网格搜索LR Finder--early-stop关闭启用早停--early-stop-epochs5早停耐心值patience--early-stop-delta0.01早停最小改善阈值字符分类的数据来源在线合成字符分类脚本不需要外部数据集而是使用 docTR 的CharacterGenerator在线合成单字符图像。核心逻辑在 doctr/datasets/generator/base.pysynthesize_text_img使用 PIL 以默认字号 32 渲染单个字符自动裁出字形包围盒并把单字符渲染为方形图_fonts_per_char会检查每个字体是否真的能渲染词表中的字符避免字体缺字形导致.notdef空框污染训练数据无法渲染的字符会尝试系统字体回退脚本中train_set CharacterGenerator(vocabvocab, num_samplesargs.train_samples * len(vocab), ...)见 train_character.py即总样本数为train_samples × 词表长度每个字符在其可渲染字体间轮换取样。合成之后脚本通过img_transforms施加了一整套数据增强见 train_character.pyRandomApply(T.ColorInversion(), 0.9)90% 概率反色保证样本中 90% 是白底黑字RandomGrayscale(p0.1)、RandomPhotometricDistort(p0.1)灰度化与光度扰动RandomApply(T.RandomShadow(), p0.4)随机阴影RandomApply(T.GaussianNoise(mean0, std0.1), 0.1)与RandomApply(T.GaussianBlur(sigma(0.5, 1.5)), 0.3)噪声与模糊RandomPerspective(distortion_scale0.2, p0.3)与RandomRotation(15)透视畸变与 ±15° 旋转。喂入网络前统一做Normalize(mean(0.694, 0.695, 0.693), std(0.299, 0.296, 0.301))train_character.py。词表选择--vocab参数取值来自 doctr/datasets/vocabs.py 的VOCABS字典例如latin数字 ASCII 字母 标点englishlatin 基础上加°与货币符号frenchenglish 基础上再叠加法语变音字符àâéèêëîïôùûüç...这也是默认值此外还有german、spanish、portuguese、chinese、japanese、korean、cyrillic等数十种语言词表可供选择。分类模型的输出类别数等于len(vocab)类别顺序即词表字符顺序源码classification.__dict__args.arch, classeslist(vocab))。三、方向分类训练train_orientation.py方向分类器解决的是 OCR 前处理中的文档旋转校正问题输入可能是整页文档图像page也可能是单词裁剪图crop模型输出四类旋转角度[0, -90, 180, 90]见 train_orientation.py 的CLASSES常量。典型命令python references/classification/train_orientation.py resnet18 --type page \ --train_path path/to/your/train_set --val_path path/to/your/val_set --epochs 5--type为必填参数只能取page文档整页或crop单词裁剪图并直接决定输入尺寸input_size (512, 512) if args.type page else (256, 256)见 train_orientation.py。与字符分类不同方向分类必须提供真实图片数据--train_path与--val_path为必填参数分别指向训练/验证图片文件夹。脚本内部使用doctr.datasets.OrientationDataset实现见 doctr/datasets/orientation.py读取文件夹内全部图片初始目标统一记为 0°。旋转标签的在线生成训练/验证时脚本通过sample_transforms中的rnd_rotate函数train_orientation.py为每张图动态生成旋转标签先从CLASSES [0, -90, 180, 90]中随机选一个基准角度以 50% 概率叠加一个从-25°到25°步长 5°的随机微调模拟真实扫描中并非精确旋转的情况用torchvision.transforms.functional.rotate执行旋转并填充背景。因此模型学到的是对大致属于某类角度的鲁棒判别而非对精确角度的记忆。方向分类训练同样带有一套增强ColorInversion 0.1、GaussianNoise、RandomShadow 0.2、GaussianBlur 0.3、RandomPhotometricDistort、RandomGrayscale、RandomPerspective 等见 train_orientation.py并先做Resize(input_size, preserve_aspect_ratioTrue, symmetric_padTrue)等比缩放 对称填充。注意方向分类脚本默认--batch_size 2比字符分类的 64 小得多原因是 page 类型的输入是 512×512 的大图。四、数据目录格式两个脚本对用户数据的组织方式非常宽容只要给到图片文件夹路径即可。官方 README 给出的目录结构为images ├── sample_img_01.png ├── sample_img_02.png ├── sample_img_03.png └── ...对方向分类--train_path/--val_path指向这样的图片目录脚本内部读取os.path.join(path, images)子目录见 train_orientation.py 与 train_orientation.py字符分类则完全无需外部数据。五、设备选择与混合精度设备解析规则--device支持多种写法CUDA 索引如0、cuda:N、mpsApple Silicon GPU或cpu。设备解析逻辑在 references/classification/utils.py 的resolve_device()中实现不传该参数时脚本按CUDA → MPS → CPU的顺序自动选择可用设备传入纯数字索引时若 CUDA 不可用或索引越界会直接报错在分布式训练torchrun场景下该参数会被忽略每个进程自动使用自己的 GPU。另外当设备为 CUDA 时脚本会开启torch.backends.cudnn.benchmark True以加速卷积train_character.py。自动混合精度AMP--amp开启自动混合精度仅支持 CUDA源码在非 CUDA 设备上开启--amp会抛出ValueError(--amp (automatic mixed precision) is only supported on CUDA devices)--amp-dtype可选float16默认或bfloat16。官方 README 特别说明bfloat16 适用于 Ampere 或更新的 GPU它拥有与 float32 相同的指数范围因此无需 loss scaling也能避免 float16 在某些损失函数中出现的上溢问题。对应源码实现amp_dtype()utils.py把字符串映射为torch.bfloat16/torch.float16_autocast()与_scaler()train_character.py中GradScaler仅在float16时启用bfloat16时自动禁用。官方 README 给出了两个针对性示例# Apple Silicon: 开启回退让 MPS 缺失的少数算子回落到 CPU 执行 PYTORCH_ENABLE_MPS_FALLBACK1 python references/classification/train_character.py mobilenet_v3_small --epochs 5 --device mps # NVIDIA GPU bfloat16 混合精度 python references/classification/train_character.py mobilenet_v3_small --epochs 5 --device 0 --amp --amp-dtype bfloat16六、Checkpoint 与运行元数据每次训练会产出两类文件均保存在--output_dir文件名以实验名exp_name为前缀权重文件exp_name.pt由save_checkpoint()utils.py通过torch.save(model.state_dict(), ...)保存。注意训练循环只在验证损失下降时才覆盖保存if val_loss min_loss见 train_character.py因此目录下始终是当前最优权重。元数据文件exp_name.json由save_run_metadata()utils.py每次运行只写一次而非随每个 checkpoint 重复写。元数据由run_metadata()utils.py生成内容包括官方 README 所述的全部要素架构名与任务设置classes/vocab_name使用本地数据时数据集的哈希值docTR 版本doctr.__version__与 PyTorch 版本torch.__version__Git revisiongit rev-parse HEAD获取失败时为None本次运行的全部命令行参数dict(vars(args))。这份 JSON 的价值在于它记录了重建模型与复现训练所需的全部信息即使事后忘了当初怎么训练的也能据此还原出可推理的模型。七、训练监控tqdm、Slack、WB 与 ClearML进度条与 Slack 推送训练循环统一使用 tqdm 进度条train_character.py。如果同时设置了以下两个环境变量进度条会切换到tqdm.contrib.slack把训练信息直接推送到 Slack 频道TQDM_SLACK_TOKENSlack Bot TokenTQDM_SLACK_CHANNEL在 Slack 频道上右键 → Copy → Copy link可得到形如https://xxxxxx.slack.com/archives/yyyyyyyy的链接只需保留最后的yyyyyyyy部分作为频道 ID。脚本中还会对 tqdm 的write方法做 monkey patch让进度消息直接通过 Slack API 发送train_character.py。WB 与 ClearML传入--wb时脚本调用wandb.init(nameexp_name, projectcharacter-classification)初始化实验并记录每步的train_loss_step/val_loss_step/step_lr以及每 epoch的train_loss/val_loss/learning_rate/acctrain_character.py传入--clearml时使用 ClearMLTaskLogger.report_scalar记录相同指标项目名为docTR/character-classification方向分类脚本为docTR/orientation-classification。八、进阶选项LR Finder、早停与调度器脚本内置了若干训练技巧开关均源自 train_character.pyLR Finder--find-lrrecord_lr()从1e-7到1指数增长地网格搜索学习率plot_recorder()utils.py以对数横轴绘制学习率-损失曲线并做 EMA 平滑帮助你确定合适的学习率区间。该实现改编自 Holocron 训练器。早停--early-stop配合--early-stop-epochs默认 5与--early-stop-delta默认 0.01使用EarlyStopperutils.py在验证损失连续patience个 epoch 未能比历史最优降低超过min_delta时终止训练。优化器与调度器--optim可选adambetas(0.95, 0.999), eps1e-6或adamwbetas(0.9, 0.999)weight_decay 缺省 1e-4--sched可选cosineCosineAnnealingLReta_minlr/25e4、onecycleOneCycleLR或polyPolynomialLR三者均按epochs × len(train_loader)的总步数调度。九、可用骨干架构与推理入口可训练的架构清单分类脚本的arch位置参数从doctr.models.classification命名空间取模型完整清单见 doctr/models/classification/zoo.py 的ARCHS包括magc_resnet31、mobilenet_v3_small/large含_r变体、resnet18/31/34/50、resnet34_wide、textnet_tiny/small/base、vgg16_bn_r、vit_s/b、vip_tiny/base、vit_det_s/m、starnet_s3等。官方 README 示例中字符分类用mobilenet_v3_large、方向分类用resnet18。方向分类另有两条专门预训练入口同为分类骨干见 zoo.py 的ORIENTATION_ARCHScrop_orientation_predictor(archmobilenet_v3_small_crop_orientation)处理单词裁剪图默认batch_size128page_orientation_predictor(archmobilenet_v3_small_page_orientation)处理整页默认batch_size4。两者均在PreProcessor中使用preserve_aspect_ratioTrue, symmetric_padTrue预处理输入尺寸与训练脚本的(256,256)/(512,512)对应。训练后的自定义模型可类比这两个入口在推理阶段用相同预处理加载权重。训练后导出与共享两个训练脚本都支持--test-only仅加载模型跑验证循环并打印Validation loss (Acc: ...)--show-samples可视化一批未归一化的增强样本plot_samplesutils.py--export-onnx训练结束后用export_model_to_onnx导出 ONNX 模型train_character.py--push-to-hub训练结束后通过push_to_hf_hub(model, exp_name, taskclassification, run_configargs)推送到 HuggingFace Hub需要先执行login_to_hub()登录--resume checkpoint用model.from_pretrained()恢复权重继续训练。十、性能基准测试latency.pyreferences/classification/latency.py 提供了分类模型的延迟基准脚本随机生成(batch_size, 3, size, size)的输入先做 10 次 warmup再运行--it默认 100次计时输出平均与标准差延迟毫秒。典型用法python references/classification/latency.py mobilenet_v3_small --size 32 --batch-size 64 --gpu --it 100 --pretrained--gpu在 CUDA:0 上评测否则回落到 CPU--pretrained加载模型库预训练权重。该脚本有助于在训练前后快速评估不同架构的推理成本为部署选型提供依据。十一、完整参数速查需要查看任意脚本的完整帮助时官方 README 建议直接使用python references/classification/train_character.py --help python references/classification/train_orientation.py --help由于脚本使用argparse.ArgumentDefaultsHelpFormatter--help输出会附带每个参数的默认值是查询参数语义最权威的途径。小结docTR 的 references/classification 目录提供了两套开箱即用的 PyTorch 分类训练管线字符分类完全基于字体在线合成数据无需外部数据集方向分类基于真实图片 在线旋转标签增强两者共享同一套设备解析、混合精度、checkpoint 元数据、实验跟踪与模型导出机制。配合 doctr/models/classification/zoo.py 中十余种骨干架构开发者可以快速训练出面向自己语种、版式或扫描质量的定制分类模型再通过 ONNX 导出或 HuggingFace Hub 推送接入生产推理链路。赞分享人工智能深度学习计算机视觉OCR【免费下载链接】doctrdocTR (Document Text Recognition) - a seamless, high-performing accessible library for OCR-related tasks powered by Deep Learning. Ongoing development and maintenance by t2k.项目地址https://gitcode.com/gh_mirrors/do/doctr点击查看免费下载相关推荐视频分类模型训练指南用Ludwig实现分类训练视频分类模型训练指南用Ludwig实现分类训练 1. 视频分类的技术挑战与解决方案 你是否在构建视频分类系统时面临以下痛点标注数据不足导致模型泛化能力差复人工智能深度学习机器学习大模型预训练微调LoRA多模态NLP计算机视觉模型推理服务PaddleOCR文本方向分类模型配置与训练指南PaddleOCR文本方向分类模型配置与训练指南 文本方向分类模型现状分析 PaddleOCR项目中提供的文本方向分类功能主要用于识别文本行的方向0度、90度人工智能计算机视觉OCR深度学习大模型RAGccv ConvNet 深度卷积网络指南从 ImageNet 预训练模型分类到自训练图像分类器ccv ConvNet 深度卷积网络指南从 ImageNet 预训练模型分类到自训练图像分类器 ccvC based/Cached/Core Compute计算机视觉深度学习上一篇如何构建自定义nfs-subdir-external-provisioner镜像完整构建流程详解下一篇Nav2路径规划器对比SMAC、Theta*、NavFn哪个更适合你的应用场景创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考