TrendShift · AI for 3D CAD Design

GenCAD — 사진 한 장으로
3D 설계도를 그려내는 AI

MIT 연구실에서 나온 GenCAD는 손그림이나 사진을 입력하면 단순한 3D 모형이 아니라 "수정 가능한 CAD 프로그램"까지 만들어준다.

ferdous-alam/GenCAD · Python · License 미명시 · 1.4k★ 2026-05-20
00 — 들어가며Context

먼저, CAD가 뭐고 왜 어렵나?

3D 모델을 만든다는 것 = 좌표 더미를 그리는 게 아니다.

CAD는 컴퓨터로 기계 부품·건물·제품을 설계할 때 쓰는 소프트웨어다. AutoCAD, SolidWorks, Fusion 360 같은 도구를 들어봤다면 그게 CAD다. 엔지니어가 마우스를 움직여 "여기에 원을 그리고, 그걸 10mm 돌출시키고, 모서리를 둥글게 깎고…" 하는 식으로 명령을 쌓아 하나의 부품을 만들어낸다.

그래서 진짜 CAD 파일은 "완성된 모형 사진"이 아니라 그 모형을 만든 명령들의 역사다. 이 역사가 살아 있어야 나중에 "원 지름을 20mm로 바꿔" 한 줄로 수정할 수 있다. 단순한 3D 메시(삼각형 덩어리)에는 이런 수정 능력이 없다.

Term · 용어
CAD (Computer-Aided Design, 컴퓨터 보조 설계)
기계 부품, 자동차, 건축물 같은 물건을 컴퓨터에서 설계하는 분야. 결과물은 단순한 형태가 아니라 "이 점에 원을 그렸고, 그 다음 이만큼 돌출했다"라는 명령 시퀀스로 저장된다. 요리의 레시피와 같다 — 완성된 음식 사진(메시)만 보면 재현이 어렵지만, 레시피(CAD 프로그램)가 있으면 누구든 재현하고 수정할 수 있다.
Term · 용어
B-rep (Boundary Representation, 경계 표현)
CAD에서 3D 솔리드를 표현하는 정통 방식. 물체의 표면을 점·선·면의 위상 구조로 정확하게 기술한다. 자동차의 외판처럼 매끄러운 곡면을 정확히 표현할 수 있어서 제조·가공 단계에 그대로 쓸 수 있다. 반대로 메시(mesh)는 같은 곡면을 작은 삼각형 수천 장으로 근사한 것이다.
Analogy · 레시피 비유

CAD 명령 시퀀스는 김치찌개 레시피 같다. "돼지고기 200g 볶고, 김치 한 컵 넣고, 물 500ml 부어 10분 끓인다." 이 텍스트가 있으면 누구든 재현하고, 양을 두 배로 늘리고, 매운맛을 빼는 식으로 수정할 수 있다.

반면 완성된 김치찌개 사진(메시·복셀)은 보기엔 좋지만 "고기 양 두 배로" 같은 수정이 불가능하다. AI가 사진만 그리는 건 쉽지만, 레시피까지 만들어내려면 훨씬 어려운 일을 해야 한다.

01 — 한 줄 요약TL;DR

이 프로젝트의 핵심 메시지

GenCAD가 다른 3D 생성 AI와 결정적으로 다른 지점.

Core Message

"사진을 입력해서 3D 메시를 뱉는 AI는 많다. GenCAD는 같은 입력에 대해 편집 가능한 CAD 프로그램을 출력한다."

점·선·면이 아니라 "원을 그렸다 → 돌출했다 → 모서리를 깎았다" 같은 parametric 명령 시퀀스를 생성한다. 결과적으로 같은 이미지에서 출발해도 GenCAD가 만든 모델은 그대로 제조 현장이나 엔지니어 손으로 넘어갈 수 있다 — 수치 한 줄만 바꿔서.

이걸 가능하게 만든 비밀은 한 모델이 아니라 4개의 모듈을 사슬처럼 연결한 파이프라인이다. Transformer가 CAD 언어를 익히고, Contrastive Learning이 이미지와 CAD를 짝지어주고, Latent Diffusion이 그 사이 빈자리를 채워준다.

02 — 왜 주목받는가Why now

2026년 5월, 트렌딩에 오른 이유

2025년 TMLR에 실린 논문이 코드 공개와 함께 뒤늦게 주목받는 이유.

시대적 배경 — 3D 생성 AI의 두 갈래

3D 생성 AI는 그동안 두 갈래로 발전해 왔다. 한쪽은 NeRF처럼 시점별 사진을 모아 입체 장면을 복원하는 길, 다른 한쪽은 점구름·메시·복셀을 직접 생성하는 길이다. 둘 다 "어떻게 보이는가"는 잘 만들어내지만, "어떻게 만들어졌는가"는 알려주지 않는다. 제조업·엔지니어링에서 이걸 그대로 쓰기에는 부족하다.

GenCAD가 다른 점은 출력 형식이다. AI가 3D 메시 대신 CAD 명령을 토큰처럼 줄지어 뱉으면, 그 출력을 pythonocc-core(오픈소스 CAD 커널) 같은 도구로 다시 진짜 솔리드 모델로 변환할 수 있다. 이걸 진짜로 동작시킨 첫 공개 구현체라는 점이 트렌딩 이유다. 1.4k 별을 단 GitHub와 함께 가중치·데이터셋·도커 환경까지 같이 풀려서 학생·연구자가 곧바로 돌려볼 수 있다.

경쟁 비교 — 기존 3D 생성기 vs GenCAD

비교 항목전통 3D 생성기GenCAD
출력 형식메시 / 점구름 / 복셀CAD 명령 시퀀스
수정 가능성거의 불가수치 한 줄 변경
제조 적용리메시·청소 필요B-rep 솔리드 직접 사용
표현 정확도곡면 근사 (삼각형)곡면 정확 표현
입력이미지·텍스트이미지·손그림
핵심 기술NeRF / DiffusionTransformer + CLIP + Latent Diffusion
Term · 용어
TMLR (Transactions on Machine Learning Research)
2022년에 시작된 머신러닝 분야 저널. NeurIPS·ICML 같은 학회와 달리 마감일이 없고, 동료 평가가 통과하면 게재된다. 학회 deadline 압박 없이 깊이 있는 연구를 게재할 수 있어서 최근 연구자들이 선호한다.
03 — 기술 스택Stack

전체 기술 지도

파이썬 99.8% — 모델 코드부터 CAD 커널까지.

레포의 environment.ymlrequirements.txt를 보면 라이브러리 선택이 흥미롭다. 일반 딥러닝 코드에서 잘 안 보이는 CAD 도메인 전용 라이브러리가 섞여 있다.

딥러닝 기본기 — PyTorch 계열

모델 골격

  • torch / torchvision — 기본 텐서·비전 연산
  • transformers — Hugging Face, 토크나이저·유틸 활용
  • einops — 텐서 차원을 사람 말로 다루는 보조 도구 (rearrange(x, 'b h w c -> b c h w'))
  • ema_pytorch — 학습 중 가중치 지수이동평균, diffusion 안정화 단골 트릭

CAD 도메인 — pythonocc-core

OpenCASCADE 바인딩

  • pythonocc-core 7.9.0 — OpenCASCADE(오픈소스 CAD 커널)의 Python 바인딩
  • 모델이 만들어낸 명령 시퀀스 → 진짜 B-rep 솔리드로 변환
  • conda-forge에서만 설치되기 때문에 Dockerfile이 miniconda 베이스를 쓴다

설치: conda install -c conda-forge pythonocc-core=7.9.0

표현 학습 — x_clip 재활용

CLIP 구현체를 CAD-이미지 짝짓기로

  • x_clip — CLIP(이미지-텍스트 짝짓기) 구현체. GenCAD에서는 CAD-이미지 짝짓기(CCIP)에 재활용
  • "이미지-텍스트"가 아니라 "이미지-명령 시퀀스" 짝짓기로 응용

데이터·시각화

3D 데이터 처리 라이브러리

  • h5py — 학습된 CAD/이미지 임베딩을 큰 파일 하나(HDF5)에 저장
  • trimesh — 3D 메시 읽기·쓰기
  • opencv-python — 입력 이미지 전처리
  • plyfile — PLY 포맷(점구름) 처리

인프라 — Docker + xvfb

가상 디스플레이로 헤드리스 렌더링

  • continuumio/miniconda3 베이스 + conda env
  • xvfb (X Virtual Framebuffer) — 모니터 없는 서버에서 OpenGL/OpenCASCADE 렌더링
  • OpenGL 라이브러리 — 3D 형상 시각화

실행 예: xvfb-run --server-args="-screen 0 2048x2048x24" python inference_gencad.py

Term · 용어
xvfb (X Virtual Framebuffer, X 가상 프레임버퍼)
모니터가 없는 서버에서 GUI 프로그램을 돌리기 위한 가짜 디스플레이. 진짜 화면은 안 보이지만 OpenGL·OpenCASCADE 같은 라이브러리는 정상적으로 그림을 그리고, 그 결과를 이미지 파일로 저장할 수 있다. 클라우드 GPU 서버에서 3D 렌더링을 돌릴 때 단골로 쓰인다.
04 — 아키텍처Pipeline

4단계 파이프라인 심화

한 모델이 아니라 네 모델이 협업하는 구조.

GenCAD는 다음 네 모듈이 줄지어 학습된다. 한 번에 통째로 학습하는 게 아니라, 앞 단계가 끝나야 다음 단계를 학습할 수 있는 의존 관계를 갖는다.

시스템 구조도

  ┌─────────────────────────────────────────────────────────┐
  │  (1) CSR (CAD Sequence Representation)                  │
  │      CAD 명령 시퀀스를 압축된 latent 벡터로 변환         │
  │      Autoregressive Transformer Encoder + Decoder        │
  │                                                          │
  │      "원 그리기 → 돌출 → 깎기 …" ──► [768차원 벡터]      │
  └─────────────────────────────────────────────────────────┘
                            │
                            ▼
  ┌─────────────────────────────────────────────────────────┐
  │  (2) CCIP (Contrastive CAD-Image Pretraining)           │
  │      CAD latent 와 이미지 latent 를 같은 공간에 정렬     │
  │      CLIP 방식의 contrastive loss                        │
  │                                                          │
  │      이미지 ─────► [latent A] ┐                          │
  │                                ├ "이건 같은 부품이다" 학습│
  │      CAD 시퀀스 ──► [latent B] ┘                         │
  └─────────────────────────────────────────────────────────┘
                            │
                            ▼
  ┌─────────────────────────────────────────────────────────┐
  │  (3) DP (Diffusion Prior)                               │
  │      이미지 latent 를 보고 → CAD latent 를 만들어내는    │
  │      latent diffusion 모델                               │
  │                                                          │
  │      이미지 latent ──► [noise] ──► ... ──► CAD latent    │
  └─────────────────────────────────────────────────────────┘
                            │
                            ▼
  ┌─────────────────────────────────────────────────────────┐
  │  (4) Decoder (재사용된 CSR Decoder)                     │
  │      CAD latent 를 다시 명령 시퀀스로 변환               │
  │                                                          │
  │      [latent 벡터] ──► "원 그리기 → 돌출 → 깎기 …"       │
  │                                                          │
  │      ↓ pythonocc-core 가 받아 진짜 3D 솔리드로 변환      │
  └─────────────────────────────────────────────────────────┘

핵심 설계 선택 — 왜 latent 공간을 거치는가

여기서 흥미로운 설계 선택은 이미지와 CAD를 직접 잇지 않고 latent 공간에서 잇는다는 점이다. 이미지에서 곧바로 명령을 뱉게 만들 수도 있지만, 그러면 학습이 어렵다. CAD 명령은 길고 구조적이고, 이미지는 픽셀 매트릭스다 — 두 세계가 너무 다르다. 그 사이에 latent space(잠재 공간)이라는 중간 광장을 두고, 양쪽 모두를 그 광장 위에 떨어뜨려 짝짓는다.

Term · 용어
Latent space (잠재 공간)
고차원 데이터(이미지·CAD 명령)를 압축한 작은 차원의 의미 지도. 비슷한 것은 가깝게, 다른 것은 멀게 자리잡는다. 사람이 직접 좌표를 정해주지 않고, 모델이 학습 중에 "이게 비슷한 것 같다"를 스스로 배워서 만든다.
Term · 용어
Contrastive Learning (대조 학습)
"같은 것끼리는 가깝게, 다른 것끼리는 멀게" 단순한 규칙으로 표현을 학습시키는 방법. OpenAI의 CLIP이 같은 방식으로 이미지와 텍스트를 짝지었다. 영어-한국어 단어장을 외울 때 짝을 강제로 매칭시키는 것과 같다.
Term · 용어
Diffusion (확산 모델)
노이즈(잡음)가 가득한 데이터에서 시작해 한 단계씩 잡음을 걷어내며 깨끗한 데이터를 복원하는 생성 모델. Stable Diffusion이 이미지 생성으로 유명하지만, GenCAD는 같은 원리를 latent 벡터 자체에 적용한다 — 픽셀이 아니라 작은 의미 벡터를 노이즈에서 복원한다.
Analogy · 번역 비유

이미지에서 CAD 명령을 곧바로 만드는 건 그림책을 보고 영어로 곧바로 받아쓰기하는 일이다. 가능은 하지만 어렵다.

GenCAD는 중간에 "공통 언어(latent)"를 만들어 둔다. 그림책도 한국어로 풀고, 영어 문장도 한국어로 풀어둔 뒤, 한국어끼리 짝짓는다. 이러면 양쪽이 각자의 모국어로만 학습돼도 짝짓기는 쉬워진다.

05 — 디렉토리Repo map

레포 구조 해부

레포를 처음 열었을 때 어디부터 봐야 하나.

GenCAD/
├── cadlib/                 # CAD 명령 시퀀스 정의·파싱·B-rep 변환
├── model/                  # 모델 정의 (CSR Encoder/Decoder, CCIP, DP)
│   └── ckpt/               # 다운받은 사전학습 가중치 자리
├── trainer/                # 학습 루프 (CSR / CCIP / DP 각각)
├── config/                 # 하이퍼파라미터 yaml
├── data/                   # 데이터셋 + 임베딩 캐시 (h5)
│   ├── images/             # CAD 렌더 이미지
│   └── embeddings/         # CCIP 학습 후 추출된 임베딩
├── utils/                  # 헬퍼 함수
├── results/                # 추론 결과 저장 자리
├── assets/                 # README 이미지
│
├── train_gencad.py         # 학습 진입점 (3단계 모두)
├── inference_gencad.py     # 이미지 입력 → CAD 출력
├── stl2img.py              # STL 파일 → PNG 변환 (시각화용)
│
├── Dockerfile              # miniconda + xvfb 환경
├── environment.yml         # conda env 정의
└── requirements.txt        # pip 의존성 (Docker용 conda env가 권장)

핵심 흐름은 단순하다. train_gencad.pycsr, ccip, dp 세 가지 모드를 받아 각 단계를 순차로 학습한다. 그 다음 inference_gencad.py가 이미지를 받아 학습된 4개 모듈을 모두 통과시켜 CAD 시퀀스를 토해낸다. cadlib/는 그 시퀀스를 진짜 솔리드로 변환하는 책임을 진다.

Trap · 함정
"모델 코드만 보면 이해되겠지" 하는 접근

model/ 디렉토리만 들여다보면 GenCAD가 안 보인다. 진짜 핵심은 "CAD 명령을 어떻게 토큰으로 표현했는가"에 있고, 그건 cadlib/ 안에 있다. 거기 정의된 vocabulary(원 그리기, 돌출, 깎기 …)를 먼저 봐야 모델이 무엇을 출력하는지 머릿속에 그려진다.

Fix · 권장 읽기 순서
cadlib → trainer/csr → model/csr → ccip → dp

도메인(cadlib) → 학습 루프(trainer) → 모델 구조(model) 순서로 따라가면, 각 단계가 왜 그렇게 설계됐는지 보인다. 모델 구조부터 보면 "이 차원은 왜 768이지?" 같은 질문에 답하기가 어렵다.

06 — 학습 단계3 stages

3번 나눠서 굽는 학습

한 번에 통째로가 아니라, 세 번 굽고 마지막에 조립.

GenCAD를 처음부터 학습한다고 가정하면 다음 세 명령을 순서대로 돌려야 한다. 각 단계는 앞 단계의 가중치를 입력으로 받는다.

단계 1 — CSR (CAD 시퀀스 오토인코더)

모델이 CAD 명령 시퀀스를 받아 압축했다가 복원하는 법을 익힌다. 이미지는 아직 안 본다. 이 단계가 끝나면 모델은 "CAD 언어"를 말할 줄 알게 된다.

python train_gencad.py csr -name test -gpu 0

단계 2 — CCIP (이미지 ↔ CAD 짝짓기)

1단계에서 만들어진 CAD encoder를 가져와 고정하고, 이미지 encoder를 새로 학습한다. Contrastive loss로 "같은 부품의 이미지와 명령 시퀀스는 가깝게, 다른 부품끼리는 멀게" 표현을 정렬한다.

python train_gencad.py ccip -name test -gpu 0 \
  -cad_ckpt "model/ckpt/ae_ckpt_epoch1000.pth"

단계 3 — DP (Diffusion Prior)

2단계에서 추출된 임베딩(cad_embeddings.h5, sketch_embeddings.h5)을 입력으로 받아, 이미지 latent를 보고 CAD latent를 생성하는 diffusion prior를 학습한다. 추론 시 이 단계가 "그림에서 설계 의도"를 추정하는 다리 역할을 한다.

python train_gencad.py dp -name test -gpu 0 \
  -cad_emb 'data/embeddings/cad_embeddings.h5' \
  -img_emb 'data/embeddings/sketch_embeddings.h5'

이렇게 단계를 나누는 이유는 학습 효율성이다. 한 번에 통째로 학습하려 하면 어느 한 부분이 못 따라와서 전체가 흔들린다. 단계별로 "이번엔 이것만 잘하면 돼"를 강제하면 각 모듈이 안정적으로 수렴한다.

07 — 직접 돌려보기Run it

도커가 답이다

pythonocc-core 때문에 로컬에서 그냥 pip install 하면 거의 망한다.

레포는 두 가지 설치 방법을 안내하지만, Docker 방식이 압도적으로 추천이다. pythonocc-core는 conda-forge로만 깔리고, OpenGL/xvfb까지 세팅돼야 추론이 돌아가기 때문이다. Mac이나 Windows에서 로컬 설치를 시도하면 첫 한 시간이 의존성 지옥에 빠진다.

1단계 — 이미지 빌드

git clone https://github.com/ferdous-alam/GenCAD
cd GenCAD
docker build -t gencad:latest .

처음 빌드는 conda env 설치 때문에 10~20분 걸린다. 이후엔 캐시가 잡혀 빨라진다.

2단계 — 추론 (이미지 → CAD)

먼저 사전학습 가중치와 샘플 이미지를 Google Drive에서 받아 각각 model/ckpt/data/images/에 배치해야 한다. 그 다음 컨테이너에 GPU 권한을 주고 진입한다.

docker run --gpus all \
  -v $(pwd)/data/images:/app/data/images \
  -v $(pwd)/assets:/app/assets \
  -v $(pwd)/results:/app/results \
  -it gencad:latest /bin/bash

# 컨테이너 안에서
xvfb-run --server-args="-screen 0 2048x2048x24" \
  python inference_gencad.py -image_path data/images -export_img
Term · 용어
-v (Docker volume mount, 볼륨 마운트)
호스트(내 컴퓨터)의 폴더를 컨테이너 안의 폴더로 연결하는 옵션. -v $(pwd)/results:/app/results는 "현재 디렉토리의 results 폴더를 컨테이너의 /app/results와 같은 자리로 만들어줘"라는 뜻. 컨테이너 안에서 결과를 저장하면 호스트에서도 바로 볼 수 있다.
Term · 용어
--gpus all
호스트의 모든 GPU를 컨테이너에 노출시키는 Docker 옵션. NVIDIA Container Toolkit이 설치돼 있어야 동작한다. GenCAD 학습은 12GB 이상 VRAM을 가진 GPU(예: RTX 3060 12GB, A4000, A100)에서 안정적으로 돌아간다.
08 — 학습 포인트What to learn

여기서 배울 수 있는 것

GenCAD 코드를 따라가며 자연스럽게 익히게 되는 기술들.

이 레포는 단순한 "재밌는 데모" 이상이다. 한 도메인을 깊이 풀어내기 위해 여러 딥러닝 빌딩블록을 어떻게 조립하는지를 보여주는 좋은 예다. 분야가 다르더라도 응용할 수 있는 패턴이 많다.

포인트 1 — 구조적 데이터를 토큰화하는 법

유형 다른 액션 → 단일 vocabulary

  • CAD 명령(원, 돌출, 깎기 등)처럼 "유형이 다른 액션의 시퀀스"를 어떻게 단일 vocabulary로 묶어 Transformer에 먹이는가
  • 그 설계가 cadlib/ 안에 있다
  • 응용: 음악 시퀀스, 차트 명령, 디자인 도구 매크로 등 어떤 도메인이든 활용 가능한 패턴

포인트 2 — 두 모달을 latent에서 잇는 법

CLIP의 응용 — 이미지 ↔ 명령 시퀀스

  • CLIP을 따라하는 방식이지만, "이미지 ↔ 텍스트"가 아니라 "이미지 ↔ 명령 시퀀스"라는 점이 다르다
  • 응용 시도해볼 만한 도메인 쌍: 코드 ↔ 스크린샷, 회로도 ↔ 사진, 음악 악보 ↔ 오디오

포인트 3 — Latent Diffusion의 진짜 효용

픽셀이 아니라 의미 벡터에 diffusion

  • Stable Diffusion은 픽셀이 아니라 VAE latent에 diffusion을 건다. GenCAD도 같은 trick을 쓴다
  • 다만 latent의 의미가 "이미지의 압축"이 아니라 "CAD 시퀀스의 압축"이라는 게 다르다
  • 교훈: 잘 만들어진 latent 위에서는 diffusion이 훨씬 효율적이라는 사실이 직접 확인된다

포인트 4 — 다단계 학습 파이프라인 운영

한 진입점에서 세 모드 분기

  • 3단계 sequential 학습은 운영 측면에서 까다롭다 — 가중치 버전 관리, 임베딩 캐시 갱신, 단계별 evaluation
  • train_gencad.py가 어떻게 한 진입점에서 세 모드를 분기하는지 따라가보면 큰 프로젝트의 학습 코드를 어떻게 구조화할지 감이 잡힌다
09 — 실습 과제Hands-on

난이도별 5개 실습

Easy → Hard.

실습 1 — 추론만 돌려보기Easy

1) Docker 이미지 빌드 2) 사전학습 가중치·샘플 이미지 5장 다운 3) inference_gencad.py 실행 4) 출력된 CAD 명령 시퀀스를 텍스트로 직접 확인

배우는 것: Docker GPU 마운트, "AI가 명령을 만든다"의 의미를 체감

실습 2 — cadlib 코드 읽기Easy

1) cadlib/의 명령 vocabulary 정의 추적 2) B-rep 변환 코드 따라가기 3) 같이 OpenCASCADE 기본 개념(Wire, Face, Solid) 검색해 익히기 4) 작은 부품(원기둥 등)의 명령 시퀀스를 손으로 작성해 변환

배우는 것: CAD 토큰화 설계, OpenCASCADE 기초

실습 3 — CSR encoder from-scratch 학습Medium

1) 전체 파이프라인은 무겁지만 CSR 단계는 GPU 한 대로 며칠이면 돌릴 수 있다 2) 사전학습 모델 없이 train_gencad.py csr 실행 3) loss 곡선, latent 차원 변화 모니터링 4) 학습된 encoder로 재구성(reconstruction) 정확도 측정

배우는 것: Transformer 학습 곡선, autoregressive 디코딩

실습 4 — 손그림 입력 실험Medium

1) 종이에 간단한 부품 스케치 2) 사진 찍어 data/images/에 넣기 3) 추론 실행 → 출력된 CAD 모델 확인 4) 어떤 종류의 스케치가 잘 되고 어떤 게 안 되는지 분석

배우는 것: 모델의 실제 한계, 도메인 갭, 데이터 분포

실습 5 — SVG 도메인으로 패턴 이식Hard

1) SVG 명령(M, L, C 등)을 토큰화하는 vocabulary 설계 2) 작은 SVG 데이터셋 수집 (수만 개) 3) CSR과 동일 구조로 SVG encoder/decoder 학습 4) 이미지 → SVG 생성기를 작은 스케일로 구현 5) GenCAD의 전체 구조를 그대로 가져와도 동작 원리가 비슷함을 확인

배우는 것: 도메인 이식, 구조적 출력 생성 모델의 일반화

10 — 학습 로드맵7 weeks

7주 심화 학습 로드맵

주차별로 따라가면 GenCAD 전 영역 이해.

Week 01
Transformer 기초 + 토크나이제이션

"Attention Is All You Need" 정독, BPE/SentencePiece 작동 원리 → 직접 작은 시퀀스 vocab 만들어보기

Week 02
Autoregressive Encoder/Decoder

GPT 스타일 디코더 직접 구현, teacher forcing → CSR 코드와 비교

Week 03
CLIP과 Contrastive Learning

OpenAI CLIP 논문, InfoNCE loss 수식 이해 → x_clip 라이브러리 분석, CCIP 코드 읽기

Week 04
Diffusion Models 기초

DDPM, DDIM 논문 → Stable Diffusion의 latent diffusion 개념 → DP 모듈 분석

Week 05
CAD & OpenCASCADE

B-rep 표현, pythonocc-core 튜토리얼 → 작은 부품 직접 코드로 생성

Week 06
3D 데이터셋 & h5py

DeepCAD, ABC dataset 구조 분석 → h5py로 임베딩 캐시 직접 구축

Week 07
Docker + xvfb 헤드리스 렌더링

NVIDIA Container Toolkit 세팅, xvfb로 OpenGL 헤드리스 → 클라우드 GPU에서 GenCAD 처음부터 학습 시도

11 — 키워드 사전Glossary

핵심 용어 한눈에

자주 마주칠 단어들.

CAD
Computer-Aided Design. 컴퓨터로 기계 부품·건축물 설계. 결과는 명령 시퀀스(레시피)로 저장.
B-rep
Boundary Representation. 3D 솔리드를 점·선·면의 위상 구조로 정확히 표현. 메시 근사와 대비.
CSR
CAD Sequence Representation. GenCAD 1단계. CAD 명령 시퀀스를 latent 벡터로 압축하는 Transformer encoder/decoder.
CCIP
Contrastive CAD-Image Pretraining. GenCAD 2단계. CLIP 방식으로 CAD-이미지 짝짓기.
DP (Diffusion Prior)
GenCAD 3단계. 이미지 latent → CAD latent 생성을 학습하는 latent diffusion 모델.
Latent Space
고차원 데이터(이미지·시퀀스)를 압축한 의미 지도. 비슷한 것끼리 가깝게 배치.
Contrastive Learning
"같은 것끼리 가깝게, 다른 것끼리 멀게" 학습. CLIP의 핵심 원리.
Diffusion Model
노이즈에서 시작해 한 단계씩 잡음을 걷어내며 데이터를 복원하는 생성 모델. Stable Diffusion의 원리.
Latent Diffusion
픽셀이 아닌 latent 벡터에 diffusion 적용. 학습·추론 모두 훨씬 효율적.
Autoregressive
앞 토큰을 보고 다음 토큰 예측, 또 그 다음… GPT·CSR Decoder 방식.
Transformer
Self-attention 기반 아키텍처. 시퀀스 데이터(언어·CAD 명령) 학습에 표준.
CLIP
OpenAI의 이미지-텍스트 contrastive 모델. GenCAD의 CCIP가 같은 패턴 응용.
pythonocc-core
OpenCASCADE(오픈소스 CAD 커널)의 Python 바인딩. CAD 명령 → B-rep 솔리드 변환.
OpenCASCADE
유서 깊은 오픈소스 CAD 커널. FreeCAD가 내부적으로 사용. B-rep 솔리드 모델링.
xvfb
X Virtual Framebuffer. 모니터 없는 서버에서 GUI 라이브러리 동작하게 해주는 가짜 디스플레이.
h5py / HDF5
대용량 수치 데이터를 단일 파일에 저장. 임베딩 캐시 저장용.
EMA (Exponential Moving Average)
학습 중 가중치의 지수이동평균 유지. Diffusion 추론 안정화 단골 트릭.
NeRF
Neural Radiance Fields. 시점별 사진에서 입체 장면 복원. GenCAD의 대안 진영.
Parametric CAD
수치 한 줄만 바꿔도 모델 전체가 재생성되는 CAD 표현. GenCAD 출력이 추구하는 형태.
TMLR
Transactions on Machine Learning Research. 마감일 없는 ML 저널. GenCAD 논문 게재처.
12 — 참고 링크Refs

더 깊이 파고들 자료

공식 · 논문 · 관련 기술.

공식 자료

관련 핵심 라이브러리

관련 데이터셋 · 논문

Action · 이번 주에 해볼 것

GenCAD를 처음 만났다면 이 순서로 7일.

  1. 1일차 — 추론만 돌려본다. Docker 이미지를 빌드하고, 사전학습 가중치를 받아 샘플 이미지 5장을 넣어본다. CAD 명령 시퀀스가 텍스트로 어떻게 생겼는지 직접 출력해 보면 "AI가 명령을 만든다"는 게 무슨 의미인지 체감된다.
  2. 2~3일차 — cadlib 코드를 읽는다. 명령 vocabulary가 어떻게 정의돼 있는지, B-rep으로 변환하는 코드가 어떤 모양인지 따라간다. 이 시점에서 OpenCASCADE 기본 개념(Wire, Face, Solid)을 함께 검색해 익히면 두 배 빨라진다.
  3. 4~5일차 — CSR encoder만 따로 학습해본다. 전체 파이프라인은 무겁지만 CSR 단계는 GPU 한 대로 며칠이면 돌릴 수 있다. 사전학습 모델 없이 from-scratch로 돌려보면 Transformer의 학습 곡선을 직접 본다.
  4. 6일차 — 비슷한 패턴을 다른 도메인에 옮겨본다. 예: SVG 명령(M, L, C)을 토큰화해 이미지 → SVG 생성기를 작은 스케일로. GenCAD의 전체 구조를 그대로 가져와도 동작 원리가 비슷하다.
  5. 7일차 — 논문을 다시 읽는다. 코드를 만지고 나서 arXiv:2409.16294를 다시 읽으면, 처음 읽을 때 흘려보낸 디테일(왜 768차원인지, evaluation metric을 왜 그렇게 정의했는지)이 갑자기 의미를 갖는다.
원문 · github.com/ferdous-alam/GenCAD · 프로젝트 페이지 gencad.github.io · 논문 arXiv:2409.16294 · TrendShift 12위 (2026-05-19 기준)