天天看點

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

簡介

本項目是參加飛槳正常賽:中文場景文字識别(已結束)的項目,項目score為85.87141。

生成的預測檔案為work/PaddleOCR中的test2.txt檔案

項目任務為識别包含中文文字的街景圖檔,準确識别圖檔中的文字

本項目源于https://aistudio.baidu.com/aistudio/projectdetail/681670,在此基礎上進行修改

感謝開發者為開源社群做出的貢獻

運作代碼請點選:https://aistudio.baidu.com/aistudio/projectdetail/1757733

歡迎各位fork,star,以及讨論分享。

本方案在最終測試得到的分數

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

比原作者提供最優的方案略有漲點,并且實作了正确輸出結果。

賽題說明

賽題背景

中文場景文字識别技術在人們的日常生活中受到廣泛關注,具有豐富的應用場景,如:拍照翻譯、圖像檢索、場景了解等。然而,中文場景中的文字面臨着包括光照變化、低分辨率、字型以及排布多樣性、中文字元種類多等複雜情況。如何解決上述問題成為一項極具挑戰性的任務。

本次飛槳正常賽以 中文場景文字識别 為主題,由2019第二屆中國AI+創新創業全國大賽降低難度而來,提供大規模的中文場景文字識别資料,旨在為研究者提供學術交流平台,進一步推動中文場景文字識别算法與技術的突破。

比賽任務

要求選手必須使用飛槳對圖像區域中的文字行進行預測,傳回文字行的内容。

資料集介紹

本次競賽資料集共包括33萬張圖檔,其中21萬張圖檔作為訓練集,12萬張作為測試集。資料集采自中國街景,并由街景圖檔中的文字行區域(例如店鋪标牌、地标等等)截取出來而形成。所有圖像都經過一些預處理,将文字區域利用仿射變化,等比映射為一張高為48像素的圖檔,如下圖1所示:

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

(a) 标注:魅派內建吊頂

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

(b) 标注:母嬰用品連鎖

圖1

标注檔案

平台提供的标注檔案為.txt檔案格式。樣例如下:

h w name value
128 48 img_1.jpg 文本1
56 48 img_2.jpg 文本2

其中,檔案中的四列分别是圖檔的寬、高、檔案名和文字标注。

比賽重點:

準确識别圖檔的文字,提升準确率

比賽難點:

準确識别并且把輸出結果正确輸入文檔

安裝第三方庫

将安裝目錄設定為external-libraries,這樣項目重新開機後安裝的庫不會消失。

!mkdir /home/aistudio/external-libraries
import sys
sys.path.append('/home/aistudio/external-libraries')
! pip install tqdm paddlepaddle-gpu==1.7.1.post97 -i https://mirror.baidu.com/pypi/simple
! pip install pqi
! pqi use aliyun
! pip install tqdm imgaug lmdb matplotlib opencv-python Pillow python-Levenshtein PyYAML trdg anyconfig # -t /home/aistudio/external-libraries
           

解壓檔案

壓縮包内含訓練集圖檔、訓練集圖檔資訊

import os
os.chdir('/home/aistudio/data/data10879')
! tar -zxf train_img.tar.gz
#! tar -zxf test_img.tar.gz 
           

預處理

  • 檔案 langconv(language convert),這個檔案用來把繁體字轉成簡體字
  • 函數 read_ims_list:讀取train.list檔案,生成圖檔的資訊字典
  • 函數 modify_ch:對标簽label進行修改,進行四項操作,分别是“繁體->簡體”、“大寫->小寫”、“删除空格”、“删除符号”。
  • 函數 pipeline:調用定義的函數,對訓練資料進行初步處理。
from work.langconv import Converter
import codecs
import random
import sys
import os
from os.path import join as pjoin

os.chdir('/home/aistudio')
sys.path.append('/home/aistudio/work')
def read_ims_list(path_ims_list):
    """
    讀取 train.list 檔案
    """
    ims_info_dic = {}
    with open(path_ims_list, 'r', encoding='utf-8') as f:
        for line in f:
            parts = line.strip().split(maxsplit=3)
            w, h, file, label = parts[0], parts[1], parts[2], parts[3]
            ims_info_dic[file] = {'label': label, 'w': int(w)}
    return ims_info_dic
    

def modify_ch(label):
    # 繁體 -> 簡體
    label = Converter("zh-hans").convert(label)

    # 大寫 -> 小寫
    label = label.lower()

    # 删除空格
    label = label.replace(' ', '')

    # 删除符号
    for ch in label:
        if (not '\u4e00' <= ch <= '\u9fff') and (not ch.isalnum()):
            label = label.replace(ch, '')

    return label

def save_txt(data, file_path):
    """
    将一個list的數組寫入txt檔案裡
    :param data:
    :param file_path:
    :return:
    """
    if not isinstance(data, list):
        data = [data]
    with open(file_path, mode='w', encoding='utf8') as f:
        f.write('\n'.join(data))

def pipeline(dataset_dir):
    path_ims        = pjoin(dataset_dir, "train_images")
    path_ims_list   = pjoin(dataset_dir, "train.list")
    path_train_list = pjoin('/home/aistudio/work', "train.txt")
    path_test_list  = pjoin('/home/aistudio/work', "test.txt")
    path_label_list = pjoin('/home/aistudio/work', "dict.txt")

    # 讀取資料資訊
    file_info_dic = read_ims_list(path_ims_list)

    # 建立 train.txt
    class_set = set()
    data_list = []
    for file, info in file_info_dic.items():
        label = info['label']
        label = modify_ch(label)

        # 異常: 标簽為空
        if label == '':
            continue

        for e in label:
            class_set.add(e)
        data_list.append("{0}\t{1}".format(pjoin('/home/aistudio/',path_ims, file), label))
        
    # 建立 label_list.txt
    class_list = list(class_set)
    class_list.sort()
    print("class num: {0}".format(len(class_list)))
    with codecs.open(path_label_list, "w", encoding='utf-8') as label_list:
        for id, c in enumerate(class_list):
            # label_list.write("{0}\t{1}\n".format(c, id))
            label_list.write("{0}\n".format(c))

    # 随機切分
    random.shuffle(data_list)
    val_len = int(len(data_list) * 0.05)
    val_list = data_list[-val_len:]
    train_list = data_list[:-val_len]
    print('訓練集數量: {}, 驗證集數量: {}'.format(len(train_list),len(val_list)))
    save_txt(train_list,path_train_list)
    save_txt(val_list,path_test_list)
    
random.seed(0)
pipeline(dataset_dir="data/data10879")
           
class num: 3827
訓練集數量: 200342, 驗證集數量: 10544
           
os.chdir('/home/aistudio/work/PaddleOCR/')
!pwd
           
/home/aistudio/work/PaddleOCR
           

簡要介紹方案

思路介紹

使用PaddleOCR庫進行訓練和預測

個人方案亮點

在現有的資料中進行 fine-tune,并且正确輸出結果

具體方案分享–trian

大緻思路和步驟:

因為最後的評定标準是準确率,是以優選考慮Resnet,常用的是Resnet34結構,是以Backbone選用Resnet34。在閱讀PaddleOCR庫資料,有表明CTC比Attention具有優勢,

尤其是對長文本識别,是以Head,Loss選用了CTC子產品。Optimizer則選用常用的Adam。

總結:

Backbone: Resnet34

Head: CTC

Loss: CTC

Optimizer: Adam

由于PaddleOCR內建度、子產品化非常的好,是以可以在work/PaddleOCR/configs/rec/rec_r34_vd_none_bilstm_ctc.yml,選擇适合比賽所需要的結構,隻需要改相對應的參數。

大緻的架構選擇完畢,就進行訓練,在訓練前期學習率可以選擇大一點,到後期的學習率要适當的降低,這是一個常用的提分trick。batch_size可以适當的提高,在AI

studio上,我本想用batch_size:256,但是記憶體爆了,隻好相對于的降低一點。batch_size小了,學習率也要相對應降低一點。

特别說明

對于PaddleOCR提供的配置檔案rec_r34_vd_none_bilstm_ctc.yml我做出了如下修改

1.将epoch_num改為120

2.将train_batch_size_per_card改為192(因為GPU限制的原因,本來想改為256,但是爆記憶體了,就選擇了192)

3.将test_batch_size_per_card改為128

4.将base_lr改為0.00001

經測試這樣能提高score

用https://aistudio.baidu.com/aistudio/projectdetail/681670 作者的預訓練權重繼續訓練,進而得到最優結果。最優預測權重checkpionts放在work/PaddleOCR/output/rec_CRNN_aug_341/best_accuracy。

模型訓練

! export PYTHONPATH=$PYTHONPATH:.
ONPATH:.
! python tools/train.py -c configs/rec/rec_r34_vd_none_bilstm_ctc.yml
           
2021-05-08 11:49:40,272-INFO: {'Global': {'algorithm': 'CRNN', 'use_gpu': True, 'epoch_num': 120, 'log_smooth_window': 20, 'print_batch_step': 100, 'save_model_dir': 'output/rec_CRNN_aug_341', 'save_epoch_step': 1, 'eval_batch_step': 1800, 'train_batch_size_per_card': 192, 'test_batch_size_per_card': 128, 'image_shape': [3, 32, 256], 'max_text_length': 64, 'character_type': 'ch', 'loss_type': 'ctc', 'reader_yml': './configs/rec/rec_icdar15_reader.yml', 'pretrain_weights': '/home/aistudio/work/PaddleOCR/model/latest', 'checkpoints': None, 'save_inference_dir': '/home/aistudio/work/test', 'character_dict_path': '/home/aistudio/work/dict.txt'}, 'Architecture': {'function': 'ppocr.modeling.architectures.rec_model,RecModel'}, 'Backbone': {'function': 'ppocr.modeling.backbones.rec_resnet_vd,ResNet', 'layers': 34}, 'Head': {'function': 'ppocr.modeling.heads.rec_ctc_head,CTCPredict', 'encoder_type': 'rnn', 'SeqRNN': {'hidden_size': 256}}, 'Loss': {'function': 'ppocr.modeling.losses.rec_ctc_loss,CTCLoss'}, 'Optimizer': {'function': 'ppocr.optimizer,AdamDecay', 'base_lr': 1e-05, 'beta1': 0.9, 'beta2': 0.999}, 'TrainReader': {'reader_function': 'ppocr.data.rec.dataset_traversal,SimpleReader', 'num_workers': 8, 'img_set_dir': '/', 'label_file_path': '/home/aistudio/work/train.txt'}, 'EvalReader': {'reader_function': 'ppocr.data.rec.dataset_traversal,SimpleReader', 'img_set_dir': '/', 'label_file_path': '/home/aistudio/work/test.txt'}, 'TestReader': {'reader_function': 'ppocr.data.rec.dataset_traversal,SimpleReader', 'infer_img': '/home/aistudio/work/PaddleOCR/test_images'}}
import ujson error: No module named 'ujson' use json
2021-05-08 11:49:43,523-INFO: places would be ommited when DataLoader is not iterable
W0508 11:49:44.193677   256 device_context.cc:237] Please NOTE: device: 0, CUDA Capability: 70, Driver API Version: 11.0, Runtime API Version: 9.0
W0508 11:49:44.197623   256 device_context.cc:245] device: 0, cuDNN Version: 7.3.
2021-05-08 11:49:45,223-INFO: Loading parameters from /home/aistudio/work/PaddleOCR/model/latest...
2021-05-08 11:49:46,298-INFO: Finish initing model from /home/aistudio/work/PaddleOCR/model/latest
I0508 11:49:46.319135   256 parallel_executor.cc:440] The Program will be executed on CUDA using ParallelExecutor, 1 cards are used, so 1 programs are executed in parallel.
I0508 11:49:46.342715   256 build_strategy.cc:365] SeqOnlyAllReduceOps:0, num_trainers:1
I0508 11:49:46.372932   256 parallel_executor.cc:307] Inplace strategy is enabled, when build_strategy.enable_inplace = True
I0508 11:49:46.387321   256 parallel_executor.cc:375] Garbage collection strategy is enabled, when FLAGS_eager_delete_tensor_gb = 0
^C
pid 324 terminated, terminate group 255...
pid 322 terminated, terminate group 255...
           

把比賽的測試集解壓到/home/aistudio/work/PaddleOCR

!unzip -oq /home/aistudio/external-libraries/test_images.zip -d /home/aistudio/work/PaddleOCR
           

模型預測

pyspark包裡有包含re.split()

!pip install pyspark
           
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting pyspark
[?25l  Downloading https://mirrors.aliyun.com/pypi/packages/45/b0/9d6860891ab14a39d4bddf80ba26ce51c2f9dc4805e5c6978ac0472c120a/pyspark-3.1.1.tar.gz (212.3MB)
[K     |████████████████████████████████| 212.3MB 10.5MB/s eta 0:00:01    |██████████████▋                 | 97.2MB 7.6MB/s eta 0:00:16     |█████████████████████           | 138.8MB 11.9MB/s eta 0:00:07     |███████████████████████▋        | 156.9MB 10.7MB/s eta 0:00:06
[?25hCollecting py4j==0.10.9 (from pyspark)
[?25l  Downloading https://mirrors.aliyun.com/pypi/packages/9e/b6/6a4fb90cd235dc8e265a6a2067f2a2c99f0d91787f06aca4bcf7c23f3f80/py4j-0.10.9-py2.py3-none-any.whl (198kB)
[K     |████████████████████████████████| 204kB 11.5MB/s eta 0:00:01
[?25hBuilding wheels for collected packages: pyspark
  Building wheel for pyspark (setup.py) ... [?25ldone
[?25h  Created wheel for pyspark: filename=pyspark-3.1.1-py2.py3-none-any.whl size=212767605 sha256=700ba8bab5aeecc38be58bd68db13bfbc542bb8fef88a340be83ee70e0b5e381
  Stored in directory: /home/aistudio/.cache/pip/wheels/a2/ed/29/497d35d1af7c0f79fe21a1f38c2a2beded1c92f3fd3863a6bf
Successfully built pyspark
Installing collected packages: py4j, pyspark
Successfully installed py4j-0.10.9 pyspark-3.1.1
           

具體方案分享–test

經過幾輪訓練,Loss穩定了即可拿來進行預測。原作者輸出文檔存在2點錯誤,1.是沒有标題。2.預測結果是亂序的。 進行送出的會出現下圖錯誤。

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

是以要進行必要的修改。對症下藥,第一點.沒有标題。我們可以在預測結果輸出前,先對預測文檔進行寫入标題的操作。

是以我們先找到執行預測檔案:work/PaddleOCR/tools/infer_rec.py。 我們可以看見此檔案第96行左右 有

f = open('test2.txt',mode='w',encoding='utf8')

,即創

建輸出檔案并授予可輸入的權限。是以我們可以在它的下面進行寫入标題的操作:

f.write('new_name\tvalue\n')

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

這樣就解決了第一個錯誤。

第二個錯誤,是把預測結果變成有序的。方案有2個:1.是對輸入預測圖檔進行排序後再送入預測。2.是對輸出結果的文檔進行排序。

我們優選第一個方案,因為難度比較低,也比較符合操作思維。

我們首先要找出輸入預測圖檔的所在代碼。我們可以看到99-105行左右是執行了預測操作。

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

我們要特别注意img,img_path這兩個參數。它是讀取了blobs的參數,我們又轉而去看到85行左右,它讀取了執行test操作,總而言之,應該就是進行test操作。

接下來留意87-88行左右

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

我們可以大緻知道它的意思建立了一個List存放了infer_img的路徑。這裡有個小竅門,就是我們要善用print函數。 我們可以把它輸出的List給print出來看看,

輸出看了會發現,存放的路徑居然和預測結果順序是一樣的,我們也就是找到我們需要修改的地方了。也就是隻要我們把存放的路徑給整理成有序的,輸出的結果

就可以符合比賽要求。

這是我們就可以用sort()函數。是以我們可以再它們後面,增加一行代碼:

infer_list.sort()

。這時候我們可以執行預測檔案檢視結果,也可以直接進

行print()函數,看存放的路徑變得如何了。個人傾向于第二個方案。然後我們發現預測結果順序變了,變得相對規則了。但是發現從預測結果是

0.jpg xxx

1.jpg xxx

10.jpg xxx

11.jpg xxx

查了資料發現這是 因為數字資料類型是字元串,不是整型。是以我們需要把這些數字的類型把字元串轉為整型,可以調用int()函數。

但是我們輸出存放路徑的List發現,數字之前還有一堆路徑:/home/aistudio/work/PaddleOCR/test_images并且還有字尾.jpg

這時候我們可以用split函數進行路徑的分割,因為我們要提取中間的數字并進行排序,是以我們要用調用兩次split函數,即re.split(),并用’|'進行分開。

最後把無關的路徑和字尾删去,并進行整型轉換,便可完成我們的任務。

在89行 增加下圖的代碼

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料

此時我們可以print檢視路徑是否已經有序排列了,經檢視是有序的,便可執行預測檔案,從輸出結果來看,我們完成了比賽送出的要求。

PaddleOCR實踐之飛槳正常賽:中文場景文字識别簡介本方案在最終測試得到的分數賽題說明安裝第三方庫解壓檔案預處理簡要介紹方案具體方案分享–trian特别說明模型訓練把比賽的測試集解壓到/home/aistudio/work/PaddleOCR模型預測具體方案分享–test模型應用結果分析總結飛槳使用體驗以及給其他選手學習飛槳的建議參考資料
! python3 tools/infer_rec.py -c configs/rec/rec_r34_vd_none_bilstm_ctc.yml -o Global.checkpoints=output/rec_CRNN_aug_341/best_accuracy
           
2021-04-20 22:24:32,347-INFO: {'Global': {'algorithm': 'CRNN', 'use_gpu': True, 'epoch_num': 120, 'log_smooth_window': 20, 'print_batch_step': 100, 'save_model_dir': 'output/rec_CRNN_aug_341', 'save_epoch_step': 1, 'eval_batch_step': 1800, 'train_batch_size_per_card': 192, 'test_batch_size_per_card': 128, 'image_shape': [3, 32, 256], 'max_text_length': 64, 'character_type': 'ch', 'loss_type': 'ctc', 'reader_yml': './configs/rec/rec_icdar15_reader.yml', 'pretrain_weights': '/home/aistudio/work/PaddleOCR/output/rec_CRNN_aug_341/best_accuracy', 'checkpoints': 'output/rec_CRNN_aug_341/best_accuracy', 'save_inference_dir': '/home/aistudio/work/test', 'character_dict_path': '/home/aistudio/work/dict.txt'}, 'Architecture': {'function': 'ppocr.modeling.architectures.rec_model,RecModel'}, 'Backbone': {'function': 'ppocr.modeling.backbones.rec_resnet_vd,ResNet', 'layers': 34}, 'Head': {'function': 'ppocr.modeling.heads.rec_ctc_head,CTCPredict', 'encoder_type': 'rnn', 'SeqRNN': {'hidden_size': 256}}, 'Loss': {'function': 'ppocr.modeling.losses.rec_ctc_loss,CTCLoss'}, 'Optimizer': {'function': 'ppocr.optimizer,AdamDecay', 'base_lr': 8e-06, 'beta1': 0.9, 'beta2': 0.999}, 'TrainReader': {'reader_function': 'ppocr.data.rec.dataset_traversal,SimpleReader', 'num_workers': 8, 'img_set_dir': '/', 'label_file_path': '/home/aistudio/work/train.txt'}, 'EvalReader': {'reader_function': 'ppocr.data.rec.dataset_traversal,SimpleReader', 'img_set_dir': '/', 'label_file_path': '/home/aistudio/work/test.txt'}, 'TestReader': {'reader_function': 'ppocr.data.rec.dataset_traversal,SimpleReader', 'infer_img': '/home/aistudio/work/PaddleOCR/test_images'}}
['ctc_greedy_decoder_0.tmp_0']
W0420 22:24:33.271103 12579 device_context.cc:237] Please NOTE: device: 0, CUDA Capability: 70, Driver API Version: 11.0, Runtime API Version: 9.0
W0420 22:24:33.275640 12579 device_context.cc:245] device: 0, cuDNN Version: 7.3.
2021-04-20 22:24:36,085-INFO: Finish initing model from output/rec_CRNN_aug_341/best_accuracy
100%|█████████████████████████████████████| 10000/10000 [05:12<00:00, 32.03it/s]
           

模型應用結果分析

調優參數優化過程分析: 前期用大的學習率,後期用小的學習率,并且進行相對應的Batch_size調整。

總結

這是第一次在百度AI studio完整的獨立完成比賽,幸運的是獲得較好的名次。讓我對OCR這一塊有了新的認識,也對百度飛槳架構有了初步的認識。

在這裡要感謝百度飛槳提供訓練平台,提供baseline以及優秀的方案供大家進行學習。在這次比賽,我也學到了很多東西,代碼能力也進步了一點點。希望百度飛槳可以做的越來越好。

AIStudio提供了AI Studio為選手提供了免費 GPU Tesla V100算力。 對于硬體資源匮乏的同學來說,這是一個非常棒的平台。

最後也期待有更多優秀的作者可以開源他們代碼給大家學習。

改進的方向:

1. 最簡單的操作把backbone換成resnet50,resnet101及以上的,更深層次的網絡,準确率理論上會更高。

2. 因為本次比賽預測圖檔的結果文字不算太長,CTC子產品可以嘗試換成Attention,可能效果會好一點。

3.也可以嘗試重新把資料進行資料增強,加标簽平滑。

4.可以嘗試用模型融合

飛槳使用體驗以及給其他選手學習飛槳的建議

這是第一次嘗試用飛槳架構完成比賽,平常都是用Pytorch比較多,剛開始接觸會有點不習慣,因為它有些細微的檔案的差異。并且有少部分執行指令和常用的Linux指令不太一樣,需要注意和學習基本操作。但不得不說飛槳架構下的包還是很完善的,比如PaddleOCR和PaddleDetection。隻需要修改小量參數便可改變網絡結構,對于新手來說是非常友好的。

是以想給選手學習飛槳的建議:如果是初學者接觸飛槳架構,建議去官網學習相對應的架構簡單的執行指令。官方網站:https://www.paddlepaddle.org.cn/tutorials/projectdetail/695184

如果是想用PaddleOCR庫的可以去這裡進行相關的學習:https://www.paddlepaddle.org.cn/tutorials/projectdetail/695184

如果是想用PaddleDetection庫的可以去這裡進行相關的學習:https://www.paddlepaddle.org.cn/tutorials/projectdetail/1499121

想了解更多的庫可以去官方網站進行更多的學習:https://www.paddlepaddle.org.cn/tutorials/projectdetail/695184

參考資料

PaddleOCR官方資料庫

官網連結: https://www.paddlepaddle.org.cn/tutorials/projectdetail/695184

GitHub: https://github.com/PaddlePaddle/PaddleOCR

優秀項目: https://aistudio.baidu.com/aistudio/projectdetail/681670

繼續閱讀