最新の深層学習技術による古典くずし字認識の現状と今後の展望
こんにちは。@shunk031 です。 普段は最先端の技術が大好きなパソコンのオタクですが、京都へ旅行して古き良き日本の文化に感化されました。
この記事は 法政大応情 Advent Calendar 2020 21 日目の記事です。
今回は日本古典籍の分類タスクについて取り組んでみようと考え、近年の日本古典籍における「くずし字認識」に着目して調査をしました *1。 日本古典籍といった古文書に対して、OCR 等の文字認識技術によって文字情報をデジタル化し、それらの情報をもとに解析を行う流れは現代では自然だと考えています。 しかしながら、一般的に OCR は難しく、また古文書を機械に解析させることはさらなる困難があるのは容易に想像できます。
くずし字認識に対して、近年の取り組みでは ROIS-DS 人文学オープンデータ協働センターが Kaggle にて「くずし字認識コンペティション」を主催したのは記憶に新しいです。
私はこれまで日本語や中国語の特徴的な文字の形状を考慮した自然言語処理の研究に取り組んできました *2*3。 これらの研究は深層学習モデルである convolutional neural network (CNN)*4 を元にしており、文字を文字画像に変換し文字形状を保持するような訓練を行い予測に利用するモデルを構築しています。 こうした枠組みはくずし字認識においても一定の効果が見込めそうな一方で、現状のくずし字認識タスクで高いパフォーマンスを題しているモデルや予測の枠組みを把握しておりませんでした。
本記事では、まず日本古典籍における「くずし字認識」タスクの現状について述べます 次に Kaggle で開催されたコンペティションの上位解法をまとめます。 これらのまとめから得られた現状について、既存の手法でどの程度認識可能であるか、また研究としてどのような点で貢献可能かの展望について個人的に考えた考察を含め議論・検討します。
- くずし字認識 と 深層学習
- Kuzushiji Recognition - Opening the door to a thousand years of Japanese culture
- 上位解法
- 上位解法を踏まえた研究貢献可能点について
- おわりに
くずし字認識 と 深層学習
深層学習モデルで くずし字
を認識しようと考えたときに一番初めに必要になってくるものはモデルの学習用のデータです。
ROIS-DS 人文学オープンデータ共同利用センター (CODH)*5 では、デジタル化された古典籍を中心に、翻刻テキストを制作する過程で生まれるくずし字の座標情報などを、機械のための学習データや人間のための学習データ
である 日本古典籍くずし字データセット
を提供しています *6。
日本古典籍データセットで公開されるデジタル化された古典籍を中心に、翻刻テキストを制作する過程で生まれるくずし字の座標情報などを、機械のための学習データや人間のための学習データとして提供します。
2019 年 11 月現在、日本古典籍くずし字データセットの規模は、国文学研究資料館所蔵で日本古典籍データセットにて公開する古典籍、および国文学研究資料館の関係機関が公開する古典籍 44 点の画像データ 6,151 コマから切り取った、くずし字 4,328 文字種の字形データ 1,086,326 文字です。
CODH では日本古典籍くずし字データセットを用いた AI くずし字 OCR サービスとして「KuroNet くずし字認識サービス」を公開しています *7。
この AI くずし字 OCR サービスのコア技術として、KuroNet
と呼ばれる深層学習をもとにしたくずし字認識の枠組みが使われているようです。次にこの技術の概要について述べます。
KuroNet
KuroNet *8*9 は、U-Net ベースのアーキテクチャである FusionNet *10 を使用して、文字のレイアウトが標準化されていない古典籍のページ画像からくずし字群を認識する深層学習モデルです。 このモデルは前処理を必要とせず、ページ内から得られる広い範囲のコンテキスト情報や大規模な語彙の獲得、標準化されていない文字レイアウトを適切に処理することが可能となっています。
前述のとおりモデルは U-Net をベースにしており、入力としてシンプルに 640x640 にリサイズした古典籍画像を使用しています。 特筆すべき点は mixup を画像のみミックスさせてラベルはミックスさせないで使用している点です。 この設定は文献 *11 と同様の設定のように見えます。
これらの取り組みの初期段階は NeurIPS'18 のワークショップに採択されており *12、非常に注目されておりました。 特に、KuroNet を始めとしたくずし字認識に取り組まれている CODH の @tkasasagi 氏と Google の @hardmaru 氏らがチームを組んで研究しているのは珍しく、個人的にも注目しておりました。
こうしたくずし字認識の取り組みを加速させるために、@tkasasagi 氏ら中心となり Kaggle でくずし字認識のコンペティションを開催しておりました。 くずし字認識タスクの現状の upper bound や使われている手法を調査する上で、上位解法の概要を知ることは重要です。 次のセクションにて、このコンペティションの上位解法について調査した結果を述べます。
Kuzushiji Recognition - Opening the door to a thousand years of Japanese culture
Kuzushiji Recognition - Opening the door to a thousand years of Japanese culture は機械学習コンペティションをホストする Kaggle にて 2019 年 7 月から 10 月に開催されたコンペティションです。 ROIS-DS 人文学オープンデータ共同利用センター をはじめ、大学共同利用機関法人 人間文化研究機構 国文学研究資料館 や 大学共同利用機関法人 情報・システム研究機構 国立情報学研究所 がホストしています。
本コンペティションの目的と評価の概要は以下のとおりです:
- 目的
- 文書画像からくずし字の位置を検出し、くずし字の種類を分類する
- 評価
- 与えられたデータからくずし字が書かれた文書画像 (3881 枚)、くずし字の位置を示すバウンディングボックス、字の種類を認識し、その精度を競う
このセクションでは、まず上位解法で採用されているモデルや手法について全体的な傾向を示し、その後それぞれの手法の概要について述べます。
全体的な傾向
入力画像の文字の位置 (中心座標) および文字種を認識するタスクであるため、コンピュータビジョン分野で発展してきた深層学習モデルが中心に使用されていました。 コンペティションにおいて、文字の検出 (detection) と文字の認識 (classification) を同時に行う手法もあれば、個別に行う手法がありました。 以下は使用されている手法群です。
Data augmentation
Model architecture
- Detection
- Classification
- Others
上位解法
このセクションではくずし字認識コンペティションにおける上位解法の概要について述べます。 解法に関しては、discussion にて公開されている情報や公開されているコードから読み取れる情報をもとに、以下の形式でまとめます:
- Preprocess
- 前処理について記述
- Data split
- 学習用データをどのように分割してモデルの学習に利用したかについて記述
- Model architecture
- モデルのアーキテクチャについて記述
- モデルが single-stage /multi-stage かどうか
- data augmentation の有無やその種類
- pseudo labeling の有無や適用方法
- モデルアンサンブルの有無や適用方法
- モデルのアーキテクチャについて記述
- Discorded ideas / Future work
- 試してみたがあまり効果がなかった方法
- 今後試してみたい方法
なお、学習用データの分割には book title
を元にした分割が多く見受けられました。
これは古典籍 (ここでいう book) ごとに特徴があり、そうした特徴が評価時に leak しないようにするためです。
1st place solution
Preprocess
- 学習時
- 1024x1024 になるようにクロップ & リサイズ
- 推論時
- 最大のサイズを設定して、そのサイズで推論
Data split
- book-level group split
- validation: book_title = umgy, train: others
Model architecture
Single-stage なアーキテクチャを使用。
- Cascade R-CNN
- HRNet w32 (LB: 0.935)
- train scales: 512 ~ 768
- test scales: 0.5, 0.625, 0.75
- HRNet w48 (LB: 0.946)
- train scales: 768 ~ 1280
- test scales: 0.75, 0.875, 1.0, 1.125, 1.25
- HRNet w32 (LB: 0.935)
- Ensemble
- HRNet w32 & HRNet w48 (LB: 0.950)
Discorded ideas / Future work
- N/A
2nd place solution
- Topic: 2nd place solution overview: detection + full-page classification - Kuzushiji Recognition | Kaggle
- Code: lopuhin/kaggle-kuzushiji-2019
Preprocess
- Detection phase
- 学習時
- ページの高さが 1500px になるようにリサイズし、512x384 にクロップして学習
- 推論時
- ページ全体を使って推論
- 学習時
- Classification phase
- 2500 ~ 3000px の高さの画像から 512x768 をクロップして学習
Data split
- book title-based group 5 fold cross validation
Model architecture
Multi-stage (First level model -> Second level model) なアーキテクチャを使用。
- First level model
- Detection
- Classification
- Second level model
First level model
- Detection phase
- Faster R-CNN
- 文字のクラスは当てない
- ground truth と重なりが少ない bbox に対して、追加のクラス
seg_fp
(segmentation false positive) を定義してセグメンテーションモデルの誤りを修正するようにした - ResNet152 をバックボーンに使用
- torchvision を使用
- data augmentation
- albumentations を使用
- scale, minor color augmentations (hue/saturation/value)
- albumentations を使用
- Faster R-CNN
- Classification phase
resnetxt101_32x8d_wsl
(LB: 0.935 (0.925 - 0.930))- ImageNet よりも大きいデータセットを用いて弱教師あり学習で学習
- ハイパーパラメータに非常に敏感であった
- gradient accumulation では敏感さを吸収しきれなかった
- GTX 2080Ti で
resnext101_32x8d_wsl
を訓練するために- 最初の畳込み層・layer1 全体を freeze
- mmdetection でも使われている
- mixed precision training
- 最初の畳込み層・layer1 全体を freeze
- SGD より Adam が良かった
- data augmentation
- albumentations を使用
- hue/saturation/value, random brightness, contrast, gamma
- albumentations を使用
- Test time augmentation (TTA)
- 4 different scales
resnext101_32x8d_wsl
&resnet152
(LB: 0.941)
- Pseudo labeling
- Pseudo lalbeling まわりの実装
Second level model
First-level model において cross valiadtion によってデータセット全てに対して得られた予測を用いて、 LightGBM
と XGBoost
をアンサンブルした second level model を訓練している。
- このモデルは 5k クラス分類問題であった cdiscount 画像分類チャレンジおける Pavel Ostyakov の解法にインスパイアされている
- Classification phase で得られた 4 種類のモデルそれぞれにおいて、予測クラスと上位 3 つの予測スコアを特徴量として入力。他の bbox との最大オーバーラップ量も追加している
- これらの予測クラスと
seg_fp
クラスを使って、これら予測の候補になりそうな候補クラスが予測すべき真のクラスかどうかを 2 値分類問題として学習した
- これらの予測クラスと
Discorded ideas / Future work
- 言語モデル
- 単純な bi-LSTM 言語モデルを学習させたが、画像ベースのモデルよりも loss が比較的大きくほとんど効果がないように思えた
- kNN /metric learning
- 予測モデルの最終層の特徴量を使って、推論時に訓練から最も類似している例を探すことが可能
- 推論時間が非常に長くなる一方で、若干の向上しか得られないために使用しなかった
3rd place solution
- Topic: 3rd place solution overview: 2-stage + FalsePositive Predictor - Kuzushiji Recognition | Kaggle
- Code: knjcode/kaggle-kuzushiji-recognition-2019
Preprocess
- 学習時・推論時
- https://www.kaggle.com/hanmingliu/denoising-ben-s-preprocessing-better-clarity
- Denoising:
cv2.fastNlMeansDenoisingColored
による denoising - Ben's preprocessing: subtract local mean color
- Denoising:
- https://www.kaggle.com/hanmingliu/denoising-ben-s-preprocessing-better-clarity
Data Split
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- train detection model with all train images
- validate with public leaderboard
- Classification
- book-level split
- validation: book_title=200015779 train: others
- validation: book_title=200003076 train: others
- book-level split
Model architecture
- Detection
- Faster R-CNN
- ResNet101 backbone
- Multi-scale train & test
- Data augmentation
- brightness, contrast, saturation, hue, random grayscale
- no vertical and horizontal flip
- Faster R-CNN
- Classification
- ensemble 5 classification models (hard voting)
- EfficientNet-B4
- Grayscale, 190x190, mixup + random erasing, valid book 200015779
- ResNet152
- Grayscale, 112x112, mixup + random erasing, valid book 200015779
- SE-ResNeXt101
- RGB, 112x112, mixup + random erasing, valid book 200015779
- SE-ResNeXt101
- RGB, 112x112, ICAP + random erasing, valid book 200003076
- ResNet152
- RGB, 112x112, ICAP + random erasing, valid book 200003076
- EfficientNet-B4
- Pseudo labeling
- ensemble 5 classification models (hard voting)
- Post processing
- FalsePositive Predictor
- validation の予測結果から誤検知するかどうかを予測する分類器を学習
- FalsePositive Predictor
Future work
4th place solution
- Topic: 4th place solution - Kuzushiji Recognition | Kaggle
- Code: linhuifj/kaggle-kuzushiji-recognition
Preprocess
- Detection phase
- 各文字に対して instance segmentation mask を作成
- ページ全体に対して、すべての文字の semantic segmentation mask を作成
Data split
- book-level group split
Model architecture
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- Hybrid Task Cascade (HTC) で文字を認識
- Connectuinust Text Proposal Network (CTPN) で各行のテキストを認識
- Classification
- Convolutional recurrent neural network (CRNN) で文字認識
- Kenlm による 6-gram 言語モデルを学習し、CTC の出力をデコードするために beam search を使用
- 各文字の位置は元の画像の各行の座標と CTC の出力を考慮して計算
- Data augmentation
- CLAHE, solarize, random brightness, random contrast, random scale random distort
- Ensemble
- 使用しなかった
Discorded ideas / Future work
- Classification
- CRNN における RNN (今回は LSTM を使用) の有無と multi-task learning について
- LSTM 層の有無
- LSTM 層のないモデルでは位置予測は正確だが文字認識精度は低くなる
- LSTM 層を加えると位置予測が不正確になる
- Multi-task learning の有効性
- 出力を制御するような attention を導入することで CRNN の位置予測精度が向上
- LSTM 層の有無
- Attention ベースのネットワークは CTC より精度が悪かった
- 精度は ResNet > VGG だった
- ResNeXt や SENet は性能が上がらなかった。
- CRNN における LSTM が 2 層以上になると精度が悪化した
- CRNN における RNN (今回は LSTM を使用) の有無と multi-task learning について
5th place solution
- Topic
- Code
Preprocess
- N/A
Data split
- 10 fold cross validation
Model architecture
Single-stage (Detection & Classification) なアーキテクチャを使用。
- CenterNet
- Hourglass network を ResNet50 or ResNet101 + FPN decoder へ変更
- loss を penalty-reduced pixel-wise logistic regression with focal loss by binary cross-entropy に変更
- head を無くした
- CenterNet は gaussian カーネルを用いるが、よりシンプルなカーネルを使用した
- ResNet101 に bag of tricks を適用した
- timm の
gluon_resnet101_v1d
を使用すると bag of tricks 適用モデルが使用できる
- timm の
- data augmentation
- shift scale rotate, random crop, clahe, gauss noise, gaussian blur, random brightness contrast, rgb shift, hue saturation
- Ensemble
- scale TTA
Discorded ideas / Future work
- multi-stage なアプローチ
- detection してから classification
- 解像度を上げる
- 1536x1536 で試していたけどこれ以上解像度を上げても予測結果に変化はなかった
- 文字の種類を増やす
- Kaggle Humpback Whale Identification で使われていた、反転させてクラス数を増やす方法
- 予測精度の向上にはあまり貢献しなかった
- Kaggle Humpback Whale Identification で使われていた、反転させてクラス数を増やす方法
7th place solution
- Topic: 7th place solution - Kuzushiji Recognition | Kaggle
- Code: kmat2019/centernet-keypoint-detector
Preprocess
- N/A
Data split
- Book title-based group split
Model architecture
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- CenterNet
- in: 512x512, out: 128x128
- data augmentation
- cropping, brightness, contrast, horizontal flip
- CenterNet
- Classification
- ResNet based
- in: 64x64
- data augmentation
- cropping, erasing, brightness, contrast
- pseudo labeling
- ResNet based
Discorded ideas / Future work
8th place solution
- Topic: 8th place solution: Two stage & kuzushiji data augmentation - Kuzushiji Recognition | Kaggle
- Code: t-hanya/kuzushiji-recognition
Preprocess
- N/A
Data split
- Book title-based 4 fold cross validation
Model architecture
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- CenterNet
- ResNet18 + U-Net
- full training set to train single model
- TTA: scale adjustment -> multi-scale + bbox voting
- CenterNet
- Classification
- MovileNet V3
- standard softmax cross entropy loss
- training: use full training set to train single model
- fine-tuning: use full training set + pseudo label
- No TTA
Discarded ideas / Future work
- Clasification
- 少ないクラスをオーバーサンプリングする方法
- Class-balanced loss
- 言語モデリング
- Detection / Classification
- CODH で公開されている (ラベルがついていない) 文字画像を使った半教師あり学習
9th place solution
- Topic: Top 9th Solution: Simple but complete approach. - Kuzushiji Recognition | Kaggle
- Code: mv-lab/kuzushiji-recognition
Preprocess
Data split
- book title-based group 5 fold cross validation
Model architecture
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- CenterNet
- HourglasNet
- ResNet34
- CenterNet
- Classification
- ResNet18
- Data Augmentation
- fastai standard transforms
- horizontal/vertical flip, rotate, zoom, lighting, wrap, affine
- mixup
- fastai standard transforms
- pseudo labeling
Discorded ideas / Future work
- Focal loss
13th place solution
- Topic: 13th place solution + unsuccessful language model - Kuzushiji Recognition | Kaggle
- Code: jday96314/Kuzushiji
Preprocess
- 学習時・推論時
- 512x512 に画像をリサイズ
- 画像をグレースケールへ変換
Data split
- N/A
Model architecture
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- Faster R-CNN
- ResNet34 を backbone に使用
- 一般的な ResNet34 の畳み込みフィルタの 2 倍のフィルタ数を設定した
- 入力はカラー画像
- Region Proposal Network (RPN) と後段の classifier は層を共有しないようにした
- RPN と classifier を互いに独立して変更可能のため、実験が容易になった
- アンカーのサイズを任意に選ぶのではなく、ground truth の bounding box の高さと幅に対して k-means でクラスタリングを実行してアンカーサイズを選択した
- クラスタの中心をアンカーボックスのサイズとして利用した
- 一般的な ROI pooling の代わりに ROI Align pooling を使用した
- ROI Align pooling の方がわずかに良い結果が得られた
- ResNet34 を backbone に使用
- Faster R-CNN
- Classification
- ResNet34
- 入力はグレースケース画像
- 一般的な ResNet34 の畳み込みフィルタの 3 倍のフィルタを設定した
- ResNet50 や ResNet101 等で実験をしたが、今回の設定のように wide で shallow なほうがよかった
- Residual block の部分にも dropout を導入した
- ResNet34
Discard ideas / Future work
- くずし字認識結果を補正する後処理に言語モデルを活用しようとして失敗
- 人間が読む順番に近い形に文字順を整理する
- クラスタリング等を使い、ソート
- DBSCAN を使って文字を列ごとにグループ化
- グループ化した文字の列に対して水平方向の平均座標でソート
- 各列内の文字を垂直方向に座標でソート
- 以上の操作はほとんどの画像データで正常に機能した
- クラスタリング等を使い、ソート
- 補正処理を行う correction network を訓練する
- ground truth を使って認識誤りを含む結果を擬似的に多数生成した
- これらの認識誤り結果は現実的なものだった
- Fater R-CNN ベースのモデルが cross validation 下でどのように動作するかの統計情報を元にランダムに誤りを追加
- ground truth を使って認識誤りを含む結果を擬似的に多数生成した
- くずし字認識誤りを補正する言語モデルを訓練する
- 人間が読む順番に近い形に文字順を整理する
15th place solution
Preprocess
- 学習時・推論時
- 画像をグレースケールへ変換
- ガウシアンフィルタを適用
- ガンマ補正を適用
- Ben's processing を適用
- https://www.kaggle.com/hanmingliu/denoising-ben-s-preprocessing-better-clarity
- Denoising:
cv2.fastNlMeansDenoisingColored
による denoising - Ben's preprocessing: subtract local mean color
- btgraham/kaggle_Diabetic_Retinopathy_competition/competitionreport.pdf 参照
- Denoising:
- https://www.kaggle.com/hanmingliu/denoising-ben-s-preprocessing-better-clarity
Data split
- train:test = 80:20
Model architecture
Multi-stage (Detection -> Classification) なアーキテクチャを使用。
- Detection
- 以下の 2 段階の CenterNet によってくずし字に対する bonding box を予測
- 各段階は 2 つの CenterNet を用いて構成
- CenterNet (1)
- 入力として、512x512 へリサイズした画像を使用し、予測 bbox (1) を得る
- bbox (1) を使って画像内の最も遠い予測における外側の bbox を取り除く
- CenterNet (2)
- 入力として、512x512 へリサイズした画像を使用
- bbox (1) と bbox (2) をアンサンブル
- CenterNet (1)
- 最終的な detection model の構成は以下:
- CenterNet1: 1 段階目における 2 つの CenterNet のアンサンブル
- data augmentation:
- horizontal movement, brightness adjustment
- data augmentation:
- CenterNet2: 2 段階目における 2 つの CenterNet のアンサンブル
- data augmentation:
- random erasing, horizontal movement, brightness adjustment
- data augmentation:
- CenterNet1: 1 段階目における 2 つの CenterNet のアンサンブル
- 各段階は 2 つの CenterNet を用いて構成
- 以下の 2 段階の CenterNet によってくずし字に対する bonding box を予測
- Classification
- 以下の 3 段階による文字種を認識
- Detection phase によって得られた検出結果をもとにクロップシ、64x64 に画像をリサイズ
- ResNet ベースのモデルを 3 つアンサンブル・9 種の horizontal movement による TTA により、分類結果を得る
- ResNet base (1)
log (bounding vox aspect ratio)
の特徴を全結合層の部分に入れたモデル
- ResNet base (2)
- ResNet base (1) とは学習データを変えたモデル
- ResNet base (3)
- ResNet base (1) と同様だが pseudo labeling によるデータで訓練
- ResNet base (1)
- 以上のモデルを 3 つ作りアンサンブル
3 x ((ResNet base (1) + (2) + (3)) x 9)
- data augmentation
- horizontal movement, rotation, zoom, random erasing
- 以下の 3 段階による文字種を認識
Discorded ideas / Future work
- N/A
上位解法を踏まえた研究貢献可能点について
上記の上位解法を踏まえたうえで、くずし字認識に対して研究の面でどのように貢献できるかを考えます。 高精度なくずし字認識を実現するためには主に以下の 2 つの視点から既存の課題を解決することが重要です:
- コンピュータビジョン
- 自然言語処理
以下では、これら 2 つの分野における視点に対して私の考える研究貢献可能点について検討しました
なお、くずし字認識というタスクにおいて実行速度はあまり重要ではないと考えました。タスクの性質上リアルタイム性はあまり必要なく、少し時間がかかっても精度の高い予測を提供することが重要であると考えたためです。 以下は全体的なモデルのパラメータ数が増えてしまうアイディアも存在しますが、上記のシチュエーションを踏まえて検討しております。
コンピュータビジョンからの視点
デジタル化された古典籍の画像から高精度に「文字検出」し、検出した文字を「文字認識」する必要があることがわかりました。 これらはコンペティションの解法では multi-stage なアーキテクチャとして現れております。 以下では、「文字検出」と「文字認識」の観点から、研究として取り組んでみたいことを列挙します。
文字検出モデルの予測精度向上
文字検出において重要なのは、画像中に複数存在するくずし字に対する detection モデルの精度向上です。
今回私は より高解像度の画像から比較的小さな物体を検出可能な軽量且つ高精度 detection モデル
について検討しました。
高解像度な画像から小さな物体を検出可能な軽量かつ高精度な detection モデル
一般的に、高解像度な画像を入力として与えると予測精度はより向上することが知られており、上位解法においても比較的解像度の高い 1000x1000 以上の画像を入力とするモデルが効果的であることが示唆されております。
また、detection モデルを cascade する構造を持つ Cascade R-CNN が有効であることもわかりました。 しかしながらなぜこうした構造が有効であるかは明らかにはなっていません。
以下は 高解像度な画像を扱える軽量かつ高精度な detection モデル
と 画像中に小さい物体が複数存在する検出タスクに強い detection モデル
の 2 つの側面からくずし字認識に適する検出モデルを検討します。
- 高解像度な画像を扱える軽量かつ高精度な detection モデルの検討
- 画像中に小さい物体が複数存在する検出タスクに強い detection モデルの検討
文字認識モデルの予測精度向上
文字認識において重要なのは、detection によって得られたくずし字領域に対する classification モデルの精度向上です。
今回私は generative adversarial network (GAN)*48 を用いた 文字画像生成による data augmentation
について検討しました。
GAN によるくずし字画像 data augmentation
上位解法からもわかるように、classification モデルを学習させる上で効果的な data augmentation が重要です。 今回私は擬似的にくずし字を生成して data augmentation として活用する方法を検討しました。 昨今では GAN によるさまざまな data augmentation 手法が提案されており、特にフォントを生成するような事例は特に成功しているように見えます。 こうした枠組みを応用することでくずし字認識の精度向上が期待できると考えています。
- 一般的な GAN による data augmentation
- フォントの自動生成
自然言語処理からの視点
今回対象である古典籍は、時代は違えど同じ人間が自然言語として記述したものです。 したがって、背後には言語モデルが存在し、その言語モデルに従って言語が現れていると捉えることができます。 こうした言語モデルを適切に捉えることにより、意図しない文字の列が現れないように補正しようというアイディアは非常に面白いものだと個人的に感じます。 しかしながら、コンペティションではあまり効果がないという報告が少なからずありました。
今回私は、言語モデルを用いて文字認識結果の補正を行うというアイディアに対して、自然言語処理的な観点で補正を行う 言語モデルの予測精度をどのように向上させるか
を検討しました。
昨今使われている現代語による言語モデルの学習事例は星の数ほどありますが、古語に対して言語モデルを学習する事例はほとんどありません。
こうした古語に対するモデルの学習は古語に適した学習法の検討が必要だと考えております。
言語モデルの予測精度向上
学習データの多い、いわゆるリソースの多い現代語で成果を上げているモデルをそのままリソースの少ない古語に適用するのは困難であることは容易に想像できます。
今回私は リソースの多い言語からリソースの少ない言語への転移学習
について検討しました。
リソースの多い言語から少ない言語への転移学習
深層学習は一般的に大規模な学習データが必要であるため、今回の古語のようなリソースが限られている対象をそのまま学習させるのは非常に難しいです。 上位解法には翻訳モデルを使って日本語から英語に変換する補正ネットワークを検討している事例がありましたが、このような難しさによって効果的な補正ネットワークを学習できていないと個人的には考えております。
近年は大規模なラベルなしデータによって訓練された事前学習モデルとして BERT *54 等が存在しており、広く使われてくるようになりました。 BERT はタスクに特化した fine-tuning により少量の学習データから精度の高い予測が可能になる一方で、今回のような同じ言語(日本語)における現代語(事前学習)と古語(fine-tuning)という設定はこれまでに存在しないように思えます。 個人的な興味ですが、こうした現代語から古語の特徴をどれだけ捉えられることが可能かは、くずし字認識に限らず非常に面白い研究トピックの一つになりうると考えています。
おわりに
本記事では、日本古典籍における「くずし字認識」タスクの現状について述べました。 また Kaggle で開催されたコンペティションの上位解法をまとめました。 これらのまとめから得られた現状について、既存の手法でどの程度認識可能であるか、また研究としてどのような点で貢献可能かの展望について個人的に考えた考察を含め検討しました。
コンピュータビジョンと自然言語処理の観点から、私が検討した研究貢献点はおそらくこれまで学術的に検討されていない点が多く含まれていると感じます。 これらは一見すぐに本質的な改善が見られないかもしれませんが、腰を据えてじっくりと取り組むと面白い洞察が得られるのではないかと確信しております。
*1:実は今期の博士課程のコースワークの課題でもあります。
*2:[1810.03595] End-to-End Text Classification via Image-based Embedding using Character-level Networks https://arxiv.org/abs/1810.03595
*3:[2006.11586] AraDIC: Arabic Document Classification using Image-Based Character Embeddings and Class-Balanced Loss https://arxiv.org/abs/2006.11586
*4:Gradient-based learning applied to document recognition - IEEE Journals & Magazine https://ieeexplore.ieee.org/abstract/document/726791
*5:ROIS-DS 人文学オープンデータ共同利用センター / ROIS-DS Center for Open Data in the Humanities (CODH) http://codh.rois.ac.jp/
*6:日本古典籍くずし字データセット | ROIS-DS 人文学オープンデータ共同利用センター http://codh.rois.ac.jp/char-shape/
*7:KuroNet くずし字認識サービス(AI OCR) | ROIS-DS 人文学オープンデータ共同利用センター (CODH) http://codh.rois.ac.jp/kuronet/
*8:[1910.09433] KuroNet: Pre-Modern Japanese Kuzushiji Character Recognition with Deep Learning https://arxiv.org/abs/1910.09433
*9:KuroNet: Regularized Residual U-Nets for End-to-End Kuzushiji Character Recognition | SpringerLink https://link.springer.com/article/10.1007/s42979-020-00186-z
*10:[1612.05360] FusionNet: A deep fully residual convolutional neural network for image segmentation in connectomics https://arxiv.org/abs/1612.05360
*11:[1801.02929] Data Augmentation by Pairing Samples for Images Classification https://arxiv.org/abs/1801.02929
*12:[1812.01718] Deep Learning for Classical Japanese Literature https://arxiv.org/abs/1812.01718
*13:[1708.04896] Random Erasing Data Augmentation https://arxiv.org/abs/1708.04896
*14:[1710.09412] mixup: Beyond Empirical Risk Minimization https://arxiv.org/abs/1710.09412
*15:[1811.09030] Data Augmentation using Random Image Cropping and Patching for Deep CNNs https://arxiv.org/abs/1811.09030
*16:Information | Free Full-Text | Albumentations: Fast and Flexible Image Augmentations https://www.mdpi.com/2078-2489/11/2/125
*17:[1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks https://arxiv.org/abs/1506.01497
*18:[1906.09756] Cascade R-CNN: High Quality Object Detection and Instance Segmentation https://arxiv.org/abs/1906.09756
*19:[1901.07518] Hybrid Task Cascade for Instance Segmentation https://arxiv.org/abs/1901.07518
*20:[1904.07850] Objects as Points https://arxiv.org/abs/1904.07850
*21:[1612.03144] Feature Pyramid Networks for Object Detection https://arxiv.org/abs/1612.03144
*22:[1505.01749] Object detection via a multi-region & semantic segmentation-aware CNN model https://arxiv.org/abs/1505.01749
*23:[1505.04597] U-Net: Convolutional Networks for Biomedical Image Segmentation https://arxiv.org/abs/1505.04597
*24:[1603.06937] Stacked Hourglass Networks for Human Pose Estimation https://arxiv.org/abs/1603.06937
*25:[1703.06870] Mask R-CNN https://arxiv.org/abs/1703.06870
*26:facebookresearch/detectron2: Detectron2 is FAIR's next-generation platform for object detection and segmentation. https://github.com/facebookresearch/detectron2
*27:open-mmlab/mmdetection: OpenMMLab Detection Toolbox and Benchmark https://github.com/open-mmlab/mmdetection
*28:pytorch/vision: Datasets, Transforms and Models specific to Computer Vision https://github.com/pytorch/vision
*29:[1908.07919] Deep High-Resolution Representation Learning for Visual Recognition https://arxiv.org/abs/1908.07919
*30:[1905.11946] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks https://arxiv.org/abs/1905.11946
*31:[1709.01507] Squeeze-and-Excitation Networks https://arxiv.org/abs/1709.01507
*32:[1507.05717] An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition https://arxiv.org/abs/1507.05717
*33:[1905.02244] Searching for MobileNetV3 https://arxiv.org/abs/1905.02244
*34:[1708.02002] Focal Loss for Dense Object Detection https://arxiv.org/abs/1708.02002
*35:[1901.05555] Class-Balanced Loss Based on Effective Number of Samples https://arxiv.org/abs/1901.05555
*36:[1909.05235] SoftTriple Loss: Deep Metric Learning Without Triplet Sampling https://arxiv.org/abs/1909.05235
*37:[1609.03605] Detecting Text in Natural Image with Connectionist Text Proposal Network https://arxiv.org/abs/1609.03605
*38:Connectionist temporal classification | Proceedings of the 23rd international conference on Machine learning https://dl.acm.org/doi/abs/10.1145/1143844.1143891
*39:KenLM: Faster and Smaller Language Model Queries - ACL Anthology https://www.aclweb.org/anthology/W11-2123/
*40:Pseudo-Label: The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks - Workshop on challenges in representation learning, ICML. Vol. 3. No. 2. 2013.
*41:[1805.00932] Exploring the Limits of Weakly Supervised Pretraining https://arxiv.org/abs/1805.00932
*42:[1812.01187] Bag of Tricks for Image Classification with Convolutional Neural Networks https://arxiv.org/abs/1812.01187
*43:[1505.07818] Domain-Adversarial Training of Neural Networks https://arxiv.org/abs/1505.07818
*44:[1609.06773] Joint CTC-Attention based End-to-End Speech Recognition using Multi-task Learning https://arxiv.org/abs/1609.06773
*45:[1911.09070] EfficientDet: Scalable and Efficient Object Detection https://arxiv.org/abs/1911.09070
*46:[2011.08036] Scaled-YOLOv4: Scaling Cross Stage Partial Network https://arxiv.org/abs/2011.08036
*47:ultralytics/yolov5: v3.1 - Bug Fixes and Performance Improvements | Zenodo https://zenodo.org/record/4154370#.X92gpen7R24
*48:[1406.2661] Generative Adversarial Networks https://arxiv.org/abs/1406.2661
*49:[1711.04340] Data Augmentation Generative Adversarial Networks https://arxiv.org/abs/1711.04340
*50:[1801.05401] Low-Shot Learning from Imaginary Data https://arxiv.org/abs/1801.05401
*51:[1803.01229] GAN-based Synthetic Medical Image Augmentation for increased CNN Performance in Liver Lesion Classification https://arxiv.org/abs/1803.01229
*52:[1910.12604] FontGAN: A Unified Generative Framework for Chinese Character Stylization and De-stylization https://arxiv.org/abs/1910.12604
*53:[1701.05703] Automatic Generation of Typographic Font from a Small Font Subset https://arxiv.org/abs/1701.05703
*54:[1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805