DiT 文档图像 Transformer:基于自监督预训练的文档智能模型与下游微调实战指南

发布时间:2026/9/13 8:01:50
DiT 文档图像 Transformer:基于自监督预训练的文档智能模型与下游微调实战指南 DiT 文档图像 Transformer基于自监督预训练的文档智能模型与下游微调实战指南【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilmDiTDocument Image Transformer是微软研究院提出的文档图像 Transformer 模型通过在海量无标注文档图像上进行自监督预训练为文档 AIDocument AI任务提供了首个大规模可用的视觉骨干——由于人工标注文档图像的代价极高此前业界并不存在有监督的同类预训练模型。本文以本仓库 dit/README.md 为主线系统讲解 DiT 的模型架构、预训练权重、环境搭建以及在 RVL-CDIP 文档图像分类、PubLayNet / ICDAR 2019 cTDaR 版面与表格检测、FUNSD 文本检测三大类任务上的微调与评测实战并深入源码印证其实现细节帮助你从零复现 DiT 的完整技术链路。DiT 是什么面向文档智能的自监督预训练模型文档图像如扫描件、传真、表格、票据与自然图像存在本质差异文字密集、版面结构复杂、颜色和背景单一且人工标注成本极高。DiT 的核心思路是利用大规模无标注文本图像做自监督预训练让视觉编码器先学会通用文档图像的表征再通过少量下游标注进行微调从而解决缺少人工标注文档图像、没有有监督预训练对应物的难题。从本仓库的结构可以看到 DiT 的完整技术栈覆盖了三条下游任务线目录任务评测数据集dit/classification文档图像分类RVL-CDIP16 类dit/object_detection版面分析 / 表格检测PubLayNet、ICDAR 2019 cTDaRdit/text_detection文本检测FUNSD主文档还提供了两个在线演示文档版面分析、文档图像分类可快速体验模型能力。预训练与微调权重均发布在 Hugging Face 的 HYPJUDY/dit 仓库中。模型结构与预训练权重架构配置DiT-base 与 DiT-largeDiT 基于 BEiT 风格的 Vision Transformer 架构实现在 dit/classification/modeling_finetune.py 中的VisionTransformer类可清晰看到其组成PatchEmbed卷积 patch 嵌入、cls_token、绝对位置编码pos_embed、可选相对位置偏置RelativePositionBias、12/24 层Block含Attention与Mlp以及用均值池化mean pooling替代 cls token 的分类头设计。主文档给出的两种预训练权重配置如下均在 IIT-CDIP Test Collection 1.0 上以 224x224 分辨率预训练模型#layerhiddenFFN 因子#headpatch参数量DiT-base127684x1216x1686MDiT-large2410244x1616x16304M对应源码中的注册函数可以精确印证这两档配置dit/classification/modeling_finetune.py 中beit_base_patch16_224为embed_dim768, depth12, num_heads12同一文件的 beit_large_patch16_224 为embed_dim1024, depth24, num_heads16且mlp_ratio4、qkv_biasTrue、LayerNorm eps 取 1e-6。检测侧的 dit/object_detection/ditod/beit.py 中dit_base_patch16与dit_large_patch16亦给出同样维度其中 base 的init_values0.1、large 的init_values1e-5对应微调训练中的 layer scale 初始化策略。下载预训练权重两个自监督预训练检查点224x224IIT-CDIP 1.0 上训练 500k 步由官方发布DiT-basedit-base-224-p16-500k-62d53a.pthDiT-largedit-large-224-p16-500k-d7a2fb.pth环境搭建基础依赖克隆仓库后进入dit目录安装依赖git clone https://github.com/microsoft/unilm.git cd unilm/dit pip install -r requirements.txtdit/requirements.txt 中锁定的关键版本为PyTorch 1.9.0、torchvision 0.10.0、timm 0.5.4此外还包括 deepspeed 0.4.0用于混合精度训练、einops、tensorboardX、scipy、opencv-python、Pillow 等。混合精度训练若需混合精度训练请安装 NVIDIA Apexgit clone https://github.com/NVIDIA/apex cd apex pip install -v --disable-pip-version-check --no-cache-dir --global-option--cpp_ext --global-option--cuda_ext ./目标检测附加依赖版面分析 / 表格检测需要在 Detectron2 上运行除基础依赖外还需安装 detectron2 与 shapely以 CUDA 11.1 torch 1.9 为例# 安装 detectron2 python -m pip install detectron2 -f \ https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.9/index.html # 安装 shapely pip install shapely任务一RVL-CDIP 文档图像分类RVL-CDIP 是包含 16 类文档如 letter、invoice、email 等的大型公开数据集分类微调代码位于 dit/classification。官方在验证集上的结果如下模型初始化检查点分辨率准确率DiT-basedit_base_patch16_224224x22492.11DiT-largedit_large_patch16_224224x22492.69数据准备从 RVL-CDIP 官网下载rvl-cdip.tar.gz约 37GB解压到PATH-to-rvlcdip然后在训练 / 评估命令中通过--data_path与--eval_data_path指向该目录即可。--data_set rvlcdip是启用 RVL-CDIP 数据加载的关键开关其在 dit/classification/run_class_finetuning.py 中的可选值为CIFAR / IMNET / image_folder / rvlcdip / rvlcdip_wds。评估微调模型python -m torch.distributed.launch --nproc_per_node8 --master_port47770 run_class_finetuning.py \ --model beit_base_patch16_224 #beit_base_patch16_224 / beit_large_patch16_224 --data_path /path/to/rvlcdip --eval_data_path /path/to/rvlcdip --enable_deepspeed --nb_classes 16 --eval --data_set rvlcdip --finetune /path/to/model.pth --output_dir output_dir --log_dir output_dir/tf --batch_size 256 --abs_pos_emb --disable_rel_pos_bias微调训练exp_namedit-base-exp mkdir -p output/${exp_name} python -m torch.distributed.launch --nproc_per_node8 run_class_finetuning.py --model beit_base_patch16_224 #beit_base_patch16_224 / beit_large_patch16_224 --data_path /path/to/rvlcdip --eval_data_path /path/to/rvlcdip --nb_classes 16 --data_set rvlcdip --finetune /path/to/model.pth --output_dir output/${exp_name}/ --log_dir output/${exp_name}/tf --batch_size 64 --lr 5e-4 --update_freq 2 --eval_freq 10 --save_ckpt_freq 10 --warmup_epochs 20 --epochs 180 --layer_scale_init_value 1e-5 --layer_decay 0.75 --drop_path 0.2 --weight_decay 0.05 --clip_grad 1.0 --abs_pos_emb --disable_rel_pos_bias关键超参数的作用与取值说明--modelbeit_base_patch16_224/beit_large_patch16_224分别对应 DiT-base / DiT-large模型名沿用了 BEiT 注册名但加载的是 DiT 预训练权重--nb_classes 16RVL-CDIP 共 16 个文档类别--enable_deepspeed启用 DeepSpeed 混合精度训练run_class_finetuning.py 中默认关闭对应 dit/classification/deepspeed_configs/config.json 配置文件--update_freq 2梯度累积 2 步配合--batch_size 64等效于更大 batch--layer_scale_init_value 1e-5与--layer_decay 0.75对应源码中每个 Block 的gamma_1/gamma_2可学习 layer scale见 modeling_finetune.py与分层学习率衰减是 BEiT 系微调稳定收敛的关键技巧--abs_pos_emb/--disable_rel_pos_bias启用绝对位置编码、关闭相对位置偏置run_class_finetuning.py 中--disable_rel_pos_bias将rel_pos_bias置为 False、--abs_pos_emb置为 True与预训练设置保持一致才能正确加载权重--drop_path 0.2随机深度概率配合源码中随层深线性增大的dpr衰减曲线modeling_finetune.py使用--clip_grad 1.0全局梯度裁剪阈值。任务二PubLayNet / ICDAR 2019 cTDaR 版面分析与表格检测检测微调基于 Detectron2 实现代码位于 dit/object_detection支持Mask R-CNN与Cascade Mask R-CNN两种检测框架DiT 作为 FPN 骨干网络。官方结果汇总如下PubLayNetmAP模型初始化检查点检测算法mAPDiT-basedit_base_patch16_224Mask R-CNN0.935DiT-largedit_large_patch16_224Mask R-CNN0.941DiT-basedit_base_patch16_224Cascade R-CNN0.945DiT-largedit_large_patch16_224Cascade R-CNN0.949ICDAR 2019 cTDaRWeighted Average F1子集模型检测算法F1ModernDiT-baseMask R-CNN94.74ModernDiT-largeMask R-CNN95.50ModernDiT-baseCascade R-CNN95.85ModernDiT-largeCascade R-CNN96.29ArchivalDiT-baseMask R-CNN96.24ArchivalDiT-largeMask R-CNN96.46ArchivalDiT-baseCascade R-CNN96.63ArchivalDiT-largeCascade R-CNN97.00CombinedModern Archival 推理结果合并DiT-baseMask R-CNN95.30CombinedDiT-largeMask R-CNN95.85CombinedDiT-baseCascade R-CNN96.14CombinedDiT-largeCascade R-CNN96.55快速体验单图推理无需准备数据集即可用官方微调权重跑通一次版面分析python ./dit/object_detection/inference.py \ --image_path ./dit/object_detection/publaynet_example.jpeg \ --output_file_name output.jpg \ --config ./dit/object_detection/publaynet_configs/maskrcnn/maskrcnn_dit_base.yaml \ --opts MODEL.WEIGHTS https://layoutlm.blob.core.windows.net/dit/dit-fts/publaynet_dit-b_mrcnn.pth注意YAML 配置与检查点必须匹配上面的例子是 DiT-base Mask R-CNN 在 PubLayNet 上的微调权重仓库提供了示例输入图片 dit/object_detection/publaynet_example.jpeg。数据准备PubLayNet约 96GB从官方链接下载并解压到PATH-to-PubLayNet然后创建软链接ln -s PATH-to-PubLayNet publaynet_dataICDAR 2019 cTDaR约 4GB下载数据仓库到PATH-to-ICDARrepo后先转为 COCO 格式python convert_to_coco_format.py --root_dirPATH-to-ICDARrepo --target_dirPATH-toICDAR对 archival 子集还需做自适应二值化预处理cp -r PATH-to-ICDAR/trackA_archival PATH-to-ICDAR/at_trackA_archival python adaptive_binarize.py --root_dir PATH-to-ICDAR/at_trackA_archival最后按目标子集建立软链接ln -s PATH-to-ICDAR/trackA_modern data # modern 子集 ln -s PATH-to-ICDAR/at_trackA_archival data # archival 子集评估微调模型# 1) DiT-Base Mask R-CNN 在 PubLayNet 上评估 python train_net.py --config-file publaynet_configs/maskrcnn/maskrcnn_dit_base.yaml --eval-only --num-gpus 8 MODEL.WEIGHTS finetuned_checkpoint_file_path or link OUTPUT_DIR your_output_dir # 2) DiT-Large Cascade Mask R-CNN 在 ICDAR 2019 cTDaR archival 子集上评估 python train_net.py --config-file icdar19_configs/cascade/cascade_dit_large.yaml --eval-only --num-gpus 8 MODEL.WEIGHTS finetuned_checkpoint_file_path or link OUTPUT_DIR your_output_dir配置文件位于 dit/object_detection/icdar19_configs 与 dit/object_detection/publaynet_configs。关于 ICDAR 评测工具的一个已知 bug官方在集成 ICDAR2019 评测工具 时修复了其evaluate.py中过滤非 xml 文件导致 list 移除出错的问题。若自行使用原版工具评测请将下述代码# for file in gt_file_lst: # if file.split(.) ! xml: # gt_file_lst.remove(file)替换为从后往前删除避免越界/漏删for i in range(len(gt_file_lst) - 1, -1, -1): if gt_file_lst[i].split(.)[-1] ! xml: del gt_file_lst[i]微调训练以下命令均在8 张 32GB NVIDIA V100上验证# 1) DiT-Base Cascade Mask R-CNN 在 PubLayNet 上微调 python train_net.py --config-file publaynet_configs/cascade/cascade_dit_base.yaml --num-gpus 8 MODEL.WEIGHTS DiT-Base_file_path or link OUTPUT_DIR your_output_dir # 2) DiT-Large Mask R-CNN 在 ICDAR 2019 cTDaR modern 子集上微调 python train_net.py --config-file icdar19_configs/markrcnn/maskrcnn_dit_large.yaml --num-gpus 8 MODEL.WEIGHTS DiT-Large_file_path or link OUTPUT_DIR your_output_dir检测侧源码解析DiT 如何成为 FPN 骨干检测框架的核心是 dit/object_detection/ditod/backbone.pybuild_vit_fpn_backbone通过 Detectron2 的BACKBONE_REGISTRY注册为build_vit_fpn_backbone这也是 Base-RCNN-FPN.yaml 中MODEL.BACKBONE.NAME的取值内部流程为build_VIT_backbone读取MODEL.VIT.NAME如dit_base_patch16/dit_large_patch16、OUT_FEATURES、DROP_PATH、IMG_SIZE、POS_TYPE等配置实例化对应的 BEiT 结构VIT_Backbone从 ViT 的 12/24 层中取出 4 个中间层特征base 取layer3/5/7/11stride 4/8/16/32通道 768large 取layer7/11/15/23stride 4/8/16/32通道 1024与 Base-RCNN-FPN.yaml 中OUT_FEATURES与 FPNIN_FEATURES一一对应这些多尺度特征送入 FPNLastLevelMaxPool顶层再衔接 RPN 与 ROI Heads从而支持任意分辨率输入。检测训练的关键配置见 Base-RCNN-FPN.yamlPOS_TYPE: abs表示使用绝对位置编码与预训练一致BASE_LR: 0.0004、WEIGHT_DECAY: 0.05、WarmupCosineLR 学习率调度、AMP 混合精度、梯度裁剪 1.0FILTER_EMPTY_ANNOTATIONS: False保留无标注图像INPUT.CROP采用absolute_range类型、尺寸 (384, 600) 的随机裁剪增强PubLayNet 默认 5 类text、title、list、table、figure因此在ROI_HEADS.NUM_CLASSES: 5中体现。任务三FUNSD 文本检测DiT 还可作为文本检测骨干在 FUNSD 数据集上以 Mask R-CNN 微调代码位于 dit/text_detection。官方结果如下模型初始化检查点检测算法F1DiT-base-syndit_base_patch16_224_synMask R-CNN94.25DiT-large-syndit_large_patch16_224_synMask R-CNN94.29数据准备按 MMOCR 文档中 FUNSD 的步骤下载并处理数据最终目录结构应为│── data │ ├── annotations │ ├── imgs │ ├── instances_test.json │ └── instances_training.json训练与评估# 训练8 张 32GB V100 python train_net.py --config-file configs/mask_rcnn_dit_base.yaml --num-gpus 8 --resume MODEL.WEIGHTS path/to/model OUTPUT_DIR path/to/output # 评估 python train_net.py --config-file configs/mask_rcnn_dit_base.yaml --eval-only --num-gpus 8 --resume MODEL.WEIGHTS path/to/model OUTPUT_DIR path/to/output配置文件位于 dit/text_detection/configsmask_rcnn_dit_base.yaml/mask_rcnn_dit_large.yaml及共享的 Base-RCNN-FPN.yaml。评测代码基于 dit/text_detection/ditod 下的icdar_evaluation.py、funsd_evaluation.py与 Detectron2 的train_net.py流程完成训练时使用--resume可从中断处继续。引用与致谢DiT 的相关论文与代码由 Junlong Li、Yiheng Xu、Tengchao Lv、Lei Cui、Cha Zhang、Furu Wei 贡献其实现建立在 timm、Detectron2、DeiT、DINO、BEiT同仓库 beit 目录与 MPViT 等开源工作之上。引用方式misc{li2022dit, title{DiT: Self-supervised Pre-training for Document Image Transformer}, author{Junlong Li and Yiheng Xu and Tengchao Lv and Lei Cui and Cha Zhang and Furu Wei}, year{2022}, eprint{2203.02378}, archivePrefix{arXiv}, primaryClass{cs.CV} }小结本文完整覆盖了 DiT 从预训练权重、环境搭建到三大下游任务RVL-CDIP 分类、PubLayNet / ICDAR 2019 cTDaR 版面与表格检测、FUNSD 文本检测的微调与评估全流程并借助仓库源码剖析了模型结构、位置编码选择、layer scale 训练技巧以及 ViT 作为 FPN 骨干的实现机制。结合 dit/classification、dit/object_detection、dit/text_detection 三份子目录 README 与配置文件你可以按需复现各项结果并将 DiT 迁移到自己的文档智能任务中。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询