PaddleOCR文字检测模型训练
本文档主要介绍PaddleOCR中文字检测模型的训练、评估及测试。
训练环境
- CentOS 7
- python3.7
- paddlepaddle-gpu 2.0.0rc0
数据准备
自标注数据
- 将所有训练图片放在icdar_c4_train_imgs文件夹下,所有测试图片放在ch4_test_images目录下,以免多次标注产生多次修改代码问题。
- 将所有图片格式统一改成.jpg或者统一改成.png,目标为图片保持统一格式。
- 将标注生成的XML文件放在一个目录中,训练数据XML和测试数据XML分开。
然后执行下面的代码,把其中的xml_dir、train_file_name、train_file_label_name替换成自己的参数,执行完后会在train_file_name目录下生成一个train_file_label_name的txt文件,即为label文件。label文件与图片一起组成paddleOCR数据集。
#!/usr/local/env python3
# -*- coding: utf-8 -*-
"""
Auther: BurningSilence
date: 2020/11/16 下午5:13
DESC:
"""
import os
import xml.etree.ElementTree as et
import math
def edit_xml(xml_file, train_file_name):
"""
VOC转换为PaddleOCR label
:param xml_file:xml文件的路径
:return: xml文件对应的label
"""
x0 = y0 = x1 = y1 = x2 = y2 = x3 = y3 = 0
tree = et.parse(xml_file)
root = tree.getroot()
root.attrib = None
img_name = root.find("path").text.split("/")[-1]
objs = root.findall('object')
transcription_arr = []
for obj in objs:
dict_bak = {}
points_arr = []
obj_type = obj.find('type')
name = obj.find('name')
type = obj_type.text
if type == 'bndbox':
obj_bnd = obj.find('bndbox')
xmin = int(float(obj_bnd.find('xmin').text))
ymin = int(float(obj_bnd.find('ymin').text))
xmax = int(float(obj_bnd.find('xmax').text))
ymax = int(float(obj_bnd.find('ymax').text))
x0, y0 = xmin, ymin
x1, y1 = xmax, ymin
x2, y2 = xmin, ymax
x3, y3 = xmax, ymax
elif type == 'robndbox':
obj_bnd = obj.find('robndbox')
cx = float(obj_bnd.find('cx').text)
cy = float(obj_bnd.find('cy').text)
w = float(obj_bnd.find('w').text)
h = float(obj_bnd.find('h').text)
angle = float