PPOCR实践三:文档视觉问答(DOC-VQA)

一、什么是文档视觉问答(DOC-VQA)

VQA指视觉问答,主要针对图像内容进行提问和回答,DOC- VQA是VQA任务中的一种,DOC-VQA主要针对文本图像的文字内容提出问题。
PaddleOCR里的DOC- VQA算法基于Paddle NLP自然语言处理算法库进行开发,支持基于多模态方法对的语义实体识别(Semantic Entity Recognition, SER)以及关系抽取(Relation Extration, RE)任务。

主要特性如下:

  • 集成LayoutXLM模型以及PP-OCR预测引擎。
  • 支持基于多模态方法的语义实体识别 (Semantic Entity Recognition, SER) 以及关系抽取 (Relation Extraction, RE) 任务。基于 SER 任务,可以完成对图像中的文本识别与分类;基于 RE 任务,可以完成对图象中的文本内容的关系提取,如判断问题对(pair)。
  • 支持SER任务和RE任务的自定义训练。
  •  支持OCR+SER的端到端系统预测与评估。
  •  支持OCR+SER+RE的端到端系统预测。

 二、数据准备

  这里使用XFUN数据集做为实验数据集。 XFUN数据集是微软提出的一个用于KIE任务的多语言数据集,共包含七个数据集,每个数据集包含149张训练集和50张验证集

分别为:ZH(中文)、JA(日语)、ES(西班牙)、FR(法语)、IT(意大利)、DE(德语)、PT(葡萄牙)

处理好的XFUN中文数据集下载地址:XFUND数据集下载,可以运行如下指令完成中文数据集的下载和解压。

# 准备XFUND数据集,这里主要是为了获得字典文件class_list_xfun.txt
# PaddleOCR/ppstructure/vqa
curl https://paddleocr.bj.bcebos.com/ppstructure/dataset/XFUND.tar -o XFUND.tar
tar -xvf XFUND.tar

处理好的数据集如下图所示:

处理好的标注文件格式如下,txt文件中需将图片路径和图片标签用“\t"分割,其他分割方式将造成训练报错。

未处理的标注文件可使用转换脚本trans_xfund_data.py进行转换:

# PaddleOCR/ppstructure/kie/tools/trans_xfund_data.py

import json

def transfer_xfun_data(json_path=None, output_file=None):
    with open(json_path, "r", encoding='utf-8') as fin:
        lines = fin.readlines()

    json_info = json.loads(lines[0])
    documents = json_info["documents"]
    label_info = {}
    with open(output_file, "w", encoding='utf-8') as fout:
        for idx, document in enumerate(documents):
            img_info = document["img"]
            document = document["document"]
            image_path = img_info["fname"]

            label_info["height"] = img_info["height"]
            label_info["width"] = img_info["width"]

            label_info["ocr_info"] = []

            for doc in document:
                label_info["ocr_info"].append({
                    "text": doc["text"],
                    "label": doc["label"],
                    "bbox": doc["box"],
                    "id": doc["id"],
                    "linking": doc["linking"],
                    "words": doc["words"]
                })

            fout.write(image_path + "\t" + json.dumps(
                label_info, ensure_ascii=False) + "\n")

    print("===ok====")


transfer_xfun_data("../train_data/vqa/XFUND_ori/zh.train.json", "../train_data/vqa/XFUND_ori/xfun_normalize_train.txt")

 三、VI-LayoutXLM模型准备

1、下载VI-LayoutXLM模型

# PaddleOCR/train_models
curl https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar -o ser_vi_layoutxlm_xfund_infer.tar
tar -xvf ser_vi_layoutxlm_xfund_infer.tar
# PaddleOCR/train_models
curl https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar -o re_vi_layoutxlm_xfund_infer.tar
tar -xvf re_vi_layoutxlm_xfund_infer.tar

 2、SER(Semantic Entity Recognition, 语义实体识别)

 可以完成对图像中的文本识别与分类。

直接体验预测过程:

# PaddleOCR/ppstructure
python kie/predict_kie_token_ser.py   --kie_algorithm=LayoutXLM   --ser_model_dir=../train_models/ser_vi_layoutxlm_xfund_infer   --ser_dict_path=./vqa/XFUND/class_list_xfun.txt   --vis_font_path=../doc/fonts/simfang.ttf   --ocr_order_method="tb-yx" --output=./output/ser_vi_layoutxlm_xfund_zh/  --image_dir=./vqa/pjtzs 

结果如下:

3、RE(Relation Extration, 关系抽取)

 可以完成对图像中的文本内容的关系提取,如判断问题对(pair)
直接体验预测过程:

# PaddleOCR/ppstructure
python kie/predict_kie_token_ser_re.py --kie_algorithm=LayoutXLM --re_model_dir=../train_models/re_vi_layoutxlm_xfund_infer --ser_model_dir=../train_models/ser_vi_layoutxlm_xfund_infer --use_visual_backbone=False --vis_font_path=../doc/fonts/simfang.ttf --ocr_order_method="tb-yx" --ser_dict_path=./vqa/XFUND/class_list_xfun.txt --output=./output/ser_re_vi_layoutxlm_xfund_zh/ --image_dir=./vqa/XFUND/zh_train/image/zh_train_0.jpg

 结果如下:

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值