HyperAI超神経

詳細なチュートリアル | PaddleOCR を使用してコンテナ番号を検出および識別する

3年前
情報
Jiaxin Sun
特色图像

内容概要:PaddleOCRに基づいてコンテナ番号を検出し、コンテナ番号の記録時間を短縮し、港の荷役効率を向上します。
キーワード: PaddleOCR テキスト認識オンライン チュートリアル

国際海運コンサルティング・分析機関であるアルファライナーは、今年3月に2021年のコンテナ処理量トップ30リストの中で一連のデータを発表した。上海港は「通信簿」4,702万5,000TEUで第1位となっている。
前年同期と比較すると、上海港のコンテナ取扱量は8.1%で、最も近い競合国であるシンガポールとは1,000万TEU近くの差があった。

世界の上位 100 のコンテナ港は、2021 年に合計 6 億 7,600 万 TEU のコンテナ処理量を完了しました。このような多数のコンテナにより、コンテナ番号の識別の負担が増大しています。 人間がコンテナ番号を特定して記録する従来の方法は、費用がかかり、非効率であり、運用条件も後回しです。

経済と社会の発展に伴い、港湾業務への人工知能の導入は、市場競争における従来の港湾の変革とアップグレードの鍵となっています。

この記事では、環境の準備からモデルのトレーニングまでについて説明します。PaddleOCR を使用してコンテナ番号を検出および識別する方法をデモンストレーションします。

コードチュートリアルを直接確認してください。
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

少量のデータを使用してボックス番号の検出および識別タスクを実装します。

コンテナ番号とは、輸出品を輸送するコンテナの箱番号を指します。このフィールドは、配送フォームに記入する際に必須です。 標準ボックス番号の構成は ISO6346 (1995) 規格を採用しており、ボックス番号 CBHU 123456 7 を例として、11 桁のコードで構成されています。

最初の部分は4つの英語の文字で構成されており、 最初の 3 文字はコンテナの所有者とオペレータを示し、4 番目の文字はコンテナのタイプを示します。 CBHU は、COSCO Container Lines が所有および運用する標準コンテナを表します。

2 番目の部分は 6 桁で構成され、 コンテナが保持する一意の ID であるコンテナ登録コードを示します。

3番目の部分はチェックコードです、検証ルールを通じて最初の 4 文字と 6 桁から取得され、検証中にエラーが発生したかどうかを識別するために使用されます。

出荷を待つ港に積み上げられたコンテナ
このチュートリアルは、PaddleOCR に基づいてコンテナ番号の検出および識別タスクを実行します。 少量のデータを使用して検出モデルと認識モデルを個別にトレーニングし、最後にそれらを結合してコンテナ番号の検出と認識のタスクを実行します。

環境整備

  1. OpenBayes コンソールで「モデル トレーニング」コンテナを開始します。 環境として PaddlePaddle 2.3 を選択し、リソースとして RTX 3090 またはその他の GPU タイプを選択します。

プラットフォーム アカウントをまだお持ちでない場合は、まず次のアドレスにアクセスして登録してください。 https://openbayes.com/console/signup

  1. Jupyter でターミナル ウィンドウを開きます。 次に、次のコマンドを実行します。
cd PaddleOCR-release-2.5 #进入 PaddleOCR-release-2.5 文件夹
pip install -r requirements.txt #安装 PaddleOCR 所需依赖
python setup.py install #安装 PaddleOCR

データセットの紹介

このチュートリアルでは、解像度 1920×1080 の 3003 個のコンテナ イメージが含まれる ContainerNumber-OCR データセットを使用します。

データセットの詳細を表示するには、次のサイトにアクセスしてください。
https://openbayes.com/console/open-tutorials/datasets/BzuGVEOJv2T/3

  1. PaddleOCR 検出モデルのトレーニングの注釈ルールは、「\t」で区切って次のとおりです。
" 图像文件名                    json.dumps 编码的图像标注信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]

json.dumps エンコード前の画像アノテーション情報は、複数の辞書を含むリストです。辞書内の点は、テキスト ボックスの 4 つの点の座標 (x, y) を左上隅の点から時計回りに並べて表します。

転写は現在のテキスト ボックスのテキストを表します。その内容が「###」の場合、テキスト ボックスは無効であり、トレーニング中にスキップされることを意味します。

  1. PaddleOCR 認識モデルのトレーニングの注釈ルールは、「\t」で区切って次のとおりです。
" 图像文件名                 图像标注信息 "

train_data/rec/train/word_001.jpg   简单可依赖
train_data/rec/train/word_002.jpg   用科技让复杂的世界更简单

## データソート

3.1 検出モデルに必要なデータ準備

データセットの 3000 枚の画像をトレーニング セットと検証セットに 2:1 の比率で分割し、次のコードを実行します。

from tqdm import tqdm
finename = "all_label.txt"
f = open(finename)
lines = f.readlines() 
t = open('det_train_label.txt','w')
v = open('det_eval_label.txt','w')
count = 0
for line in tqdm(lines):
    if count < 2000:
        t.writelines(line)
        count += 1
    else:
        v.writelines(line)
f.close()
t.close()
v.close()

3.2 同定モデルに必要なデータ準備

検出部分のコメントによると、トリミングされたデータセットには認識データとして画像のテキスト部分のみができるだけ含まれている必要があり、次のコードを実行します。
ここに画像の説明を挿入します
完全なコードの詳細については、以下を参照してください。 https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

## 実験

データ量が比較的少ないため、モデルの収束をより適切かつ迅速に達成するために、PaddleOCR の PP-OCRv3 モデルが検出と認識に選択されます。

PP-OCRv3 は PP-OCRv2 に基づいており、中国語シーンのエンドツーエンド Hmean インデックスは 5% 改善され、英語デジタル モデルのエンドツーエンド効果は 11% 改善されています。 。

最適化の詳細については、PP-OCRv3 テクニカル レポートを参照してください。

4.1 検出モデル

4.1.1 検出モデルの構成

PaddleOCR は多くの検出モデルを提供します。 パス内 PaddleOCR-release-2.5/configs/det モデルとその構成ファイルは以下にあります。モデルcを選択した場合h_PP-OCRv3_det_student.yml、構成ファイルのパスは次のとおりです。PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

使用前にトレーニングパラメータやデータセットのパスなど必要な設定を行う必要があります。いくつかの主要な構成を以下に示します。

#关键训练参数
use_gpu: true #是否使用显卡
epoch_num: 1200 #训练 epoch 个数
save_model_dir: ./output/ch_PP-OCR_V3_det/ #模型保存路径
save_epoch_step: 200 #每训练 200epoch,保存一次模型
eval_batch_step: [0, 100] #训练每迭代 100 次,进行一次验证
pretrained_model: ./PaddleOCR-release
2.5/pretrain_models/ch_PP-OCR_V3_det/best_accuracy.pdparams #预训练模型路径
#训练集路径设置
Train:
  dataset:
    name: SimpleDataSet
    data_dir: /input0/images #图片文件夹路径
    label_file_list:
      - ./det_train_label.txt #标签路径

4.1.2 モデルの微調整

ノートブックで次のコマンドを実行してモデルを微調整します。構成されたモデル ファイル パスには -c が渡されます。

leOCR-release-2.5/tools/train.py \
    -c PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

デフォルトのハイパーパラメータを使用すると、モデルは ch_PP-OCRv3_det_student トレーニング セットで 385 エポックのトレーニングを行った後、検証セットでのモデルの平均値は 96.96% に達し、それ以降大幅な増加はありませんでした。

[2022/10/11 06:36:09] ppocr INFO: best metric, hmean: 0.969551282051282, precision: 0.9577836411609498,
recall: 0.981611681990265, fps: 20.347745459258228, best_epoch: 385

4.2 識別モデル

4.2.1 モデル構成の特定

PaddleOCR は多くの認識モデルを提供します。パス内 PaddleOCR-release-2.5/configs/rec モデルとその構成ファイルは以下にあります。

モデルを選ぶなら ch_PP-OCRv3_rec_distillation、その構成ファイルのパスは次のとおりです。
PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

使用前にトレーニングパラメータやデータセットのパスなど必要な設定を行う必要があります。 いくつかの主要な構成を以下に示します。

#关键训练参数
use_gpu: true #是否使用显卡
epoch_num: 1200 #训练 epoch 个数
save_model_dir: ./output/rec_ppocr_v3_distillation #模型保存路径
save_epoch_step: 200 #每训练 200epoch,保存一次模型
eval_batch_step: [0, 100] #训练每迭代 100 次,进行一次验证
pretrained_model: ./PaddleOCR-release-2.5/pretrain_models/PPOCRv3/best_accuracy.pdparams #预训练模型路径
#训练集路径设置
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./RecTrainData/ #图片文件夹路径
    label_file_list:
      - ./rec_train_label.txt #标签路径

4.2.2 モデルの微調整

ノートブックで次のコマンドを実行してモデルを微調整します。構成されたモデル ファイル パスには -c が渡されます。

%run PaddleOCR-release-2.5/tools/train.py \
    -c PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

デフォルトのハイパーパラメータを使用すると、モデルは ch_PP-OCRv3_rec_distillation トレーニング セットで 136 エポックのトレーニングを行った後、検証セットでのモデルの精度は 96.11% に達し、それ以来大幅な増加はありませんでした。

[2022/10/11 20:04:28] ppocr INFO: best metric, acc: 0.9610600272522444, norm_edit_dis: 0.9927426548965615,
Teacher_acc: 0.9540291998159589, Teacher_norm_edit_dis: 0.9905629345025616, fps: 246.029195787707, best_epoch: 136

結果表示

5.1 検出モデルの推論

ノートブックで次のコマンドを実行し、微調整されたモデルを使用してテスト画像内のテキストを検出します。

  • Global.infer_img は画像パスまたは画像フォルダーのパスです。
  • Global.pretrained_model は微調整されたモデルです
  • Global.save_res_path は推論結果のパスを保存します
%run PaddleOCR-release-2.5/tools/infer_det.py \
    -c PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml \
    -o Global.infer_img="/input0/images" Global.pretrained_model="./output/ch_PP-OCR_V3_det/best_accuracy" Global.save_res_path="./output/det_infer_res/predicts.txt"

5.2 識別モデルの推論

ノートブックで次のコマンドを実行し、微調整されたモデルを使用してテスト画像内のテキストを検出します。

  • Global.infer_img 画像のパスまたは画像フォルダーのパスです
  • Global.pretrained_model 微調整モデルの場合
  • Global.save_res_path 推論結果の保存パス
%run PaddleOCR-release-2.5/tools/infer_rec.py \
    -c PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml \
    -o Global.infer_img="./RecEvalData/" Global.pretrained_model="./output/rec_ppocr_v3_distillation/best_accuracy" Global.save_res_path="./output/rec_infer_res/predicts.txt"

5.3 検出および認識モデル系列推論

5.3.1 モデル変換

シリアル推論の前に、まずトレーニングによって保存されたモデルを推論モデルに変換し、以下の検出コマンドをそれぞれ実行する必要があります。 で:

  • -c 変換するモデルの構成ファイルのパスを渡します
  • -o Global.pretrained_model 変換するモデルファイルです
  • Global.save_inference_dir 変換用の推論モデルのストレージパスを取得します
    ここに画像の説明を挿入します

5.3.2 モデル系列の推論

変換が完了すると、PaddleOCR は検出モデルと認識モデルの連結ツールを提供します。これにより、トレーニングされた検出モデルと認識モデルを 2 段階のテキスト認識システムに連結できます。

入力画像は、テキスト検出、検出枠補正、テキスト認識、スコア フィルターという 4 つの主要な段階を経て、テキストの位置と認識結果が出力されます。

実行コードは次のとおりです。

  • image_dir 単一の画像または画像コレクションへのパス
  • det_model_dir 推論モデルのパスを検出するには
  • rec_model_dir 推論モデルのパスを特定するには

視覚認識の結果は、デフォルトで ./inference_results フォルダーに保存されます。

%run PaddleOCR-release-2.5/tools/infer/predict_system.py \
--image_dir="OCRTest" \
--det_model_dir="./output/det_inference/" \
--rec_model_dir="./output/rec_inference/Student/"

視覚的な結果の例
完全なチュートリアルを表示するには、次のサイトにアクセスしてください。
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

PaddleOCR と OpenBayes について

PaddleOCR は、Baidu Paddle をベースとした OCR ツール ライブラリで、合計モデル サイズがわずか 860 万の超軽量中国語 OCR が含まれています。また、さまざまなテキスト検出およびテキスト認識トレーニング アルゴリズム、サービス展開、およびクライアント側展開もサポートしています。 。

詳細については、以下をご覧ください。
https://github.com/PaddlePaddle/PaddleOCR

オープンベイズについて学ぶ

OpenBayes は、中国の大手マシンインテリジェンス研究機関です。コンピューティングパワーコンテナ、自動モデリング、自動パラメータ調整など、AI開発に関連する多数の基本サービスを提供します。

同時に、OpenBayes は、データ セット、チュートリアル、モデルなどの多くの主流の公開リソースも立ち上げました。 開発者が理想的な機械学習モデルを迅速に学習して作成できるようにします。

openbayes.com にアクセスし、今すぐ登録すると、RTX 3090 を週 600 分、および CPU コンピューティング時間を週 300 分無料でお楽しみいただけます。

注: 毎週のギフトリソースは毎週月曜日の午後に到着します。

完全なチュートリアルを表示して実行するには、以下のリンクにアクセスしてください。
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

- 以上 -