GenCAD
(gencad.github.io)- GenCAD es un modelo que, solo a partir de una imagen de entrada, genera CAD 3D, el historial completo de comandos CAD parametrizados y el programa CAD
- El B-rep es complejo para el entrenamiento de IA, y las mallas, vóxeles y nubes de puntos facilitan la obtención de datos, pero sacrifican la precisión y la capacidad de edición
- Tras generar una secuencia de comandos CAD parametrizados desde una imagen, esta puede convertirse en un modelo sólido 3D mediante un kernel geométrico
- Combina un Transformer autorregresivo, aprendizaje contrastivo, un modelo de difusión latente y un decodificador para generar y reconstruir representaciones latentes de imágenes y comandos CAD
- Puede crear varias muestras CAD a partir de una misma imagen y también admite búsqueda condicionada por imagen para encontrar los 3 mejores entre unos 7,000 programas CAD
Resumen
- GenCAD es un modelo de generación de CAD condicionado por imagen que produce no solo CAD 3D, sino también el historial completo de comandos CAD parametrizados y el programa CAD
- Las estructuras de datos CAD como B-rep son complejas, lo que dificulta el entrenamiento eficiente de modelos de IA, mientras que representaciones como mallas, vóxeles y nubes de puntos facilitan conseguir datos, pero sacrifican la precisión y la capacidad de edición de los modelos CAD reales
- GenCAD genera una secuencia de comandos CAD parametrizados a partir de una imagen y la transforma en un modelo sólido 3D mediante un kernel geométrico
- El objetivo es automatizar, a partir de imágenes, el modelado 3D preciso y editable necesario para tareas de ingeniería, manufactura y exploración del espacio de diseño
Composición del modelo y funciones
-
Arquitectura
- Un codificador Transformer autorregresivo aprende la representación latente de la secuencia de comandos CAD
- Un modelo basado en aprendizaje contrastivo aprende la representación latente conjunta entre la secuencia de comandos CAD y las imágenes CAD
- Un modelo de difusión latente genera la representación latente de la secuencia de comandos CAD condicionado por imágenes CAD
- El modelo decodificador convierte la representación latente CAD en una secuencia de comandos CAD parametrizados
-
Generación de CAD
- GenCAD puede generar modelos CAD a partir de renderizados de imágenes como entrada
- Incluso con la misma imagen de entrada, genera múltiples muestras CAD para ofrecer diversidad de muestras
-
Búsqueda de CAD
- Admite búsqueda de CAD condicionada por imagen y encuentra los 3 mejores programas CAD dentro de una colección de unos 7,000 programas CAD
-
Materiales
1 comentarios
Comentarios de Hacker News
Lo probé durante unas horas, pero con entradas que no eran de los datos de entrenamiento no pudo producir resultados utilizables ni siquiera para dibujos muy simples.
En GitHub dice que incluso con sus propios datos de entrenamiento la confiabilidad es de apenas 60%, así que la imagen de la pantalla inicial se siente bastante engañosa.
Generé 10 imágenes con una complejidad parecida a la de los ejemplos y lo ejecuté unas 50 veces por imagen, pero no hubo ni un solo caso en que funcionara correctamente, y cuando rara vez producía algo, estaba completamente mal.
En su estado actual es bastante misleading y parece que necesita mucho más trabajo.
Si pudiera crear modelos CAD parametrizados a partir de bocetos hechos a mano, eso sí sería realmente bueno.
Es interesante, pero no sé qué tan práctico sea. La parte que más tiempo consume en un plano CAD es definir las dimensiones exactas, separaciones, tamaños, tolerancias, etc. de cada feature, y establecer las restricciones para que luego sea fácil modificarlo, y esto no hace nada de eso.
Tal vez puedas dibujar en 2D lo que quieres y generarlo, pero al final la parte difícil la sigues teniendo que hacer a mano.
Conozco bastante bien OpenSCAD, pero en cuanto algo se vuelve un poco más complejo, me trabo mucho. Hace poco hice una llave de agua para un fregadero de cocina Lego Duplo para mi hijo.
Si hubiera una buena herramienta de AI/LLM donde pudiera meter un boceto y parámetros, y me ahorrara tiempo buscando en la web cómo extruir un círculo a lo largo de una curva y viendo tutoriales, se lo agradecería muchísimo.
Por cierto, las herramientas de IA actuales se llevan bastante bien con OpenSCAD, así que si necesitas un modelo parametrizado que pueda hacerse con formas simples, recomiendo mucho ese flujo.
En un trabajo anterior dedicamos bastante tiempo a esto por una razón bastante lógica. Las nubes de puntos generadas por cámaras montadas en la cabeza, de baja calidad, hacen que los modelos se vuelvan muy complejos.
Por ejemplo, si ves una nube de puntos de una mesa IKEA LACK (https://www.ikea.com/gb/en/p/lack-nest-of-tables-set-of-2-wh...), sería increíblemente compleja. Por eso el costo computacional se dispara incluso para interactuar un poco con ella (https://www.researchgate.net/publication/221064696/figure/fi...).
Por eso hay mucha investigación enfocada en convertir nubes de puntos en modelos “CAD” simplificados. Algo como representar una mesa LACK con unas 40 caras triangulares en vez de 400 mil.
Un enfoque es: “esta nube de puntos parece una mesa, así que generemos muchos candidatos de mesa y veamos si alguno encaja”. Para eso necesitas entender CAD paramétrico y tener un modelo que pueda generar muchas mesas con parámetros ajustables hasta que coincida.
Un camino que podría ser más fácil sería tomar la nube de puntos, hacer que un modelo de imágenes entrenado con modelos CAD la dibuje como imagen 2D, y luego obtener el modelo real con una herramienta como esta.
No sería eficiente, pero podría funcionar. También hay muchos usos menos deseables, como el plagio automatizado.
Mientras revisaba cómo mejorar mi propia IA para CAD, vi algunos intentos parecidos a este[0]. Son soluciones con muchísimo potencial, pero creo que los proyectos o pesos actuales no tienen suficientes datos de entrenamiento ni tiempo de entrenamiento para funcionar bien con modelos arbitrarios.
MeshCoder prácticamente solo funciona con modelos basados en datos de entrenamiento. No he probado GenCAD, pero otros comentarios confirmaron mis sospechas.
[0]: https://daibingquan.github.io/MeshCoder/
[1]: https://grandpacad.com
Este tipo de cosas se podían hacer fácilmente con OpenSCAD desde hace mucho. Yo he creado muchos modelos geniales y complejos de esta forma, e incluso hice un repositorio de prompts para mostrarle a un LLM cómo hacerlo, incluyendo muchos modelos que yo mismo hice.
https://github.com/cjtrowbridge/vibe-modeling
Para comparar, uno de mis diseños recientes se ve más o menos así, y aun así yo seguiría llamándolo un caso muy simple[4].
No soy un ingeniero mecánico entrenado que trabaja comercialmente; solo soy un programador que diseña en su tiempo libre.
[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...
Quería ver qué tan bien funciona con fotos de piezas reales o con planos dibujados a mano, pero apenas intenté configurar la imagen de Docker, empezaron a explotar dependencias no instaladas de todas las maneras posibles.
Viendo los ejemplos, me queda la sospecha de que en realidad no funcionará bien si la imagen no fue generada originalmente desde CAD.
A quien esto le parezca interesante probablemente también le guste OpenSCAD. Puedes generar modelos CAD 3D con código.
https://openscad.org/
Si el autor está leyendo esto, ojalá quite los videos con reproducción automática. En el teléfono siempre interrumpen y secuestran el audio cuando estás escuchando otra cosa.
Mi kernel CAD BRep de código abierto en Rust también podría resultar interesante: https://github.com/ecto/vcad
La versión alojada está en https://vcad.io
También escribí un poco sobre qué entra en una app CAD: https://campedersen.com/tessellation
Me parece sospechoso que una sola persona haya escrito unas 115 mil líneas solo en crates de Rust en 4 meses, y aparte otras 100 mil líneas para el frontend.
También me pregunto por qué eligieron teselación “inmediata”. En cuanto creas un círculo, aparecen varios segmentos de línea que parecen un círculo, y da la impresión de que las restricciones tangenciales fallarían enseguida. No sé si es una limitación actual o parte de la estrategia del kernel.
También escribí sobre el primer intento: https://campedersen.com/cad0
Este tipo de cosas no me termina de hacer sentido. La parte difícil no es el dibujo técnico ni el modelado, sino la programación CAM.
Ni siquiera he podido encontrar un programa open source que importe un modelo 3D y te deje configurar trayectorias de herramienta desde la UI, así que hacer que un LLM genere trayectorias a partir del modelo se ve todavía más difícil.
Tal vez me estoy perdiendo de algo, pero si ya tienes un render de imagen desde el principio, probablemente ya tienes también el CAD. Es un demo bonito, pero no entiendo cuál sería el caso de uso.