GenCAD
(gencad.github.io)- GenCADは、画像入力だけで3D CADと完全なパラメータ化されたCADコマンド履歴、CADプログラムを生成するモデル
- B-repはAI学習において複雑であり、メッシュ・ボクセル・ポイントクラウドはデータ確保が容易な一方で、精度と修正可能性を犠牲にする
- 画像からパラメータCADコマンドシーケンスを生成した後、ジオメトリカーネルを通じて3Dソリッドモデルへ変換できる
- 自己回帰Transformer、対照学習、潜在拡散モデル、デコーダを組み合わせて、画像とCADコマンドの潜在表現を生成・復元する
- 同じ画像から複数のCADサンプルを作成でき、約7,000個のCADプログラムの中から上位3件を見つける画像条件付き検索もサポート
概要
- GenCADは画像条件付きCAD生成モデルで、3D CADだけでなく完全なパラメータ化されたCADコマンド履歴とCADプログラムも出力する
- B-repのようなCADデータ構造は複雑で効率的なAIモデル学習が難しく、メッシュ・ボクセル・ポイントクラウドのような表現はデータ確保が容易な代わりに、実際のCADモデルの精度と修正可能性を犠牲にする
- GenCADは画像からパラメータCADコマンドシーケンスを生成し、これをジオメトリカーネルで3Dソリッドモデルに変換する
- 目標は、エンジニアリング作業、製造、設計空間探索に必要な高精度で修正可能な3Dモデリングを画像ベースで自動化することにある
モデル構成と機能
-
アーキテクチャ
- 自己回帰TransformerエンコーダがCADコマンドシーケンスの潜在表現を学習する
- 対照学習ベースのモデルがCADコマンドシーケンスとCAD画像の間の共同潜在表現を学習する
- 潜在拡散モデルがCAD画像を条件としてCADコマンドシーケンスの潜在表現を生成する
- デコーダモデルがCAD潜在表現をパラメータCADコマンドシーケンスに変換する
-
CAD生成
- GenCADは画像レンダリングを入力としてCADモデルを生成できる
- 同じ画像入力からでも複数のCADサンプルを生成し、サンプルの多様性を提供する
-
CAD検索
- 画像条件付きCAD検索をサポートし、約7,000個のCADプログラムのコレクションから上位3件のCADプログラムを見つけ出す
-
資料
1件のコメント
Hacker Newsの意見
数時間試してみたが、学習データではない入力では、ごく単純な絵ですら実用になる結果を出せなかった
GitHubには自前の学習データでも信頼度は約**60%**と書かれているのに、最初の画面の画像はかなり誤解を招く印象がある
例と同程度の複雑さの画像を10枚作り、各画像ごとに50回ほど実行したが、まともに動いたケースは一度もなく、たまに何かを出力しても完全に間違っていた
現状ではかなりmisleadingで、さらに多くの作業が必要に見える
手描きスケッチからパラメータ化されたCADモデルを作れるなら本当に素晴らしいと思う
面白くはあるが、実用性はよく分からない。CAD図面で時間がかかる部分は、各featureの正確な寸法、間隔、サイズ、公差などを決め、後で簡単に修正できるよう拘束条件を設定することだが、これはそうしたことをまったくやってくれない
欲しいものを2Dスケッチとして描いて生成することはできるだろうが、結局難しい部分は依然として自分でやる必要がある
OpenSCADにはかなり慣れているが、少し複雑になるだけでかなり行き詰まる。最近では子どものためにLego Duploのキッチンシンク用蛇口を作った
スケッチとパラメータを入れれば、曲線に沿って円を押し出す方法をWebで探したり、チュートリアルを見たりする時間を減らしてくれる良いAI/LLMツールがあるなら、本当にありがたいと思う
ちなみに既存のAIツールはOpenSCADとはかなり相性が良いので、単純な図形で作れるパラメータ化モデルが必要なら、この流れを強く勧めたい
前職でこれに多くの時間を使った理由はかなり論理的だった。品質の悪い頭部装着カメラから生成した点群は、モデルが非常に複雑になる
例えばIkea LACKの点群を見ると (https://www.ikea.com/gb/en/p/lack-nest-of-tables-set-of-2-wh...)、とてつもなく複雑になるはずだ。だから少しでもインタラクションしようとすると計算コストが大きくなる (https://www.researchgate.net/publication/221064696/figure/fi...)
そのため、点群を単純化した「CAD」モデルに変換する研究が盛んに行われている。LACKテーブルが40万個の三角形ではなく、およそ40個の三角形で表現されるような形だ
ひとつの方法は、「この点群はテーブルのように見えるので、候補となるテーブルをたくさん生成して適合するか見てみよう」というアプローチだ。そのためにはパラメトリックCADを理解し、合うまで調整可能なパラメータでさまざまなテーブルを作れるモデルが必要になる
もっと簡単かもしれない方法は、点群を取り込み、CADモデルで学習された画像モデルに2D画像としてモデルを描かせ、その後こうしたツールで実際のモデルを得ることだ
効率的ではないが、動くかもしれない。自動盗用のような好ましくない用途も多い
自分のCAD AIを改善するために調べる過程で、これと似た試み[0]を見た。大きな可能性を持つ解決策ではあるが、現在のプロジェクトや重みでは、任意のモデルにうまく動くほどの学習データや学習時間が足りていないと思う
MeshCoderは実質的に学習データベースのモデルでしか動かない。GenCADは使っていないが、他のコメントが自分の疑いを裏付けてくれた
[0]: https://daibingquan.github.io/MeshCoder/
[1]: https://grandpacad.com
こういうやり方は、ずっと前からOpenSCADで簡単にできていた。私はこの方法で格好よくて複雑なモデルをたくさん作ってきたし、LLMにどうやらせるかを示すプロンプト集も作り、自分が作ったモデルもたくさん含めてある
https://github.com/cjtrowbridge/vibe-modeling
比較すると、自分の最近の設計のひとつはこの程度だが、これでもまだかなり単純な例だと呼ぶだろう[4]
自分は商業的に仕事をしている訓練済みの機械エンジニアではなく、プログラマーとして余暇に設計している程度だ
[1] - https://github.com/cjtrowbridge/vibe-modeling/blob/main/outp...
[2] - https://github.com/cjtrowbridge/vibe-modeling/blob/main/outp...
[3] - https://github.com/cjtrowbridge/vibe-modeling/blob/main/outp...
[4] - https://object.ceph-eu.hswaw.net/q3k-personal/fe3e54e6df604a...
実際の部品写真や手描き図面でどの程度うまく動くのか見たかったが、Dockerイメージを設定しようとした途端、未インストールの依存関係があらゆる形で爆発した
例を見ると、そもそもCADで生成された画像でなければうまく動かないのではという疑いを抱く
これに興味がある人なら、OpenSCADも気に入る可能性が高い。コードで3D CADモデルを生成できる
https://openscad.org/
作者が見ているなら、自動再生動画はやめてほしい。スマホで別のものを聴いていると、いつも音を奪って止めてしまう
自分のオープンソースRust BRep CADカーネルも興味深いかもしれない: https://github.com/ecto/vcad
ホスト版は https://vcad.io にある
CADアプリに何が入るのかについても少し書いてある: https://campedersen.com/tessellation
一人で4か月の間にRustクレートだけで約11.5万行書いたという点が疑わしく、フロントエンドは別にさらに10万行あるとなると、なおさらだ
なぜ「即時」テセレーションを選んだのかも気になる。円を作った瞬間に円らしく見える複数の線分が生まれるが、接線拘束ではすぐ破綻しそうだ。現時点の限界なのか、それともカーネル戦略の一部なのか知りたい
最初の試みについても書いた: https://campedersen.com/cad0
この種のものはよく分からない。製図やモデリングが難しい部分なのではなく、難しいのはCAMプログラミングだ
3Dモデルを読み込んでUI上で工具経路を設定できるオープンソースのプログラムすら見つけられないのに、LLMがモデルから工具経路を生成するのはさらに難しそうだ
何か見落としているのかもしれないが、最初から画像レンダリングがあるなら、すでにCADも持っている可能性が高い。格好いいデモではあるが、用途が何なのか分からない