GenCAD
(gencad.github.io)- GenCAD เป็นโมเดลที่สร้างทั้ง 3D CAD, ประวัติคำสั่ง CAD แบบพารามิเตอร์ทั้งหมด และโปรแกรม CAD ได้จากการป้อนภาพเพียงอย่างเดียว
- B-rep มีความซับซ้อนสำหรับการฝึก AI ขณะที่ mesh, voxel และ point cloud แม้จะหาข้อมูลได้ง่ายกว่า แต่ต้องแลกมาด้วย ความแม่นยำ และความสามารถในการแก้ไข
- สามารถสร้าง ลำดับคำสั่ง CAD แบบพารามิเตอร์ จากภาพ แล้วแปลงเป็นโมเดลโซลิด 3D ผ่าน geometry kernel ได้
- ผสาน autoregressive Transformer, contrastive learning, latent diffusion model และ decoder เพื่อสร้างและกู้คืน latent representation ของภาพและคำสั่ง CAD
- สามารถสร้างตัวอย่าง CAD ได้หลายแบบจากภาพเดียวกัน และยังรองรับการค้นหาแบบมีภาพเป็นเงื่อนไขเพื่อหา 3 อันดับแรกจาก โปรแกรม CAD ราว 7,000 รายการ
ภาพรวม
- GenCAD เป็นโมเดลสร้าง CAD แบบมีภาพเป็นเงื่อนไข ที่ไม่ได้ส่งออกเพียง 3D CAD เท่านั้น แต่ยังรวมถึง ประวัติคำสั่ง CAD แบบพารามิเตอร์ทั้งหมด และโปรแกรม CAD ด้วย
- โครงสร้างข้อมูล CAD อย่าง B-rep มีความซับซ้อน ทำให้ฝึกโมเดล AI ได้อย่างมีประสิทธิภาพยาก ขณะที่การแทนข้อมูลอย่าง mesh, voxel และ point cloud แม้จะหาข้อมูลได้ง่ายกว่า แต่ต้องแลกกับความแม่นยำและความสามารถในการแก้ไขของโมเดล CAD จริง
- GenCAD สร้าง ลำดับคำสั่ง CAD แบบพารามิเตอร์ จากภาพ และแปลงสิ่งนี้เป็นโมเดลโซลิด 3D ด้วย geometry kernel
- เป้าหมายคือทำให้ การสร้างโมเดล 3D ที่แม่นยำและแก้ไขได้ ซึ่งจำเป็นต่อการทำงานด้านวิศวกรรม การผลิต และการสำรวจพื้นที่การออกแบบ เป็นระบบอัตโนมัติบนพื้นฐานของภาพ
องค์ประกอบของโมเดลและความสามารถ
-
สถาปัตยกรรม
- autoregressive Transformer encoder เรียนรู้ latent representation ของลำดับคำสั่ง CAD
- โมเดลที่อิง contrastive learning เรียนรู้ latent representation ร่วมระหว่างลำดับคำสั่ง CAD กับภาพ CAD
- latent diffusion model สร้าง latent representation ของลำดับคำสั่ง CAD โดยมีภาพ CAD เป็นเงื่อนไข
- โมเดล decoder แปลง latent representation ของ CAD เป็น ลำดับคำสั่ง CAD แบบพารามิเตอร์
-
การสร้าง CAD
- GenCAD สามารถสร้างโมเดล CAD ได้จากอินพุตที่เป็น ภาพเรนเดอร์
- แม้ใช้อินพุตภาพเดียวกัน ก็ยังสร้างตัวอย่าง CAD ได้หลายแบบเพื่อเพิ่ม ความหลากหลายของตัวอย่าง
-
การค้นหา CAD
- รองรับการค้นหา CAD แบบมีภาพเป็นเงื่อนไข และค้นหาโปรแกรม CAD ที่ตรงที่สุด 3 อันดับแรกจากชุด โปรแกรม CAD ราว 7,000 รายการ
-
แหล่งข้อมูล
1 ความคิดเห็น
ความเห็นจาก Hacker News
ลองรันอยู่หลายชั่วโมง แต่กับอินพุตที่ไม่ใช่ ข้อมูลฝึก มันสร้างผลลัพธ์ที่ใช้ได้ไม่ได้เลย แม้แต่ภาพง่ายๆ มากๆ
ใน GitHub ก็ระบุไว้ว่าแม้แต่กับข้อมูลฝึกของตัวเองก็มีความน่าเชื่อถือเพียงประมาณ 60% และภาพบนหน้าแรกก็ดูชวนให้เข้าใจผิดพอสมควร
ผมลองสร้างภาพ 10 ภาพที่มีความซับซ้อนใกล้เคียงกับตัวอย่าง และรันภาพละประมาณ 50 ครั้ง แต่ไม่เคยมีครั้งไหนที่ทำงานได้ถูกต้องเลย และแม้จะมีบางครั้งที่มันสร้างอะไรออกมาได้ ก็ผิดทั้งหมด
ในสภาพตอนนี้ถือว่าค่อนข้าง misleading และน่าจะต้องทำอีกเยอะ
ถ้าสามารถสร้าง โมเดล CAD แบบมีพารามิเตอร์ จากสเก็ตช์วาดมือได้จะดีมาก
น่าสนใจอยู่ แต่ไม่แน่ใจเรื่องการใช้งานจริง ส่วนที่กินเวลามากในงานเขียนแบบ CAD คือการกำหนดมิติที่แม่นยำ ระยะห่าง ขนาด ค่าความคลาดเคลื่อนของแต่ละ feature และตั้ง constraints เพื่อให้แก้ไขภายหลังได้ง่าย ซึ่งนี่ไม่ได้ช่วยเรื่องนั้นเลย
คุณอาจวาดสิ่งที่ต้องการเป็นสเก็ตช์ 2D แล้วให้มันสร้างต่อได้ แต่สุดท้ายส่วนที่ยากก็ยังต้องทำเองอยู่ดี
ผมคุ้นกับ OpenSCAD พอสมควร แต่พอซับซ้อนขึ้นนิดเดียวก็ติดขัดมาก ช่วงหลังผมทำก๊อกน้ำสำหรับอ่างล้างจานของเล่น Lego Duplo ให้ลูก
ถ้ามีเครื่องมือ AI/LLM ดีๆ ที่ให้เราใส่สเก็ตช์กับพารามิเตอร์ แล้วช่วยลดเวลาที่ต้องไปค้นเว็บและดูบทสอนเพื่อหาวิธี extrude วงกลมตามเส้นโค้งได้ ผมคงขอบคุณมาก
อนึ่ง เครื่องมือ AI ที่มีอยู่ตอนนี้เข้ากับ OpenSCAD ได้ค่อนข้างดีอยู่แล้ว ดังนั้นถ้าต้องการโมเดลแบบมีพารามิเตอร์ที่สร้างได้จากรูปทรงง่ายๆ ผมแนะนำแนวทางนี้อย่างมาก
ที่ทำงานเก่าผมเคยใช้เวลากับเรื่องนี้มาก ซึ่งก็มีเหตุผลทางตรรกะอยู่มาก เพราะ point cloud ที่สร้างจากกล้องติดศีรษะคุณภาพต่ำทำให้โมเดลมีความซับซ้อนมาก
ตัวอย่างเช่น ถ้าดู point cloud ของโต๊ะ 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...)
จึงมีงานวิจัยจำนวนมากที่พยายามแปลง point cloud ให้เป็นโมเดล “CAD” แบบง่ายลง เช่นให้โต๊ะ LACK แทนด้วยสามเหลี่ยมประมาณ 40 อัน แทนที่จะเป็น 400,000 อัน
วิธีหนึ่งคือแนวคิดประมาณว่า “point cloud นี้ดูเหมือนโต๊ะ งั้นลองสร้างโต๊ะตัวเลือกจำนวนมากแล้วดูว่าอันไหนเข้ากัน” ซึ่งต้องมีโมเดลที่เข้าใจ CAD แบบมีพารามิเตอร์ และสร้างโต๊ะได้หลายแบบโดยปรับพารามิเตอร์ไปเรื่อยๆ จนกว่าจะตรง
อีกวิธีที่อาจง่ายกว่าคือเอา point cloud มาให้โมเดลภาพที่ฝึกจาก CAD วาดโมเดลออกมาเป็นภาพ 2D แล้วค่อยใช้เครื่องมือแบบนี้เพื่อให้ได้โมเดลจริง
มันไม่ค่อยมีประสิทธิภาพ แต่ก็อาจใช้ได้ และยังมีการใช้งานที่ไม่พึงประสงค์อีกมาก เช่นการลอกงานอัตโนมัติ
ตอนที่กำลังดูงานลักษณะคล้ายกัน[0] เพื่อพัฒนา CAD AI ของตัวเอง ผมเจอสิ่งนี้ด้วย มันเป็นแนวทางที่มีศักยภาพสูง แต่ผมคิดว่าโปรเจ็กต์หรือ weights ตอนนี้ยังมี ข้อมูลฝึกหรือเวลาฝึก ไม่พอที่จะทำงานกับโมเดลทั่วไปได้ดีพอ
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 image ก็เจอ dependency ที่ไม่ได้ติดตั้งพังระเบิดไปคนละทิศละทางทันที
ดูจากตัวอย่างแล้วก็ยิ่งสงสัยว่าถ้าไม่ใช่ภาพที่สร้างมาจาก CAD ตั้งแต่แรก มันคงทำงานได้ไม่ดีนัก
ถ้าใครสนใจแนวนี้ ก็น่าจะชอบ OpenSCAD ด้วย เพราะมันสร้าง โมเดล 3D CAD ด้วยโค้ด ได้
https://openscad.org/
ถ้าผู้เขียนมาเห็น อยากให้เอา วิดีโอเล่นอัตโนมัติ ออก เวลาผมกำลังฟังอย่างอื่นบนมือถือ มันชอบแย่งเสียงไปจนสะดุดตลอด
Rust BRep CAD kernel แบบโอเพนซอร์สของผมก็น่าจะน่าสนใจ: https://github.com/ecto/vcad
เวอร์ชันที่โฮสต์ไว้มีที่ https://vcad.io
ผมยังเขียนไว้เล็กน้อยด้วยว่าในแอป CAD มีอะไรอยู่บ้าง: https://campedersen.com/tessellation
แค่คนคนเดียวเขียน Rust crates ไปประมาณ 115k บรรทัด ใน 4 เดือนก็ดูน่าสงสัยแล้ว และฝั่งฟรอนต์เอนด์ยังมีอีก 100k บรรทัดแยกต่างหาก ยิ่งชวนสงสัย
ผมยังสงสัยด้วยว่าทำไมถึงเลือก tessellation แบบ “ทันที” พอสร้างวงกลมก็กลายเป็นเส้นหลายท่อนที่ดูเหมือนวงกลมเลย ซึ่งกับ constraints แบบ tangent น่าจะพังได้เร็วมาก ไม่แน่ใจว่านี่เป็นข้อจำกัดปัจจุบันหรือเป็นส่วนหนึ่งของกลยุทธ์ของ kernel
ผมเขียนถึงการลองครั้งแรกไว้ด้วย: https://campedersen.com/cad0
ผมไม่ค่อยเข้าใจงานประเภทนี้ ส่วนที่ยากไม่ใช่การเขียนแบบหรือการทำโมเดล แต่เป็น CAM programming
ผมยังหาโปรแกรมโอเพนซอร์สที่ให้เราเอาโมเดล 3D เข้าไปแล้วตั้งค่า toolpath ใน UI ไม่ได้เลย ดังนั้นให้ LLM สร้าง toolpath จากโมเดลยิ่งดูยากกว่าเดิมอีก
หรือผมอาจพลาดอะไรไป แต่ถ้ามีภาพเรนเดอร์ตั้งแต่แรก ก็มีโอกาสสูงว่าเขามี CAD อยู่แล้วด้วย มันเป็นเดโมที่เท่มาก แต่ผมไม่เห็นว่า use case คืออะไร