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-hant/n/258334.html
微信掃一掃
支付寶掃一掃