ディープとアルゴがタッグを組む、キャディ図面解析のテクノロジーに迫る
by
[email protected]
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
1
Slide 2
Slide 2 text
A B O U T Today's Speaker
Slide 3
Slide 3 text
3 Algorithm Engineer Shunsuke Nakamura 学生時代は主に単一画像超解像や画像の印象解析を研究。 2019年にDeNAに入社。画像生成・超解像の研究開発を行い、 その後ドライブレコーダーでの車内映像解析や学習モデルの 組み込みチームに所属し、Rustを触り始める。日本の大きな 力のポテンシャル解放に奔走するCADDiに惹かれ、2021年6月 にジョイン。現在は図面解析の開発に携わる。 Algorithm Engineer Yuichiro Terada 大学卒業後、機械系の設計用3D CADを作成する会社に入社 し、その後C#を使った開発を行うために子会社へ異動。志半 ばで開発を終えることになってしまったプロダクトの土台を もとに新たな開発を行うため上司に誘われ新会社へ転職。 ソフトとオペレーションの双方が強い環境でビジネスを構築 したいという思いから2019年10月にキャディへジョイン。図 面系の研究開発チームをリード。
Slide 4
Slide 4 text
Question 1 4 ● AI Labの設立背景と、現在お二人が取り組んでいるこ とは何ですか?
Slide 5
Slide 5 text
やりたいこと ● 図面を自動で読み取りたい ● データを活用したい
Slide 6
Slide 6 text
図面を自動で読み取りたい ● 図面は画像 ○ PDFで届く ○ 紙に印刷してからスキャンされた画像も多い ● 図面枚数が多いと大変 ○ 1案件に1000枚の図面とか ○ 加工の似た図面で分類して加工会社に発注 ○ 仕様の不明点を顧客とすり合わせ ○ 図面の差し替え ● 検索したい ○ 図番、材質、品名、加工指示、 etc ○ 類似図面検索 ● 分類したい ○ 似た図面でグルーピング
Slide 7
Slide 7 text
データを活用したい ● 受発注の過程で大量のデータが生まれる ○ 図面 ○ 受注元・受注額、発注先・発注額 ○ 他にも例えば、リードタイム、不良率、辞退率、 etc ● データは宝 ○ データを元に〇〇を提案 ○ データを元に〇〇を推論 何かは分からないが「何かできそう」感はものすごくある
Slide 8
Slide 8 text
今日は図面の話
Slide 9
Slide 9 text
なぜ図面なのか なぜ3DCADではないのか。 ● 現実として、図面で発注頂くことが圧倒的に多いから ● 図面には公差や表面粗さといった情報が載るから YSK様ホームページより引用 https://www.shaft.co.jp/products/special/special.html https://kakou-consul.com/ より引用 3DCAD 必須 2D図面が必須
Slide 10
Slide 10 text
図面が「人が読む」前提 コンピュータで自動処理するように作られていない コンピュータで自動処理するように受発注取引がなされていない これが調達の効率化を妨げている 図面読み取りにブレークスルーがあれば、道がひとつ拓ける
Slide 11
Slide 11 text
なぜAI? ● 図面はアルゴリズムか機械学習か悩ましい ○ 極めて人工的な画像 → アルゴリズムでそこそこ読めそうな気がする ○ 紙をスキャンするとノイズが乗る → ヒューリスティックはつらくなりがち ○ うまく使い分けられないか?( ← 今日のテーマ!) ● 熟練した人のように図面を読みたい ○ 熟練者は、パッと見で「機械加工」か「板金」か見分けられる ○ 「パッと見の雰囲気による判別」は言語化できない ○ 機械学習が向いているのではないか ● 類似した図面を探したい ○ 人はパッと見の印象で「似ている」「似ていない」が分かる ○ これも機械学習向きに思える
Slide 12
Slide 12 text
取り組んでいること ● Orama Unit ○ 図面認識 ■ テーブル情報(図番、材質、 etc)、寸法線、寸法値、記号、 etc ○ 図面Diff ■ 設計変更で差分が生じた箇所を強調表示 ○ 類似図面検索(図面特徴量) ■ AIによって駆逐されつつある …(もちろん良いこと) ● AI Unit ○ 図面認識 ■ 矢印分類、ノイズ除去 ○ 図面分類 ■ 加工法・母材形状... ○ 類似図面検索 ○ 加工依頼先推薦
Slide 13
Slide 13 text
Question 2 13 ● アルゴリズムと機械学習がどのように協業しながら、 Labが解こうとしている課題に取り組んでいるのでしょ うか?
Slide 14
Slide 14 text
What is Orama? Metadata: { “DrawingNumber”: “50-1”, “Material”: “A6063”, “PartName”: “モーターベース”, … } Alltexts: [“尺度”, “備考”, “製 図”, “検図”, 出図”, “1:2”, “加 藤”, “小橋”, ...] Input (PNG) Outputs Orama
Slide 15
Slide 15 text
ベクター化
Slide 16
Slide 16 text
3つのフロー アルゴリズム 協業 アルゴリズム 出力 出力 出力 ベクター化 画像を直接 CNNへ
Slide 17
Slide 17 text
いろんな寸法線
Slide 18
Slide 18 text
寸法線の特徴は矢印にあり!? 寸法線 寸法補助線 矢印 特徴 ● 寸法線と寸法補助線が直交している ● 寸法線には矢印が付いている
Slide 19
Slide 19 text
ベクターデータで矢印認識は難しい ベクター化
Slide 20
Slide 20 text
CNNだけで解く図面特有の難しさ ● 画像サイズが非常に大きい(数千 px〜) ○ 学習だけでなく、推論にも大きなコストがかかる ● 記号がシンプルかつ小さい ○ 図面記号はシンプル。異なる意味の記号が、形状としては非常に近いことも多い。 そのためCNNが誤認識しやすい ○ 画像サイズは大きいのに、記号のような CNNで特徴として注目したい領域は非常に小さい 単純に図面をCNNに入力しても、タスクを解けない・運用に耐えられない!
Slide 21
Slide 21 text
ディープとアルゴがタッグ! アルゴリズムで矢印候補箇所を抽出 矢印かな? ディープで判定
Slide 22
Slide 22 text
Question 3 22 ● 所属されているチームでの、仕事や開発の進め方の具 体な話を教えてください
Slide 23
Slide 23 text
AI Unit 組織 Tech AI Lab Orama Unit エンジニア4名 エンジニア4名 AI Labの詳しい話はこちら! https://caddi.tech/archives/3003
Slide 24
Slide 24 text
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
Slide 25
Slide 25 text
Rust でアルゴリズムってどう? ● 最高! ● 速い ○ 「可読性を犠牲にして速くなるように書く」をやらなくても速い ○ rayon で並列化も簡単 ● mutable が使えて、かつ安全 ○ mutability の扱いが厳格。予期せぬ副作用でバグることがない。 ○ アルゴリズムは mutable を使うほうが自然なものも多い。 ● Iterator + メソッドチェイン ○ 素直に immutable に書ける処理は immutable に ○ map, flat_map, filter_map, etc ● 保守性、可読性を保ったアルゴリズム開発 ○ ヒューリスティックはスパゲッティになりがちだが ○ Rust の力をうまく使えば、保守性を維持しつつチームで開発できる
Slide 26
Slide 26 text
Rust × CNN ● CNNの学習自体はPython+GCPで行う ○ 既存の深層学習ライブラリ・コードを利用したい ○ 開発者がPythonでの学習に慣れている ○ OramaにはPython wrapperが存在するのでデータのやり取りも可能 ● 推論時はRustで行う ○ Pythonで学習したモデルを ONNXに変換してRustからロードして使用する ○ メリット ■ 最高! ■ アルゴリズムのコードの中に 1フローとして組み込める ■ ビルド時にモデルをバイナリの中に含めることでスタンドアロンなバイナリにできる ■ rayonで簡単に並列化できる ○ デメリット ■ ONNX互換なモデル構造である必要がある ■ 推論時に前処理含めて CPUで十分高速に動くモデル構造である必要がある
Slide 27
Slide 27 text
Communication, Documents Flow Stock Markdown でサクッと 書きたいとき 社内ドキュメントサーバ( MkDocs)
Slide 28
Slide 28 text
テスト ● Regression Test ○ 前バージョンの図面認識結果と比較 ○ 差分が生じていたら failure ● 性能評価 Test ○ 正解データ(アノテーション)と比較 ○ (項目名)Recall ◯%、Precision ◯% ○ 中身がCNNに置き換わってもテストは同じ ● anocci ○ 図面用のアノテーションツール(自社開発)
Slide 29
Slide 29 text
Question 4 29 ● お互い(ML / アルゴ)に、相手がやっている手法に対 して、ここがすごい・・!と思う点を教えてください
Slide 30
Slide 30 text
● AI Labが目指しているところと、今後どのような人と一緒 に仕事をしたいか教えてください Question 5 30
Slide 31
Slide 31 text
あんなこといいな、できたらいいな ● 図面 ○ 寸法公差、各種記号の認識 ○ DXF ● 受発注データ ○ 「どの顧客の」「どの部品が」「どの加工会社に」「幾らで発注された」という実績データ ○ これらのデータと、図面から読み取ったデータが結びついたら、何ができる …? ● 情物一致 ○ 倉庫、拠点 ● 検査 ● 自動見積り ● 加工会社選定 ● 3DCAD ● …