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数据集的应用场景。
- OCR文本识别应用:PubLayNet数据集可以有效地训练OCR模型,通过OCR将图像化的PDF文件中的文本转换为可用文本,在电子商务,社会保障,健康保险等各个领域应用广泛。
- 电子书籍排版:PubLayNet数据集可以识别图片、图表等内容,并将其定位在正确的区域中,使排版专业人员可以优化电子书排版效果。
- 智能化金融管理:通过PubLayNet数据集进行实时监控,自动识别财务和会计文件,从而提高数据精度和处理速度。
- 知识管理:PubLayNet数据集可以为专业人员提供更好的知识管理工具,包括知识检索和文档分析。
五、总结
本文对一个大规模的出版物版面分析数据集——PubLayNet做了多方位的阐述,包括PubLayNet标签,PubLayNet数据集标注,PubLayNet数据集选取以及PubLayNet数据集的应用场景等方面。我们相信PubLayNet数据集将为学术界和产业界带来更加广阔的发展空间。