Forkwell Press

SHARE

my-study6-top
Event report

図面情報抽出から見る Deep Learning の産業応用

エンジニアに役立つ情報を定期的にお届けします。

CADDi  AI Lab の河合(ばんくし)です。キャディ株式会社 AI Lab Tech LeadとしてMLを事業に応用する業務を担当しています。

 

本日は大きく下記4つのトピックをお話します。

  • CADDi  AI Lab 
  • CADDi  での Deep Learning 活用
  • 図面情報抽出での Deep Learning 活用
  • まとめ

CADDi  AI Lab とは?

CADDi は製造業を変える企業です。説明が少し難しいので、製造業について何かをやっているベンチャー企業なんだなと理解していただければと思います。

CADDi  AI Lab のチームメンバー

Tech Blog Speaker Deckテックイベントを開催しています。応用事例をいくつも公開してますので、ぜひアクセスしてみてください。現在のAI Lab のMLエンジニアは9人で、DeNAやマッキンゼー出身の方であったり、Kaggle のGrandmasterや他社でのテックリード経験がある方が集まっています。また競プロ暖色プレイヤー達が集まるアルゴリズムに強いチームもあります。国際色豊かなチームで、今後新たなメンバー参加も決まっているので、今後は本日発表した以上のものができていくと思います。

CADDi  AI Lab 技術スタック

現状は Python と Rust が共存しています。

  • Python:機械学習(Deep Learning)、API
  • Rust:画像処理アルゴリズム、WebAssembly

データ管理、検索、インフラ周りも自分たちでやることが多くなりました。

  • Openserch :情報検索、ANN
  • dbt:全社データPipeline
  • Vertex:MLOps基盤

この辺りは Tech Blog やイベントでオープンにしていければと思っています。ぜひCADDi の名前を覚えてもらえればと思っています。

CADDi  でのDeep Learning 活用

ここからは本題の  CADDi での Deep Learning 活用のお話です。先日リリースした製造業向けSaaS、CADDi DRAWER( キャディ ドロワー )では、アルゴリズムに Deep Learning とANN を使っています。

  • 図面の管理や活用を推進
  • 過去図面を高速に検索
  • 類似図面検索

こういったことが可能なサービスです。

Multi Task Deep Model

実際の Deep Learning のモデルに関しては深く触れられない部分があるのですが、マルチタスクの Deep Learning モデルを作っています。

CADDiは元々受発注事業をしていたので、社内にたくさんのラベル情報を保有しています。そのラベルをマルチタスクにトレインして「近さ」を定義し評価するのですが、「近さ」の観点が少し難しいので、社内の製造業の専門家にアノテーションしてもらっています。それをトレーニングの学習データとしてトレインして、中間層の出力を取ってきています。

OpenSerchやVertex、Maching Engine のようなベクター検索とテキスト検索のロジックを複合して条件検索ができるようにしています。

Algorithm and Deep Learning

ml-study6のスライド

少し図面の情報抽出の話をすると、アルゴリズムを使って候補を検出して、その候補がターゲットであるか否かという二値分類をおこなう DNN のモデルみたいなこともやっています。

下の例は、矢印の認識に関連したものです。実際、Rustで  Deep Learning のモデルを ONNX を通して読み込むことで、全体の処理がかなり高速になっています。

この矢印を読み込めると寸法線(250の記載がある部分)が読み込めるようになります。

サイズは価格や調達における重要データなので、細かなデータ抽出として Deep Learning モデルを作っています。

simplicity classification 単純化分類

他にもシンプルだけど難しい分類や回帰のタスクをいくつか紹介します。多くは二次元の図面に対しておこなっています。

画像右側のRound barを削ったり曲げたりして図面を生成しますが、元の形状を分類する問題を解いていたりします。図面の中で明示的に数値で書かれていない、このあたりの情報を推定するといった回帰のタスクにもチャレンジしています。

  • 曲げ回数回帰
  • 加工後のサイズ・重さ
  • 加工難易度
  • 価格
ml-study6のスライド

もう少し顧客に近いところでは、加工の難易度を図面から DNN で推定したり、価格を直接あてるようなことにもチャレンジしています。

少し2Dの話が続きますが、2Dの図面は基本的に3Dの CAD から出力されます。

出力時に図面に対してノイズが乗っていたりするので、ノイズ除去するようなモデルも作っています。これをおこなうことで、画像処理のアルゴリズムの性能向上を図っていたりもします。

Deep Learning の活用は無限

Deep Learning の活用は、製造業界においてかなり広く、いろいろなタスクが存在しています。

ml-study6のスライド

ここまでお話しした2次元の図面は、製造業界における設計より後ろのフェーズではかなり使われています。

最近では、3D の CADデータでも2次元と同様の技術が使えるのでは?ということで3Dの類似画像検索などのタスクを持っていたりします。

他にも下記のようなタスクがあります。

  • 部品の穴の数を検出(穴の数で価格が変わってくるため)
  • アトリビュートテーブル内のメタデータの情報を理解
  • 加工のプロセスの予測

まだまだ実用化には至っていないものの、新しいチャレンジもおこなっています。もうちょっと技術的にもビジネス的にも練度が高まってきたら続々外に出していく予定なので、ぜひウォッチしておいていただければと思っております。

図面情報抽出でのDeep Learning 活用 「OCR PROJECT」

ここからはもう少し図面情報抽出の文脈で DNN 活用をテーマにお話します。この4月から自社で OCR を作るプロジェクトを始めています。

課題1:一般的なOCRでは図面の特殊記号やフォントが読み取れない

一般的な OCR だと、下の図にあるような特殊な記号(斜めに書かれているもの、特殊なフォントや記号など)が、どうしても出てきます。

ml-study6のスライド

これが製品の価格を決める情報だったりするので、検査データとして重要です。なんとかこの図面に書いてある情報を正確に読み取ることができないか?が、大きな課題でした。

課題2:外部の OCRの価格の高さと制約

外部の OCR、例えば提供されている OCR API や外部のソフトウェアを購入するケースがあると思いますが、値段の高さや技術的な制約、リクエストの数、マシンスペックの問題をチューニングしやすくしたいという課題もありました。

加えて外部の API を使っていると、アップデートによってこちらのロジックっていうのが壊れてしまう可能性があるので、自社で持っておくっていうのは一つ強みになるだろうと。

課題3:メタデータの付与と合わせたフィードバック制御

OCR の結果に対して、それがどういう情報なのかをメタデータ付与したいというのが、最終的にやりたいことになっていたりします。

メタデータを付与するときの推論の結果を使って「この OCRの判定結果 ってそもそもこっちに補正できるのではないか?」みたいなフィードバック制御ができるようになっていくと、まさにこの図面の認識におけるパイプラインとしては理想の形状になるかなと考えています。

図面以外に対しても学習させて活用できるのではという将来的な構想も含めて、こういったプロジェクトをやっています。

図面情報抽出でのDeep Learning 活用 「JAPANISE OCR MODEL」

ml-study6のスライド

私は日本語の OCR のサーベイから広く始めました。大きく2つあるので紹介します。

古典的なアルゴリズムによるパイプライン処理

いわゆる古典的なアルゴリズムを使って前処理し、レイアウト解析をして文字の部分を切り出して認識にかける(テンプレートマッチをして認識する)ロジックです。

Deep Learningによるパイプライン処理

最近大きく精度を伸ばしてるのが Deep Learning の手法です。

私が学生の頃は、コンピュータサイエンスの総合格闘技といいますか、画像処理を含めいろいろな処理が OCR の難しさであったかなと思いますが、その土壌はもうほとんど Deep Learning に移ってるかなという印象です。

直近ではテキストの

  1. Detection (文字の箇所を検出するところ)
  2. Recognition(それがどういう文字なのか)

この2つのモデルを作って、それを繋げるのが一般的な OCR のフローになっています。

Detection は、NAVER Corp. が作成しているCRAFTと呼ばれるフレームワーク(OSS)がよく使われている印象です。Recognition も、NAVER Corp.の CLOVAチームが公開している Recognition ベンチマークというものが、おすすめです。Detection と Recognition 2つを作って管理する必要があるのが、現代OCR かなというお話でした。

JAPANESE OCR SOFTWARE

「いやいや、もう少し簡単に使い始めたいですよ」「エンジニアとしては早めに使い始めたいですよ」という部分もあると思うので、そういうところもサーベイしています。

ml-study6のスライド

よくあるAPIでは、この辺りが多言語でかつ精度が高いので、汎用的に使いやすいでしょう。

  •  Google  Cloud Vision API
  •  CLOVA  OCR API

自社開発する場合は、もう少し OSS を調べたり、モデルを自前で実装する形になると思いますが、最初によく調べて出てくるのは tesseract、OCR かなと思います。

  • OSS:tesseract

検索すると1番上に出てきますね。OpenCV にも導入されています。LSTM あたりが導入されてから更新が止まっているので、現状、高い精度が出せるかというと少し難しい部分があるかなと思います。

  • OSS:PaddleOCR

こちらも人気が高いです。 Baidu が開発しているPaddlePaddle と呼ばれる PyTorch とか TensorFlow みたいなニューラルネットを扱うフレームワークがベースです。私も試してみましたが、文字コードの問題などがあり日本語対応が少し大変かも知れません。

  • karas-ocr

あと TensorFlow とか keras に馴染み深い人は良いかも知れません。ただ最終更新が1年前ということで少し使いにくいかも知れません。

  • Easy OCR

我々が結局行き着いたのはEasy OCRです。Detection と Recognition のパイプラインを備えているもので、日本語の事前学習モデルもあるのですぐ試せます。

Easy OCR

もう少し EasyOCR のお話をしましょう。PyTorch ベースのパイプラインを作成してくれるフレームワークになります。Deep Learning では Detection と Recognition が必要だとお話しました。EasyOCR では Detection は CRAFT を活用し、Recognition は ResNet や CTC が使われており、そこから複数の検出結果を出して一番良さそうなものを beam search で探索するといった実装になっています。

下記の図にあるように各モデルを別のモデルに入れ替える作業が、結構簡単です。PyTorch で書かれたモデルとトレーナーとかデータローダーとかを入れ替えるだけで実装可能です。

ml-study6のスライド

日本語の学習済みモデルもあるので、たった3行で最初の実装が終わりますし、そこから fine tuning もメソッドとしてサポートされているので、矩形と文字のデータっていうのがあれば、テキストを少しデータのドメインにフィットさせた OCRモデルを作ることができます。

CADDi OCR Project

どのようにCADDi の OCRプロジェクトを進めていったのかお話します。

ml-study6のスライド

受発注の事業で蓄積したデータを学習データにして、いくつかの APIやOSS、 Easy OCR の学習と評価を検証しました。

ここは知り合いの Kaggle Masterに業務委託をお願いして「これを調査した時点で一定のleak/over fit を許容すれば、Easy OCR が高い精度を出せるよね」ということを確認しました。

ここでいう leak/over fit ですが、特定の会社や特定の文字、特定の文章みたいなところにフィットしてしまって、そこのクロスバリエーションを変えると精度がでないみたいなことを検証していきました。

そうなるとやっぱりデータセットの多様性が必要だよねという話になり、並行して私が2万枚ぐらい画像をひたすら見る作業(アノテーション)をしました。最終的にはもう Easy OCR のコードを fork して改修して、活用する形で図面のデータにおいては Google Vision API 以上の精度が出るようになってきています。

さらに同時並行でもう1つ、先ほど OCR Project の目的が複数あるよって話をしたと思いますけど、テーブルの検出やAttribute Type の判定っていうところもやっていたりします。

今回はテーブルの検出を Deep Learning モデルではなくアルゴリズムベースで行なっているので説明を省きますが、なるべく False Negative が小さくなるようなロジックを作っています。

Attribute Typeの判定というのは出てきたOCRの結果が会社名なのか加工方法なのか、値段なのかサイズなのかを当てる、といったモデルを作っています。こちらもDNNを使っています。こちらも過去からBigQueryに蓄積された手入力のデータをラベルとして活用してBERTのモデルを簡単に学習させて精度が出るようにしています。先程、フィードバック制御の話をしましたがテーブル検出では低い精度でもいいから、多く検出できるようにして、そこにOCR、テキストのDetection と Recognition をしっかりかけて、ここの精度はなるべく高くします。そのうえでAtribute Type判定をし、それぞれ必要な情報とそれに紐づいたメタデータっていうのを作れるみたいなところまで進んでいます。

1つの DNNモデルではなく、複数の方法を組み合わせるのが OCR の非常に重要なところです。

どのAPIにするか、インフラの構成にするのか、を考えるのはDNN使用のうえで難しいところではありますが Deep Learning の応用としては、非常に面白いところかなと思います。

まとめ

1. Deep Learning の製造業応用は無限

Deep Learning の製造業応用には無限にタスクがあります。それらを活用するための過去データや土壌があります。

2. OCR に本気で取り組んでいます

OCR Project は結構面白いです。複数の DNNモデルとかを組み合わせて図面の認識に取り組んでいたり、特殊記号への対応方法、図面の翻訳など課題が山積みです。

これから CADDi は国際化していきます。JIS規格 だと国際的に通用しないので、国際規格や規格言語の翻訳、規格の標準化などのタスクもプロジェクトの一環かなと思っています。

動画視聴はこちら

登壇者紹介

ばんくし(河合俊典)

CADDi AI Lab

Sansan株式会社、Yahoo! JAPAN、エムスリー株式会社の機械学習エンジニア、チームリーダーの経験を経て、2021年12月CADDiにジョイン。AI LabにてTech Leadとしてチーム立ち上げ、マネジメント、MLOpsやチームの環境整備、プロダクト開発を行う。業務の傍ら、趣味開発チームBolder’sの企画、運営、開発者としての参加や、XGBoostやLightGBMなど機械学習関連OSSのRust wrapperメンテナ等の活動を行っている。 エムスリーエンジニアリングフェロー。

 

ForlkwellPress ロゴ画像

編集部

Follow

エンジニアに役立つ情報を定期的にお届けします。

エンジニアに役立つ情報を定期的にお届けします。

SHARE

目次

目次