PointNet++ 시작하기
PointNet++는 비정렬 포인트 클라우드에서 학습에 널리 사용되는 신경망 아키텍처입니다. 의미론적 분할에 PointNet++를 사용하여 포인트 클라우드의 각 점에 클래스 레이블을 지정할 수 있습니다. 또한 객체 분류에 PointNet++를 사용하여 하나의 객체를 포함하는 포인트 클라우드에 단일 클래스 레이블을 지정할 수 있습니다.
PointNet++ 신경망은 포인트 클라우드의 개별 점들을 계층적으로 처리합니다. 이 신경망은 PointNet을 사용하여 점 군집에서 국소 특징들을 추출하고 이들 특징을 그룹화하여 전체 포인트 클라우드로부터 더 높은 하이 레벨 특징을 생성합니다.
PointNet++의 응용 사례는 다음과 같습니다.
디지털 산림 응용 분야에서의 나무 분할.
항공 라이다 데이터로부터 디지털 지형 모델 추출.
로봇의 실내 내비게이션을 위한 환경 인식.
항공 라이다 데이터로부터 3차원 도시 모델링.
객체 분류
의미론적 분할을 위한 PointNet++ 신경망
PointNet++ 신경망은 집합 추상화 모듈이 있는 인코더와 특징 전파 모듈이 있는 디코더를 포함합니다.
집합 추상화 모듈은 점들의 집합을 처리하고 추출하여 더 적은 수의 요소로 이루어진 새로운 집합을 생성합니다. 각 집합 추상화 모듈에 샘플링 및 그룹화 계층이 포함되며 그 뒤에 PointNet 계층이 옵니다.
샘플링 및 그룹화 계층은 로컬 영역의 중심을 식별하여 샘플링을 수행합니다. 그런 다음 중심을 둘러싼 이웃 점들로 이루어진 로컬 영역 집합을 생성하는 방식으로 그룹화를 수행합니다.
PointNet 계층에는 더 작은 PointNet 신경망이 들어 있으며, 이 신경망은 컨벌루션 계층, 정규화 계층, ReLU 계층으로 이루어지며 이어서 최댓값 풀링 계층이 옵니다. 이 계층은 로컬 영역 패턴을 특징 벡터로 인코딩합니다.
특징 전파 모듈은 서브샘플링된 점들을 보간한 다음 이를 집합 추상화 모듈의 특징점들과 결합합니다. 그런 다음 신경망은 이들 특징을 단위 PointNet 신경망에 통과시켜서 추가적인 처리를 통해 더 높은 하이 레벨 특징을 생성합니다.
다시 말하자면 PointNet++는 중첩되고 분할된 입력에 대해 PointNet을 반복적으로 적용하여 다중 스케일의 특징들을 추출함으로써 정확한 의미론적 분할을 수행합니다.
PointNet++신경망 만들기
포인트 클라우드 데이터를 분할하기 위한 PointNet++ 신경망을 만들려면 pointnetplusNetwork 함수를 사용하십시오.
PointNet++ 신경망 훈련시키기
포인트 클라우드 데이터를 분할하도록 PointNet++ 신경망을 훈련시키는 방법은 PointNet++ 딥러닝을 사용한 항공 라이다의 의미론적 분할 항목을 확인하십시오.
코드 생성
PointNet++ 신경망에 대한 CUDA® 코드를 생성하는 방법은 Code Generation for Aerial Lidar Semantic Segmentation Using PointNet++ Deep Learning 항목을 참조하십시오.
객체 분류를 위한 PointNet++ 신경망
객체 분류의 경우 PointNet++는 입력 포인트 클라우드로부터 전역 특징 표현을 학습하고 객체에 대한 단일 클래스 레이블을 예측합니다. 분할 신경망 인코더와 마찬가지로, 분류 신경망은 집합 추상화 모듈을 사용해 점들을 계층적으로 처리함으로써, 국소 점 이웃으로부터 여러 스케일의 특징을 학습합니다.
최종 집합 추상화 모듈 이후, 신경망은 학습한 특징을 집계하여 전체 포인트 클라우드에 대한 전역 특징 표현으로 통합합니다. 그런 후 완전 연결 계층을 사용하여 클래스 점수를 계산하고 입력 포인트 클라우드에 대한 단일 클래스 레이블을 출력합니다. 이때 출력은 포인트별 레이블이 아니라 전체 포인트 클라우드에 대한 단일 레이블이므로 특징 전파 모듈(디코더)은 필요하지 않습니다.
PointNet++ 분류기 만들기
pointNetPlusClassifier 함수를 사용하여 포인트 클라우드 분류를 위한 사전 훈련되었거나 훈련되지 않은 PointNet++ 분류기를 만들 수 있습니다. 사전 훈련된 분류 신경망은 Sydney Urban Objects 데이터 세트에서 포인트 클라우드 데이터의 위치 정보만 사용하여 훈련되었습니다. 입력 포인트 클라우드는 객체를 하나만 포함해야 합니다.
PointNet++ 분류기 훈련시키기
PointNet++ 분류기를 훈련시키려면 trainPointNetPlusClassifier 함수를 사용하십시오.
포인트 클라우드 분류하기
입력 포인트 클라우드에 대한 클래스 레이블을 예측하려면 pointNetPlusClassifier 객체의 classify 객체 함수를 사용하십시오. 입력 포인트 클라우드는 객체를 하나만 포함해야 합니다. 포인트 클라우드를 분류하는 방법에 대한 자세한 내용은 Point Cloud Classification Using PointNet++ Deep Learning 예제를 참조하십시오.
참고 문헌
[1] Qi, Charles R., Li Yi, Hao Su, and Leonidas J. Guibas. ‘PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space’. ArXiv:1706.02413 [Cs], 7 June 2017. https://arxiv.org/abs/1706.02413.
[2] Varney, Nina, Vijayan K. Asari, and Quinn Graehling. ‘DALES: A Large-Scale Aerial LiDAR Data Set for Semantic Segmentation’. ArXiv:2004.11985 [Cs, Stat], 14 April 2020. https://arxiv.org/abs/2004.11985.
[3] De Deuge, Mark, Alastair Quadras, Calvin Hung, and Bertrand Douillard. "Unsupervised Feature Learning for Classification of Outdoor 3D Scans." In Australasian Conference on Robotics and Automation 2013 (ACRA 13). Sydney, Australia: ACRA, 2013.
참고 항목
앱
- 심층 신경망 디자이너 (Deep Learning Toolbox) | 포인트 클라우드 분석기 | 라이다 레이블 지정기
함수
pointnetplusNetwork|squeezesegv2Network|semanticseg|trainnet(Deep Learning Toolbox) |evaluateSemanticSegmentation|pointNetPlusClassifier|classify