PubLayNet:一份大规模出版物版面分析数据集

PubLayNet是一个大规模的出版物版面分析数据集,包含著名的ICDAR 2017比赛中的50个出版物,其中包含了大约9000个页面并且包含超过100万的物体实例。它被广泛地用来训练和评估出版物版面分析的深度神经网络。

在本篇文章中,我们将从”PubLayNet标签”,”PubLayNet数据集标注”,”PubLayNet数据集选取”等多个方面对PubLayNet进行详细的阐述。

一、PubLayNet标签

PubLayNet标签是针对图像中的对象实例进行定义的。它是由33个详细的object类别和两个为st-基础的类别组成的。object类别包括表格、列表、段落、图片、旋转文字框等等。而基础类别包括文本和非文本对象。下面是对PubLayNet标签的完整代码示例:

{
    "attributes":{},
    "description":" ",
    "folder":" ",
    "filename":" ",
    "regions":[
        {      
        "region_attributes":
        {"category":"text"},
        "shape_attributes": {
            "all_points_x":[...],
            "all_points_y":[...],
            "name":"polygon"
            }   
        },
        {
        "region_attributes":
        {"category":"figure"},
        "shape_attributes": {
            "all_points_x":[...],
            "all_points_y":[...],
            "name":"polygon"
            }
        },
        ... ]
}

二、PubLayNet数据集标注

为了准确地注释PubLayNet标签,我们使用了一个基于BoundingBox的标注方式,并确定了一组标准化的对象实例和物体类型。PubLayNet数据集标注的主要过程是:选择物体实例,确定物体边界框,并确定物体类型。下面是PubLayNet数据集标注的完整代码示例:

           class Annotation(object):
           def __init__(self,filename):
           self.filename = filename
           self.width = 0
           self.height = 0
           self.objects = []
           def save_file(self):
           et = ElementTree.Element('annotation')
           etn = ElementTree.Element('filename')
           etn.text = self.filename
           etw = ElementTree.Element('size')
           etw1 = ElementTree.Element('width')
           etw1.text = str(self.width)
           etw2 = ElementTree.Element('height')
           etw2.text = str(self.height)
           etw.append(etw1)
           etw.append(etw2)
           et.append(etn)
           et.append(etw)
           for obj in self.objects:
           eo = ElementTree.Element('object')
           otype = ElementTree.Element('type')
           otype.text = obj.obj_class
           eo.append(otype)
           obs = ElementTree.Element('bounding_box')
           o1 = ElementTree.Element('xmin')
           o1.text = str(obj.left)
           o2 = ElementTree.Element('ymin')
           o2.text = str(obj.top)
           o3 = ElementTree.Element('xmax')
           o3.text = str(obj.right)
           o4 = ElementTree.Element('ymax')
           o4.text = str(obj.bottom)
           obs.append(o1)
           obs.append(o2)
           obs.append(o3)
           obs.append(o4)
           eo.append(obs)
           et.append(eo)
           ElementTree.ElementTree(et).write(open(self.filename,'w'))

三、PubLayNet数据集选取

PubLayNet数据集的选取是基于以下三个条件进行筛选。1)版面复杂度。2)版面大小。3)数据集多样性。我们采用了一个梯度样式的策略来选择数据集的大小,以确保所选数据集的版面摩擦和数据多样性。下面是PubLayNet数据集选取的完整代码示例:

trainSamples = []
valSamples = []
for idx,pdf in tqdm(enumerate(pdfNames)):
    jsonFilename = os.path.join(data_dir, os.path.basename(pdf).replace('.pdf','.json'))
    if not os.path.exists(jsonFilename):
        continue
    with open(jsonFilename, 'r') as file:
        data = json.load(file)
    pageId = 0
    for page in data['pages']:
        maxWidth, maxHeight = page['width'],page['height']
        tableRegions,figureRegions,textRegions = [],[],[]
        for region in page['regions']:
            bbs = region['boundingBox']
            if region['category'] == 'table':
                tableRegions.append(bbs)
            elif region['category'] == 'figure':
                figureRegions.append(bbs)
            elif region['category'] == 'text':
                textRegions.append(bbs)
        if len(textRegions) < 1 or len(figureRegions) < 1:
            continue
        selectedRegions = tableRegions + figureRegions + textRegions
        if len(selectedRegions) < 10:
            continue
        sample = {'pdf':pdf,'selectedRegions': selectedRegions,'pageId':pageId,
                     'maxWidth':maxWidth,'maxHeight':maxHeight}
        if idx in valIndices:
            valSamples.append(sample)
        else:
            trainSamples.append(sample)
        pageId += 1

四、PubLayNet应用场景

PubLayNet数据集可以被广泛地用来训练和评估出版物版面分析的深度神经网络,尤其是在设计理论和特定应用场景中减轻其使用方案的人力和开发成本等方面,具有显著的优势。下面列举了一些PubLayNet数据集的应用场景。

1.OCR文本识别应用:PubLayNet数据集可以有效地训练OCR模型,通过OCR将图像化的PDF文件中的文本转换为可用文本,在电子商务,社会保障,健康保险等各个领域应用广泛。

2.电子书籍排版:PubLayNet数据集可以识别图片、图表等内容,并将其定位在正确的区域中,使排版专业人员可以优化电子书排版效果。

3.智能化金融管理:通过PubLayNet数据集进行实时监控,自动识别财务和会计文件,从而提高数据精度和处理速度。

4.知识管理:PubLayNet数据集可以为专业人员提供更好的知识管理工具,包括知识检索和文档分析。

五、总结

本文对一个大规模的出版物版面分析数据集——PubLayNet做了多方位的阐述,包括PubLayNet标签,PubLayNet数据集标注,PubLayNet数据集选取以及PubLayNet数据集的应用场景等方面。我们相信PubLayNet数据集将为学术界和产业界带来更加广阔的发展空间。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/258334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:49
下一篇 2024-12-15 12:49

相关推荐

  • Python读取CSV数据画散点图

    本文将从以下方面详细阐述Python读取CSV文件并画出散点图的方法: 一、CSV文件介绍 CSV(Comma-Separated Values)即逗号分隔值,是一种存储表格数据的…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • 如何用Python统计列表中各数据的方差和标准差

    本文将从多个方面阐述如何使用Python统计列表中各数据的方差和标准差, 并给出详细的代码示例。 一、什么是方差和标准差 方差是衡量数据变异程度的统计指标,它是每个数据值和该数据值…

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python两张表数据匹配

    本篇文章将详细阐述如何使用Python将两张表格中的数据匹配。以下是具体的解决方法。 一、数据匹配的概念 在生活和工作中,我们常常需要对多组数据进行比对和匹配。在数据量较小的情况下…

    编程 2025-04-29
  • Python爬取公交数据

    本文将从以下几个方面详细阐述python爬取公交数据的方法: 一、准备工作 1、安装相关库 import requests from bs4 import BeautifulSou…

    编程 2025-04-29
  • Python数据标准差标准化

    本文将为大家详细讲述Python中的数据标准差标准化,以及涉及到的相关知识。 一、什么是数据标准差标准化 数据标准差标准化是数据处理中的一种方法,通过对数据进行标准差标准化可以将不…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29
  • Python如何打乱数据集

    本文将从多个方面详细阐述Python打乱数据集的方法。 一、shuffle函数原理 shuffle函数是Python中的一个内置函数,主要作用是将一个可迭代对象的元素随机排序。 在…

    编程 2025-04-29
  • Python根据表格数据生成折线图

    本文将介绍如何使用Python根据表格数据生成折线图。折线图是一种常见的数据可视化图表形式,可以用来展示数据的趋势和变化。Python是一种流行的编程语言,其强大的数据分析和可视化…

    编程 2025-04-29

发表回复

登录后才能评论