Table Recognition Metric: 表格识别算法评测工具包及相关评测基准数据集

Table Recognition Metric

PyPI SemVer2.0

使用说明:

  1. Install package by pypi.
    pip install table_recognition_metric
    
  2. Run by command line.
    • Usage:
      $ table_recognition_metric -h
      usage: table_recognition_metric [-h] [-gt GT_HTML] [-pred PRED_HTML]
      
      optional arguments:
      -h, --help            show this help message and exit
      -gt GT_HTML, --gt_html GT_HTML
      -pred PRED_HTML, --pred_html PRED_HTM
      
    • Example:
      $ table_recognition_metric -gt '<html><body><table><tr><td>购买方</td><td colspan="5">纳税人识别号地址、电记开户行及账号</td><td>密码区</td><td colspan="4"></td></tr><tr><td colspan="2">货物或应税劳务、服务名称理肤泉清痘旅行装控油祛痘调节水油平衡理肤泉特安舒缓修护乳40ml合计</td><td>规格型号</td><td>单位</td><td>11</td><td colspan="3"></td><td></td><td>税率17%17%</td><td></td></tr><tr><td colspan="2">价税合计(大写)</td><td colspan="9"></td></tr><tr><td>销售方</td><td colspan="5">纳税人识别号地址、电话开户行及账号</td><td>备注</td><td colspan="4"></td></tr></table></body></html>' -pred ''
      
      # 0.0
      
  3. Run by script.
    from table_recognition_metric import TEDS
    
    teds = TEDS()
    
    gt_html = '<html><body><table><tr><td>购买方</td><td colspan="5">纳税人识别号地址、电记开户行及账号</td><td>密码区</td><td colspan="4"></td></tr><tr><td colspan="2">货物或应税劳务、服务名称理肤泉清痘旅行装控油祛痘调节水油平衡理肤泉特安舒缓修护乳40ml合计</td><td>规格型号</td><td>单位</td><td>11</td><td colspan="3"></td><td></td><td>税率17%17%</td><td></td></tr><tr><td colspan="2">价税合计(大写)</td><td colspan="9"></td></tr><tr><td>销售方</td><td colspan="5">纳税人识别号地址、电话开户行及账号</td><td>备注</td><td colspan="4"></td></tr></table></body></html>'
    pred_html = '<html><body><table><tr><td>购买方</td><td colspan="5">纳税人识别号地址、电记开户行及账号</td><td>密码区</td><td colspan="4"></td></tr><tr><td colspan="2">货物或应税劳务、服务名称理肤泉清痘旅行装控油祛痘调节水油平衡理肤泉特安舒缓修护乳40ml合计</td><td>规格型号</td><td>单位</td><td>11</td><td colspan="3"></td><td></td><td>税率17%17%</td><td></td></tr><tr><td colspan="2">价税合计(大写)</td><td colspan="9"></td></tr><tr><td>销售方</td><td colspan="5">纳税人识别号地址、电话开户行及账号</td><td>备注</td><td colspan="4"></td></tr></table></body></html>'
    
    score = teds(gt_html, pred_html)
    print(score)
    
数据集上评测
  • 这里以rapid-table在表格数据集liekkas/table_recognition上的评测代码,大家可以以此类推。
  • 安装必要的包
    pip install modelscope==1.5.2
    pip install rapid_table
    
  • 运行测试
    from modelscope.msdatasets import MsDataset
    from rapid_table import RapidTable
    
    from table_recognition_metric import TEDS
    
    test_data = MsDataset.load(
        "table_recognition",
        namespace="liekkas",
        subset_name="default",
        split="test",
    )
    table_engine = RapidTable()
    teds = TEDS()
    
    content = []
    for one_data in test_data:
        img_path = one_data.get("image:FILE")
        gt = one_data.get("label")
    
        pred_str, _ = table_engine(img_path)
        scores = teds(gt, pred_str)
        content.append(scores)
        print(f"{img_path}\t{scores:.5f}")
    
    avg = sum(content) / len(content)
    print(avg)
    # 0.5847187558587787
    

Tree-EditDistance-based Similarity (TEDS)

  • TEDS是IBM在论文《Image-based table recognition: data, model, and evaluation》中提出的。

  • 之前提出的评测算法,主要是将一个表格的ground truthrecognition result各自展平为非空cell两两之间的邻接关系列表。然后通过比较这两个列表,来计算precision, recall和F1-score。该metric主要存在两个明显问题:

    1. 由于它只检查非空单元格之间的直接邻接关系,因此它无法检测由空单元格和超出直接邻居的单元格未对齐引起的错误;
    2. 由于它通过精准匹配来检查关系,因此它没有衡量fine-grained单元格内容识别性能的机制。
  • 针对以上问题,TEDS通过以下方法予以解决:

    1. 通过在全局树结构级别检查识别结果,使其能够识别它识别所有类型的结构错误,来解决上述问题1;
    2. tree-edit的操作是节点替换时,计算对应的字符串编辑距离,来解决上述问题2。
  • 计算公式:

    T E D S ( T a , T b ) = 1 − E d i t D i s t ( T a , T b ) m a x ( ∣ T a ∣ , ∣ T b ∣ ) TEDS(T_{a}, T_{b}) = 1 - \frac{EditDist(T_{a}, T_{b})}{max(|T_{a}|, |T_{b}|)} TEDS(Ta,Tb)=1max(Ta,Tb)EditDist(Ta,Tb)
    其中, E d i t D i s t EditDist EditDist指的是tree-edit distance, ∣ T ∣ |T| T指的是在 T T T中节点的数量。一个表格还原算法在一系列测试集上识别效果可以定义为:测试集中所有样例逐个计算其ground truthpredict result之间的TEDS,最终对所有样例的TEDS求均值得到最终得分。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 数据预处理:Cifar10数据集包含50000个训练图片和10000个测试图片,每个图片大小为32x32x3,其中3示RGB三通道。我们需要将这些图片转换为SVM可以处理的格式,即将每个图片转换为一个向量。 2. 特征提取:由于Cifar10数据集中的图片比较复杂,我们需要使用一些特征提取技术来将图片转换为向量。常用的特征提取方法包括:灰度化、直方图均衡化、尺度不变特征变换(SIFT)、方向梯度直方图(HOG)等。在本算法中,我们使用HOG算法提取图片的特征。 3. 训练模型:使用SVM算法训练模型,可以使用LibSVM等开源工具库来实现。在训练SVM模型时,需要设置SVM的参数,如选择核函数、调整惩罚系数等。 4. 测试模型:使用训练好的SVM模型对测试集进行测试,并计算准确率和召回率等评价指标。 5. 优化模型:通过调整SVM的参数、采用不同的特征提取算法等方式来优化模型的性能。 代码示例: ```python import numpy as np import cv2 from sklearn import svm from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from skimage.feature import hog from keras.datasets import cifar10 # 加载数据集 (x_train, y_train), (x_test, y_test) = cifar10.load_data() # 将数据集转换为向量 def get_features(data): features = [] for i in range(len(data)): img = data[i] img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) img = cv2.resize(img, (32, 32)) fd = hog(img, orientations=8, pixels_per_cell=(4, 4), cells_per_block=(2, 2), transform_sqrt=True, block_norm="L1") features.append(fd) features = np.array(features) return features x_train = get_features(x_train) x_test = get_features(x_test) # 数据标准化 scaler = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) # 划分训练集和验证集 x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=42) # 训练SVM模型 clf = svm.SVC(kernel='linear', C=1) clf.fit(x_train, y_train) # 预测结果 y_pred = clf.predict(x_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) ``` 参考文献: [1] C. Cortes and V. Vapnik, “Support-vector networks,” Machine Learning, vol. 20, pp. 273–297, 1995. [2] N. Dalal and B. Triggs, “Histograms of oriented gradients for human detection,” in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2005, pp. 886–893. [3] https://github.com/opencv/opencv/tree/master/samples/python/hog.py [4] https://github.com/opencv/opencv/blob/master/samples/python/digits.py [5] https://www.kaggle.com/c/cifar-10 [6] https://scikit-learn.org/stable/modules/svm.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值