PointNet 점군 데이터 처리 입문 주제를 찾고 계셨다면 정말 잘 오셨어요. 자율주행 자동차의 라이다 센서, 스마트폰의 얼굴 인식, 산업용 로봇의 부품 검사에 이르기까지 3D 공간을 이해하는 인공지능은 이미 우리 일상 깊숙이 들어와 있어요. 그 중심에는 비정형 3D 데이터를 직접 받아 학습할 수 있게 해 준 PointNet이라는 신경망이 자리하고 있죠. 이 글에서는 PointNet이 무엇이고 왜 등장했는지, 어떤 구조로 작동하는지, 실제 어디에 쓰이는지를 처음 접하는 분도 무리 없이 따라올 수 있도록 차근차근 풀어드릴게요.

점군(Point Cloud)이 무엇인지부터 살펴봐요
3D 딥러닝을 이야기할 때 가장 먼저 마주치는 개념이 바로 점군이에요. 점군은 3차원 공간에 흩뿌려진 점들의 집합으로, 각 점은 보통 (x, y, z) 좌표를 갖고 있고 필요에 따라 색상이나 반사 강도 같은 추가 속성이 붙어요. 라이다 센서, 스테레오 카메라, 구조광 스캐너 등이 만들어 내는 출력이 모두 이 점군 형태예요.
왜 점군이 까다로운 입력일까요
이미지는 정해진 격자 위에 픽셀이 가지런히 놓여 있어요. 그래서 합성곱 신경망(CNN)이 이웃 관계를 그대로 활용해 학습할 수 있죠. 그런데 점군은 사정이 달라요. 점의 개수가 매번 다르고, 순서가 의미를 갖지 않으며, 공간적으로도 듬성듬성 분포해 있어요. 같은 물체를 두 번 스캔하면 점의 순서가 뒤바뀔 수 있는데도 우리는 같은 결과를 얻어야 하잖아요.
기존 접근법의 한계
PointNet 이전에는 점군을 다루기 위해 두 가지 우회 전략이 주로 쓰였어요. 첫째는 점군을 3D 격자(voxel) 형태로 바꿔 3D CNN을 적용하는 방식이에요. 둘째는 점군을 여러 각도에서 2D 이미지로 투영한 뒤 일반 CNN을 쓰는 방식이고요. 두 방법 모두 변환 과정에서 정보가 손실되거나 메모리 소비가 폭발하는 약점이 있었죠. 그래서 점군 그 자체를 입력으로 받는 신경망이 절실했어요.
PointNet의 핵심 아이디어를 풀어드려요
2017년 스탠퍼드 대학의 Charles R. Qi 연구팀이 발표한 PointNet은 점군을 직접 받아 분류와 분할을 수행하는 최초의 통합 신경망이었어요. 점의 순서가 바뀌어도 같은 결과를 내야 한다는 순열 불변성(permutation invariance)을 신경망 구조 자체로 풀어낸 점이 결정적이었어요.
대칭 함수(Symmetric Function) 트릭
핵심 아이디어는 간단해요. 점 하나하나를 동일한 다층 퍼셉트론(MLP)으로 독립적으로 처리한 뒤, 그 결과를 전역 최대 풀링(global max pooling)으로 모으는 거예요. 최댓값을 취하는 연산은 입력 순서에 영향을 받지 않으니까요. 수식으로 표현하면 f({x₁, x₂, …, xₙ}) ≈ γ(MAX{h(xᵢ)})가 되는데, 여기서 h는 점별 MLP이고 γ는 후속 분류기예요. 이 한 줄에 PointNet의 정신이 담겨 있어요.
T-Net과 정렬 학습
점군은 회전이나 평행이동 같은 자세 변화에도 같은 결과를 줘야 해요. PointNet은 T-Net이라는 작은 보조 네트워크를 두어 입력 점군과 중간 특징(feature) 모두에 학습 가능한 변환 행렬을 곱해 자세를 정렬해요. 일종의 미니 PointNet인 T-Net이 데이터로부터 좋은 정렬 행렬을 스스로 찾아 주는 거죠. 덕분에 별도의 데이터 증강 없이도 회전 강건성을 어느 정도 확보할 수 있어요.
네트워크 구조를 한 단계씩 따라가 봐요
PointNet의 전체 파이프라인은 의외로 단순해서 처음 공부할 때 좋은 출발점이 돼요. 입력은 N×3 형태의 점 좌표 배열이고, 출력은 분류 점수 또는 점별 분할 라벨이에요.
분류 브랜치(Classification Branch)
먼저 입력 점군이 3×3 T-Net을 통과해 정렬돼요. 정렬된 점 각각이 공유 가중치를 가진 MLP(64, 64)를 거치고, 다시 64×64 T-Net으로 특징을 한 번 더 정렬해요. 이후 MLP(64, 128, 1024)를 지나 1024차원의 점별 특징을 얻어요. 이 점별 특징을 전역 최대 풀링하면 점군 전체를 대표하는 1024차원 전역 특징 벡터가 나와요. 마지막으로 완전연결층(512, 256, k)을 통과시켜 k개 클래스 점수를 얻게 돼요.
분할 브랜치(Segmentation Branch)
분할은 점별로 라벨을 부여해야 하니 전역 특징 하나만으로는 부족해요. 그래서 PointNet은 각 점의 64차원 지역 특징과 1024차원 전역 특징을 연결(concatenate)한 뒤 다시 MLP를 통과시켜 점별 클래스 점수를 만들어요. 지역 정보와 전역 정보를 한 자리에 모아 의미 있는 분할 결과를 끌어내는 셈이에요.
학습 손실과 정규화
분류는 표준 교차 엔트로피 손실을 쓰고, T-Net이 출력하는 특징 변환 행렬에는 직교성 정규화(orthogonality regularization)를 추가해요. (A·Aᵀ – I)의 프로베니우스 노름을 작게 만들도록 유도해 변환이 지나치게 왜곡되지 않게 잡아 주는 장치예요. 이 작은 정규화 항이 안정적인 학습에 꽤 큰 도움을 줘요.
PointNet의 한계와 후속 연구 흐름을 짚어봐요
PointNet은 점군 딥러닝의 문을 활짝 열었지만, 동시에 명확한 한계도 가지고 있었어요. 가장 큰 약점은 지역적 구조(local structure)를 충분히 활용하지 못한다는 점이에요. 각 점을 독립적으로 처리한 뒤 전역 풀링으로 합치다 보니, 이미지 CNN처럼 이웃 점들 사이의 미세한 패턴을 계층적으로 학습하기 어려웠어요.
PointNet++의 등장
같은 해 발표된 PointNet++는 이 한계를 정조준했어요. 점군을 여러 스케일의 지역 영역으로 묶고, 각 영역마다 작은 PointNet을 적용해 계층적 특징을 만들어요. 이미지의 CNN이 지역 필터를 깊게 쌓아 풍부한 표현을 얻는 것처럼, PointNet++는 3D 공간에서 같은 일을 해내요. 자율주행과 실내 분할에서 큰 성능 향상을 이끌어 냈죠.
그 이후의 발전
이후에는 점 사이의 관계를 그래프로 모델링한 DGCNN, 합성곱을 점군에 직접 정의한 KPConv, 트랜스포머를 도입한 Point Transformer 등 다양한 방향이 펼쳐졌어요. 흥미로운 점은 이 모든 후속 연구가 PointNet의 기본 정신, 즉 점별 처리 후 대칭 함수로 집계한다는 발상 위에서 변주되고 있다는 사실이에요. 그래서 입문자라면 PointNet 논문 한 편을 꼼꼼히 읽는 것만으로도 이 분야의 절반을 이해할 수 있다고 말씀드리고 싶어요.
실제 활용 분야와 직접 해 볼 수 있는 실습 팁을 드릴게요
PointNet 계열 모델은 이미 산업 전반에서 활발하게 쓰이고 있어요. 어디에 쓰이는지 알고 나면 학습할 동기가 훨씬 커지죠.
대표 활용 사례
- 자율주행 인식: 라이다 점군에서 차량, 보행자, 자전거를 검출하는 3D 객체 인식의 백본으로 활용돼요.
- 로봇 매니퓰레이션: 작업 대상 물체의 자세 추정과 파지(grasp) 후보 생성에 점군 분할이 쓰여요.
- 건설 BIM과 디지털 트윈: 스캔된 건물 점군을 벽, 바닥, 천장 등으로 자동 분할해 도면화 작업을 가속해요.
- 의료 영상: CT나 MRI에서 추출한 표면 점군을 이용해 장기 분할과 수술 계획을 보조해요.
- 증강현실: 실내 공간 스캔 점군에서 가구와 평면을 인식해 가상 객체 배치에 활용해요.
처음 학습할 때 추천하는 흐름
- 먼저 ModelNet40 분류 데이터셋으로 PointNet을 돌려 보세요. 1024개 점만 쓰는데도 약 89% 정확도가 나오는 걸 직접 확인하면 감이 잡혀요.
- 다음으로 ShapeNet Part 분할 데이터셋에서 분할 브랜치를 학습해 보세요. 비행기 날개, 의자 다리처럼 부분 라벨이 매겨진 데이터예요.
- 마지막으로 S3DIS 실내 스캔 데이터셋에 도전해 보세요. 실제 라이다와 가장 가까운 난이도라 PointNet의 한계도 직접 체감할 수 있어요.
- 구현은 공식 텐서플로 코드도 좋지만, 입문자에게는 PyTorch 포팅판인 pointnet.pytorch가 읽기 편해요.
실습할 때 꼭 챙길 포인트
점군은 같은 물체라도 점 개수가 들쭉날쭉하기 때문에, 미니배치 학습을 위해 보통 N개로 균일 샘플링을 해 줘요. 1024개 또는 2048개가 흔히 쓰이고요. 좌표는 단위 구로 정규화하면 학습이 한결 안정적이에요. 또한 무작위 회전, 지터링(작은 노이즈 추가), 임의 드롭아웃 같은 증강을 곁들이면 일반화 성능이 눈에 띄게 올라가요. 작은 디테일이지만 첫 실험에서 결과가 안 나오는 대부분의 이유가 여기에 숨어 있어요.
마무리하며 핵심을 정리해 드릴게요
지금까지 PointNet 점군 데이터 처리 입문이라는 주제로, 점군이 왜 까다로운 입력인지부터 PointNet의 핵심 아이디어인 대칭 함수와 T-Net, 분류·분할 파이프라인, 한계와 후속 연구, 그리고 실제 활용과 실습 팁까지 두루 살펴봤어요. 핵심은 단 하나, 점을 독립적으로 처리하고 대칭 함수로 모으면 순서에 흔들리지 않는 3D 표현을 얻을 수 있다는 통찰이에요. 이 한 줄이 PointNet 이후 펼쳐진 수많은 연구의 출발점이 되었고, 지금도 자율주행과 로보틱스 현장에서 그 영향력이 이어지고 있어요. 점군 딥러닝의 세계로 첫 걸음을 떼는 분들께 이 글이 따뜻한 길잡이가 되었길 바라요.
더 깊이 공부하고 싶다면 원 논문 “PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation”과 위키백과의 Point cloud 항목을 함께 읽어 보시길 권해 드려요.