1 คะแนน โดย GN⁺ 2 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 รายการ
  • แหล่งข้อมูล

    • arXiv: งานวิจัย GenCAD
    • Video: วิดีโอเดโม
    • Code: ที่เก็บโค้ด GenCAD

1 ความคิดเห็น

 
GN⁺ 2 시간 전
ความเห็นจาก Hacker News
  • ลองรันอยู่หลายชั่วโมง แต่กับอินพุตที่ไม่ใช่ ข้อมูลฝึก มันสร้างผลลัพธ์ที่ใช้ได้ไม่ได้เลย แม้แต่ภาพง่ายๆ มากๆ
    ใน GitHub ก็ระบุไว้ว่าแม้แต่กับข้อมูลฝึกของตัวเองก็มีความน่าเชื่อถือเพียงประมาณ 60% และภาพบนหน้าแรกก็ดูชวนให้เข้าใจผิดพอสมควร
    ผมลองสร้างภาพ 10 ภาพที่มีความซับซ้อนใกล้เคียงกับตัวอย่าง และรันภาพละประมาณ 50 ครั้ง แต่ไม่เคยมีครั้งไหนที่ทำงานได้ถูกต้องเลย และแม้จะมีบางครั้งที่มันสร้างอะไรออกมาได้ ก็ผิดทั้งหมด
    ในสภาพตอนนี้ถือว่าค่อนข้าง misleading และน่าจะต้องทำอีกเยอะ

    • ตัวอย่างต่างๆ ก็ชวนสับสนเหมือนกัน ทั้งหมดดูเหมือน ภาพที่เรนเดอร์/ส่งออกจากโมเดล 3D อย่างสมบูรณ์ ซึ่งสำหรับงานแบบนี้ผมไม่รู้สึกว่ามันมีประโยชน์ที่สุด
      ถ้าสามารถสร้าง โมเดล CAD แบบมีพารามิเตอร์ จากสเก็ตช์วาดมือได้จะดีมาก
  • น่าสนใจอยู่ แต่ไม่แน่ใจเรื่องการใช้งานจริง ส่วนที่กินเวลามากในงานเขียนแบบ CAD คือการกำหนดมิติที่แม่นยำ ระยะห่าง ขนาด ค่าความคลาดเคลื่อนของแต่ละ feature และตั้ง constraints เพื่อให้แก้ไขภายหลังได้ง่าย ซึ่งนี่ไม่ได้ช่วยเรื่องนั้นเลย
    คุณอาจวาดสิ่งที่ต้องการเป็นสเก็ตช์ 2D แล้วให้มันสร้างต่อได้ แต่สุดท้ายส่วนที่ยากก็ยังต้องทำเองอยู่ดี

    • ถ้าตั้งต้นจากสมมติฐานว่ารู้จักเครื่องมือ CAD ดี ผมว่าใช่เลย ช่วงหลังที่ใช้เครื่องพิมพ์ 3D แม้จะรู้ว่าต้องการอะไร วัดขนาดได้ และสเก็ตช์ลงกระดาษได้ แต่กระบวนการทำให้เป็นโมเดล 3D ที่ใช้งานได้จริงในเครื่องมืออย่าง FreeCAD ก็มักจะยุ่งยากมาก
      ผมคุ้นกับ 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 แล้วค่อยใช้เครื่องมือแบบนี้เพื่อให้ได้โมเดลจริง
      มันไม่ค่อยมีประสิทธิภาพ แต่ก็อาจใช้ได้ และยังมีการใช้งานที่ไม่พึงประสงค์อีกมาก เช่นการลอกงานอัตโนมัติ
    • เหมือนกับหลายอย่างในสาย generative AI นี่ก็ดูเป็นคำตอบสำหรับ ปัญหาที่ไม่มีอยู่จริง
    • ถ้าสามารถวาดเฟอร์นิเจอร์ด้วยดินสอ กดปุ่ม แล้วได้แบบ CAD ที่ใช้ได้ประมาณหนึ่งและแก้ไขต่อได้ มันจะเป็นเครื่องมือมหาศาลสำหรับคนอย่าง ช่างไม้
    • ผมกลับคิดว่าถ้าสร้าง CAD ในรูปแบบโค้ด ที่มีป้ายกำกับชัดเจน น่าจะเข้าท่ากว่า แบบนั้นคุณหยิบเวอร์เนียมาวัดตรวจได้เลยว่าทุกอย่างมีขนาดถูกต้องหรือไม่
  • ตอนที่กำลังดูงานลักษณะคล้ายกัน[0] เพื่อพัฒนา CAD AI ของตัวเอง ผมเจอสิ่งนี้ด้วย มันเป็นแนวทางที่มีศักยภาพสูง แต่ผมคิดว่าโปรเจ็กต์หรือ weights ตอนนี้ยังมี ข้อมูลฝึกหรือเวลาฝึก ไม่พอที่จะทำงานกับโมเดลทั่วไปได้ดีพอ
    MeshCoder แทบจะทำงานได้เฉพาะกับโมเดลที่อยู่บนฐานของข้อมูลฝึกเท่านั้น ผมยังไม่ได้ลอง GenCAD แต่คอมเมนต์อื่นๆ ก็ยืนยันสิ่งที่ผมสงสัย
    [0]: https://daibingquan.github.io/MeshCoder/
    [1]: https://grandpacad.com

  • วิธีแบบนี้ทำกับ OpenSCAD ได้ง่ายมานานแล้ว ผมสร้างโมเดลสวยๆ และซับซ้อนด้วยวิธีนี้มาเยอะมาก และยังทำ คลังพรอมป์ต์ เพื่อแสดงให้ LLM เห็นว่าควรทำอย่างไร รวมถึงใส่โมเดลที่ผมสร้างไว้จำนวนมากด้วย
    https://github.com/cjtrowbridge/vibe-modeling

    • OpenSCAD แทบไม่ทับซ้อนกับ B-rep modeling เลย สิ่งที่พูดถึงตรงนี้น่าจะใกล้กับ CAD แบบ ‘จริงจัง’ มากกว่า
    • ผมก็คล้ายกัน การทำงานด้วย LLM และ OpenSCAD ราบรื่นมาก
    • ผมสงสัยว่ามี inference overhead กับวิธีนี้มากแค่ไหน
    • ขอโทษนะ แต่ผมไม่เข้าใจว่าอะไรตรงนี้ที่เรียกว่าซับซ้อน ดู PNG ที่ออกมาสองสามอัน[1] [2] [3] แล้วมันเรียบง่ายมาก ง่ายระดับโมเดล 3D ชิ้นแรกๆ ที่ทำใน Blender
      ถ้าจะเทียบกัน หนึ่งในแบบล่าสุดของผมประมาณนี้ ซึ่งผมก็ยังเรียกว่าตัวอย่างที่ง่ายมากอยู่ดี[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 ตั้งแต่แรก มันคงทำงานได้ไม่ดีนัก

    • น่าขันตรงที่ Docker image ก็ถูกสร้างมาเพื่อหลีกเลี่ยงปัญหา dependency แบบนั้นโดยตรง
  • ถ้าใครสนใจแนวนี้ ก็น่าจะชอบ OpenSCAD ด้วย เพราะมันสร้าง โมเดล 3D CAD ด้วยโค้ด ได้
    https://openscad.org/

  • ถ้าผู้เขียนมาเห็น อยากให้เอา วิดีโอเล่นอัตโนมัติ ออก เวลาผมกำลังฟังอย่างอื่นบนมือถือ มันชอบแย่งเสียงไปจนสะดุดตลอด

  • Rust BRep CAD kernel แบบโอเพนซอร์สของผมก็น่าจะน่าสนใจ: https://github.com/ecto/vcad
    เวอร์ชันที่โฮสต์ไว้มีที่ https://vcad.io
    ผมยังเขียนไว้เล็กน้อยด้วยว่าในแอป CAD มีอะไรอยู่บ้าง: https://campedersen.com/tessellation

    • ผมก็พยายามทำโปรแกรม CAD ด้วย Rust อยู่ เลยเข้าไปดูเว็บที่โฮสต์ไว้ แต่ไม่ค่อยชัดว่าอะไรใช้งานได้แล้วและอะไรยังไม่ได้
      แค่คนคนเดียวเขียน Rust crates ไปประมาณ 115k บรรทัด ใน 4 เดือนก็ดูน่าสงสัยแล้ว และฝั่งฟรอนต์เอนด์ยังมีอีก 100k บรรทัดแยกต่างหาก ยิ่งชวนสงสัย
      ผมยังสงสัยด้วยว่าทำไมถึงเลือก tessellation แบบ “ทันที” พอสร้างวงกลมก็กลายเป็นเส้นหลายท่อนที่ดูเหมือนวงกลมเลย ซึ่งกับ constraints แบบ tangent น่าจะพังได้เร็วมาก ไม่แน่ใจว่านี่เป็นข้อจำกัดปัจจุบันหรือเป็นส่วนหนึ่งของกลยุทธ์ของ kernel
    • ลืมบอกไปว่ามันเชื่อมกับ Claude ได้ด้วย ดังนั้นสามารถทำ vibe CAD ผ่านอีกไม่กี่ขั้นตอนตามต้นฉบับได้ และผมก็อยากลองฝึกโมเดลคล้ายๆ กันเร็วๆ นี้
      ผมเขียนถึงการลองครั้งแรกไว้ด้วย: https://campedersen.com/cad0
  • ผมไม่ค่อยเข้าใจงานประเภทนี้ ส่วนที่ยากไม่ใช่การเขียนแบบหรือการทำโมเดล แต่เป็น CAM programming
    ผมยังหาโปรแกรมโอเพนซอร์สที่ให้เราเอาโมเดล 3D เข้าไปแล้วตั้งค่า toolpath ใน UI ไม่ได้เลย ดังนั้นให้ LLM สร้าง toolpath จากโมเดลยิ่งดูยากกว่าเดิมอีก

  • หรือผมอาจพลาดอะไรไป แต่ถ้ามีภาพเรนเดอร์ตั้งแต่แรก ก็มีโอกาสสูงว่าเขามี CAD อยู่แล้วด้วย มันเป็นเดโมที่เท่มาก แต่ผมไม่เห็นว่า use case คืออะไร

    • เอาไว้สร้างจากสเก็ตช์ หรือใช้คัดลอกชิ้นส่วนที่เราไม่มีได้