-
📂 3D dataset & 3D taskCS 공부/AI 2023. 4. 7. 02:28
3D가 중요한 이유?
- 우리가 3D 세상에 살고 있기 때문~
- 3D의 활용 분야
- AR/VR: 게임, 커머셜, 군사훈련 등
- 3D printing
- 의료분야, 화학분야(단백질 구조 3차원)
인간이 3d를 보는 방법
- 이미지는 3D 세계를 2D 공간에 투영한 것이다.
- 카메라는 3D 장면을 2D 이미지 평면에 투영하는 장치 = 투영된 두개의 2D 이미지로 3D를 만들어낼 수 있음
- 삼각측량법 (Triangulation)을 통해 2D 이미지를 3D로 만들 수 있다
3D 데이터 표현 방법
- 2D 이미지는 이차원 배열 구조로 각 픽셀의 RGB 값으로 표현된다
- 그렇다면 3D는...?
- Muliti-view images: 여러 각도에서 사진을 촬영
- Volumetric: 2d 이미지와 가장 비슷한 표현방법
- mesh: graph CNN에서 사용하기 좋은 구조, 3D 포인트들이 edge와 vertex의 표현으로 이루어짐
- point cloud: 3D 포인트 (x,y,z)들의 집합으로 표현 (
- part assembly: 기본적인 도형(사각형, 삼각형 등..)의 집합으로 표현
- implicit shape: 최근 각광 받는 방법, 평면의 바깥쪽을 양수로, 안쪽을 음수로 하여 0이 되는 지점을 surface로 함
3D datasets
ShapeNet
- 대규모의 합성 개체 (55개의 카테고리를 가진 51300개 3d 모델)
PartNet
- ShapeNet 개선 버전
- Fine-grained dataset (annotation 되어있는 데이터셋)
- 26,671개 3d 모델을 57,3585개의 part로 구분
SceneNet
- (500만개의 RGB-Depth) pair의 실내 모습 이미지
ScanNet
- 250만개의 RGB-Depth pair 실내 이미지 데이터셋, 1500개의 실제 스캔 사진 포함
Outdoor 3D scene datasets (실외 이미지)
- KITTI: 3d bounding box로 라벨링된 LiDAR 데이터
- Semantic KITTI: 포인트별로 라벨링된 LiDAR 데이터
- Waymo Open dataset: 3d bounding box로 라벨링된 LiDAR 데이터
3D Task
3D 객체 인식
- Volumetric 3D CNN을 사용해서 이미지의 Label 정보 출력
3D 객체 탐지
- 이미지나 3d 공간에서 3d bounding box 탐지
- 자율주행 어플리케이션에 유용
3D semantic segmentation
- ex. 신경영상학
- 다양한 기법을 사용해서 직접 또는 간접적으로 뇌의 구조, 기능, 약리학 구조를 영상화하는 것
Conditional 3D generation
- Mask R-CNN
- Mash R-CNN은 box, classes , mask를 예측함으로서 객체를 segment한다
- Mash R-CNN의 branch는 각 RoI에 해당하는 shared feature에서 각 출력을 추론한다
- Mesh R-CNN
- 2D 이미지를 넣으면 탐지된 객체의 3D mesh 형태로 나옴
- Mask R-CNN의 head 부분을 mesh 형태로 바꾸면 Mesh R-CNN이 된다
- Mask R-CNN에 3D branch를 추가한 것이다
3D 응용 예제 - Photo refocusing
- 스마트폰 카메라의 'portrait mode'와 거의 비슷함
- 주어진 이미지의 depth map으로 after-refocusing 이미지 만들기
1. 초점을 맞출 depth 임계값 범위를 설정한다 [Dmin, Dmax] (Dmax이후로는 focus 날림)
2. depth map을 thresholding해서 mask를 계산한다. Dmax 바깥으로는 'defocusing area' 안으로는 'focusing area'
focus_mask=depth_map[...,:] > threshold_value defocus_mask=depth_map[...,:] <= threshold_value
3. input 이미지의 blurred 버전을 만들어 놓는다
blurred_image=cv2.blur(original_image,(20,20))
kernel size는 내맘대로 바꿀 수 있음 4. focused area와 defocused area를 masking해서 masked focuse image와 masked defocused image 추출
focused_with_mask=focus_mask*original_image defocused_with_mask=defocus_mask*blurred_image
5. 두개의 이미지를 블렌딩해서 refocused 이미지를 만든다
defocused_image=focused_with_mask + defocused_with_mask
'CS 공부 > AI' 카테고리의 다른 글
파이썬 버전 관리 (0) 2023.04.25 소프트웨어 엔지니어링 (0) 2023.04.24 Multi-modal learning (0) 2023.04.06 📷 Conditional generative model (0) 2023.04.05 📸 Instance/Panoptic segmentation + Landmark localization (0) 2023.04.04