코딩하는 해맑은 거북이
[컴퓨터비전] 3D Understanding 본문
본 게시물의 내용은 '부스트캠프 AI Tech - CV (오태현)' 강의를 듣고 작성하였다.
해당 글은 아래의 3가지를 다룬다.
📌 Seeing the world in 3D perspective
📌 3D Tasks
📌 3D Application Example
📌 Seeing the world in 3D perspective
- 왜 3D가 중요할까?
우리가 살고 있는 세상은 3D이기 때문에, 앞으로 나타날 여러 로봇들도 사람들에게 도움을 주기 위해서 3D세계를 활보해야하기 때문에 중요하다. 특히 3D Space에 대한 이해가 중요하다.
ex) 3D applications - AR/VR, 3D printing, Medical application
- 우리는 3D를 어떻게 인지하는가?
우리는 3D를 직접 보지못하고, 3D세계에 projection된 2D space인 이미지를 보게된다.
즉, 카메라가 하는 역할은 projection device 이다.
그런데, 여기서 projection된 이미지가 2개가 있으면 3D를 다시 복원할 수 있다.(→ Triangulation 방법)
- 3D를 컴퓨터에 어떤식으로 표현할까?
2D 이미지는 단순하게 2D array에 RGB values가 각 픽셀당 표현된다.
3D 데이터를 표현하는 방법은 여러가지가 있다.
- Multi-view images : 3D를 여러 각도에서 보고 여러장의 2D 이미지로 표현
- Volumetric (voxel) : 3차원 공간을 적당하게 격자로 나눠서 1, 0으로 binary하게 표현
- Part assembly : 물체의 여러 개의 도형의 조합으로 표현
- Point cloud : 물체 표면을 여러개의 point (x, y, z)로 표현
- Mesh (Graph CNN) : 물체 표면을 여러 개의 좌표 (x, y, z)로 표현한 점을 Vertex라고 하고, 그 Vertex들이 삼각형 형태로 이어서 면으로 표현한다. 두 Vertex들을 이은 선분을 edge라고 한다. 즉, Vertex와 Edge의 집합리스트로 Mesh가 표현된다.
- Implicit shape : function 형태로 표현하고, 0과 교차하는 부분을 따서 표현
- 3D Datasets
* ShapeNet : Large scale synthetic objects (51,300 3D models with 55 categories)
* PartNet (ShapeNetPart2019) : Fine-grained dataset, useful for segmentation (573,585 part instances in 26,671 3D models)
* SceneNet : 5 million RGB-Depth synthetic indoor images
* ScanNet : RGB-Depth dataset with 2.5million views obtained from more than 1500 scans
* Outdoor 3D scene datasets (typically for autonomous vehicle applications)
📌 3D Tasks
- 3D Recognition
2D image는 2D Model(CNN)을 사용해서 레이블 정보를 출력한다.
3D Space도 마찬가지로 3D Model(Volumetric CNN)을 사용해서 레이블 정보를 출력한다.
- 3D Object Detection
3D space나 image에서 3D bounding-box를 쳐서 object를 찾는 방법
주로, 자율 주행에서 유용하게 사용된다.
- 3D Semantic Segmentation
- Conditional 3D Generation
> Mesh R-CNN
2D image를 input으로 넣어주면, 3D meshes of detected objects를 출력해주는 모델이다.
R-CNN 계열의 모델인 만큼, Mask R-CNN에 3D branch를 추가해서 간단하게 구현할 수 있다.
> More complex 3D reconstruction models
더 복잡한 3D reconstruction models도 있다.
2D image를 Multi-task head를 통해 Surface normal, depth, silhouette 등 sub-problem을 만들고, 이들을 합쳐서 3D를 만드는 방법이다. 해당 sub-problem은 물리적으로 의미있는 분리를 하는 형태로 구성되어 있다.
또 다른 방법은 RGB Image가 들어오면 depth 형태로 표현하고, Spherical Map으로 바꿔주어 좀더 정교한 Voxel를 얻어서 3D reconstruction을 수행하는 방법이 있다.
이와 같이 중간 단계를 물리적으로 의미있는 physically meaningful한 feature들을 풀면서 좀 더 완벽한 3D object를 만들 수 있도록 중간 제약을 걸어준 것이다.
📌 3D Application Example
- Photo refocusing = Post-refocusing
하나의 이미지를 depth map을 기반으로 Defocusing, focusing 하는 방법
portrait mode라고 스마트폰에 카메라앱에도 탑재되어 있다.
1. Set a depth threshold range [Dmin, Dmax] you want to focus
(in this example, we will consider only Dmax for simplicity)
focus하고 싶은 depth threshold range [Dmin, Dmax]를 설정한다. (해당 예제에서는 Dmax만 고려한다)
2. Compute a mask of “focusing area” and “defocusing area” by depth map thresholding
depth map threshold로 부터 focusing area, defocusing area의 mask를 만든다.
3. Generate a blurred version of the input image
input image를 blurred version으로 하나 크게 만들어둔다.
4. Compute “Masked focused image” and “Masked defocused image”
focusing area mask에서 image만 추출한 Masked focused image와
defocusing area mask에서 image만 추출한 Masked defocused image를 구한다.
5. Blend masked images to generate a refocused image
4단계에서 구한 2개를 blend해서 refocused image를 만든다.
'AI' 카테고리의 다른 글
[컴퓨터비전] Object Detection - 2 Stage Detectors (0) | 2023.05.02 |
---|---|
[논문리뷰] PGGAN (Progressive Growing GAN) (0) | 2023.04.26 |
[컴퓨터비전] Multi-modal (0) | 2023.04.05 |
[컴퓨터비전] Conditional Generative Model (0) | 2023.04.05 |
[컴퓨터비전] Instance/Panoptic Segmentation, Landmark Localization (0) | 2023.04.03 |