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 ● …