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/zh-hk/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

發表回復

登錄後才能評論