Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ディープとアルゴがタッグを組む、キャディ図面解析のテクノロジーに迫る

 ディープとアルゴがタッグを組む、キャディ図面解析のテクノロジーに迫る

2022/3/10に開催したイベントの登壇資料です。

イベントページはこちら
https://caddi.connpass.com/event/239652/

[email protected]

March 10, 2022
Tweet

Other Decks in Technology

Transcript

  1. 1

  2. 3 Algorithm Engineer Shunsuke Nakamura 学生時代は主に単一画像超解像や画像の印象解析を研究。 2019年にDeNAに入社。画像生成・超解像の研究開発を行い、 その後ドライブレコーダーでの車内映像解析や学習モデルの 組み込みチームに所属し、Rustを触り始める。日本の大きな 力のポテンシャル解放に奔走するCADDiに惹かれ、2021年6月

    にジョイン。現在は図面解析の開発に携わる。 Algorithm Engineer Yuichiro Terada 大学卒業後、機械系の設計用3D CADを作成する会社に入社 し、その後C#を使った開発を行うために子会社へ異動。志半 ばで開発を終えることになってしまったプロダクトの土台を もとに新たな開発を行うため上司に誘われ新会社へ転職。 ソフトとオペレーションの双方が強い環境でビジネスを構築 したいという思いから2019年10月にキャディへジョイン。図 面系の研究開発チームをリード。
  3. 図面を自動で読み取りたい • 図面は画像 ◦ PDFで届く ◦ 紙に印刷してからスキャンされた画像も多い • 図面枚数が多いと大変 ◦

    1案件に1000枚の図面とか ◦ 加工の似た図面で分類して加工会社に発注 ◦ 仕様の不明点を顧客とすり合わせ ◦ 図面の差し替え • 検索したい ◦ 図番、材質、品名、加工指示、 etc ◦ 類似図面検索 • 分類したい ◦ 似た図面でグルーピング
  4. データを活用したい • 受発注の過程で大量のデータが生まれる ◦ 図面 ◦ 受注元・受注額、発注先・発注額 ◦ 他にも例えば、リードタイム、不良率、辞退率、 etc

    • データは宝 ◦ データを元に〇〇を提案 ◦ データを元に〇〇を推論 何かは分からないが「何かできそう」感はものすごくある
  5. なぜAI? • 図面はアルゴリズムか機械学習か悩ましい ◦ 極めて人工的な画像 → アルゴリズムでそこそこ読めそうな気がする ◦ 紙をスキャンするとノイズが乗る →

    ヒューリスティックはつらくなりがち ◦ うまく使い分けられないか?( ← 今日のテーマ!) • 熟練した人のように図面を読みたい ◦ 熟練者は、パッと見で「機械加工」か「板金」か見分けられる ◦ 「パッと見の雰囲気による判別」は言語化できない ◦ 機械学習が向いているのではないか • 類似した図面を探したい ◦ 人はパッと見の印象で「似ている」「似ていない」が分かる ◦ これも機械学習向きに思える
  6. 取り組んでいること • Orama Unit ◦ 図面認識 ▪ テーブル情報(図番、材質、 etc)、寸法線、寸法値、記号、 etc

    ◦ 図面Diff ▪ 設計変更で差分が生じた箇所を強調表示 ◦ 類似図面検索(図面特徴量) ▪ AIによって駆逐されつつある …(もちろん良いこと) • AI Unit ◦ 図面認識 ▪ 矢印分類、ノイズ除去 ◦ 図面分類 ▪ 加工法・母材形状... ◦ 類似図面検索 ◦ 加工依頼先推薦
  7. What is Orama? Metadata: { “DrawingNumber”: “50-1”, “Material”: “A6063”, “PartName”:

    “モーターベース”, … } Alltexts: [“尺度”, “備考”, “製 図”, “検図”, 出図”, “1:2”, “加 藤”, “小橋”, ...] Input (PNG) Outputs Orama
  8. CNNだけで解く図面特有の難しさ • 画像サイズが非常に大きい(数千 px〜) ◦ 学習だけでなく、推論にも大きなコストがかかる • 記号がシンプルかつ小さい ◦ 図面記号はシンプル。異なる意味の記号が、形状としては非常に近いことも多い。

    そのためCNNが誤認識しやすい ◦ 画像サイズは大きいのに、記号のような CNNで特徴として注目したい領域は非常に小さい 単純に図面をCNNに入力しても、タスクを解けない・運用に耐えられない!
  9. AI Unit 組織 Tech AI Lab Orama Unit エンジニア4名 エンジニア4名

    AI Labの詳しい話はこちら! https://caddi.tech/archives/3003
  10. Scrum 等 • Daily 15分 (AI Unit + Orama Unit

    共同) ◦ 進捗報告、困りごと共有 ◦ お楽しみ雑談タイム • Refinement 30分/週(Unit 別に分かれて) ◦ 中核メンバーで次のスプリントでやることを決める • Sprint Planning(Unit 別に分かれて) ◦ チケットをメンバーにアサイン ◦ 1 sprint = 1 week (現時点では) • Sprint Review(Biz 系メンバーも含めた組織で) ◦ 他チームにも説明可能な成果を発表 • Mob Programming(AI Unit + Orama Unit 共同) ◦ 例)「ゼロから始める Deep Learning」を Rust で実装 • 勉強会(AI Unit + Orama Unit 共同) ◦ 論文紹介、技術トピックのサーベイ、アルゴリズム紹介、 etc
  11. Rust でアルゴリズムってどう? • 最高! • 速い ◦ 「可読性を犠牲にして速くなるように書く」をやらなくても速い ◦ rayon

    で並列化も簡単 • mutable が使えて、かつ安全 ◦ mutability の扱いが厳格。予期せぬ副作用でバグることがない。 ◦ アルゴリズムは mutable を使うほうが自然なものも多い。 • Iterator + メソッドチェイン ◦ 素直に immutable に書ける処理は immutable に ◦ map, flat_map, filter_map, etc • 保守性、可読性を保ったアルゴリズム開発 ◦ ヒューリスティックはスパゲッティになりがちだが ◦ Rust の力をうまく使えば、保守性を維持しつつチームで開発できる
  12. Rust × CNN • CNNの学習自体はPython+GCPで行う ◦ 既存の深層学習ライブラリ・コードを利用したい ◦ 開発者がPythonでの学習に慣れている ◦

    OramaにはPython wrapperが存在するのでデータのやり取りも可能 • 推論時はRustで行う ◦ Pythonで学習したモデルを ONNXに変換してRustからロードして使用する ◦ メリット ▪ 最高! ▪ アルゴリズムのコードの中に 1フローとして組み込める ▪ ビルド時にモデルをバイナリの中に含めることでスタンドアロンなバイナリにできる ▪ rayonで簡単に並列化できる ◦ デメリット ▪ ONNX互換なモデル構造である必要がある ▪ 推論時に前処理含めて CPUで十分高速に動くモデル構造である必要がある
  13. テスト • Regression Test ◦ 前バージョンの図面認識結果と比較 ◦ 差分が生じていたら failure •

    性能評価 Test ◦ 正解データ(アノテーション)と比較 ◦ (項目名)Recall ◯%、Precision ◯% ◦ 中身がCNNに置き換わってもテストは同じ • anocci ◦ 図面用のアノテーションツール(自社開発)
  14. あんなこといいな、できたらいいな • 図面 ◦ 寸法公差、各種記号の認識 ◦ DXF • 受発注データ ◦

    「どの顧客の」「どの部品が」「どの加工会社に」「幾らで発注された」という実績データ ◦ これらのデータと、図面から読み取ったデータが結びついたら、何ができる …? • 情物一致 ◦ 倉庫、拠点 • 検査 • 自動見積り • 加工会社選定 • 3DCAD • …