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