논문링크
Voxel을 이용해서 왼쪽의 사진처럼 Local적으로 내가 원하는 부분만 텍스트를 통해서 바꿀 수도 있고, 오른쪽처럼 global하게 object를 바꿀 수도 있다. 기존 3D-object-editing에서는 geometry를 수정하거나, appearance(texture)를 수정하거나 둘중 하나만을 수정했다면 이 모델은 2가지를 한번에 수정할 수 있다. 또한 Voxel이라는 새로운 표현법을 통해 적은 연산량과, 변형 전후의 비교가 용이하다.
모델의 아키텍처는 다음과 같다.
해당 모델의 한계는 NeRF에서 사용하는 View Dependent를 사용하지 않았기 때문에 시점마다 일관되지 않은 편집이 발생할 수 있다. 또한 Diffusion의 사용으로 텍스트 프롬프트가 잘 반영되지 않거나, Voxel Grid 자체의 한계로 인해서 품질이 떨어질 수 있다고 언급한다.
개인적으로 해당 모델에서 가장 유용했던 부분은 Spatial Refinement via 3D Cross-Attention 부분으로, 내가 원하는 부분에 대해서만 수정할 수 있도록 설정한 것이다.
3차원 공간에서 정규 격자 단위의 값을 나타낸다. Voxel이라는 용어는 부피 (volume)와 픽셀 (pixel)을 조합한 혼성어이다. 이것은 2차원 이미지 데이터가 픽셀로 표시되는 것에 대한 비유이다. [위키백과]
친근한 예시로는 마인크래프트에서 우리가 집을 만들 때 블록을 하나하나 이용해서 만드는데, 이때의 블록 하나가 픽셀값이라고 생각하면 되고 최종적으로 완성된 집이 Voxel이라고 생각하면된다.
Voxel을 변형하기 위해서는 픽셀들의 값만 변형하면 되기때문에 변형이 쉽다.
하지만 Voxel의 경우 해상도가 증가하면 픽셀들이 많아져 연산량과 저장공간이 많아지고, 차지하지 않고 있는 픽셀 값들도 계산하기때문에 불필요한 부분의 계산이 존재한다. 그리고 표면의 외부만을 다루고자 할 때 Voxel은 내부까지 표현하고 있어 이또한 불필요한 부분을 표현하고 있는 것이다.
Geometric Edits (기하학적 수정)
Appearance 수정 (외관 수정)
CLIP이나 Diffusion모델을 기반으로 텍스트를 이용해서 2D 이미지를 수정한 연구는 많이 존재했다. 하지만 3D 이미지에 대한 연구는 많지 않았다.
Geometric 변형
기존에 텍스트를 이용해서 3D object를 편집한 연구로는 LADIS와 ChangeIt3D가 존재했지만, 해당 논문들은 모두 특정 데이터셋에 특화되어있었다. 또한 geometric의 변형은 가능했지만 appearance의 변형은 불가능하다.
Appearance 변형
일부 방법들은 3D 모델의 2D 이미지 Projection을 이용해, 텍스트와 일치하는지 확인하면서 3D 모델을 수정해왔다. 예를 들어, Text2Mesh와 Tango 같은 방법들은 텍스트를 기반으로 3D Mesh의 스타일을 바꾸거나 조명을 수정하는 작업을 했다.
또한 TEXTure 모델에서는 depth-to-image diffusion model을 이용해서 3D mesh의 텍스처를 변형했다.
하지만 이들 방법은 주로 텍스처링에 집중되어 있어서, 모델의 모양을 크게 바꾸거나 새로운 구조를 추가하는 데는 한계가 있다.
NeRF같은 경우 여러 View에서 찍은 이미지들을 이용해서 물체나 장면을 3D로 표현한다.
이 방식은 스타일 변환이나 텍스트 기반 편집에 사용되었고, 2D 이미지를 편집함으로써 3D 모델을 수정하는 방법도 있었다. 하지만 이런 방법들은 3D Mesh를 직접 수정하기에는 여전히 어려움이 있었다.
NeRF모델 자체가 3D Mesh에 대하나 표현이 아닌 하나의 뷰에서 봤을 때의 3D object의 color나 density값을 갖고 있기때문에 NeRF의 결과를 Mesh로 변환한 후 해당 값을 기반으로 수정을 진행해야되나 이는 부정확하거나 비효율적이다.
DreamFields나 DreamFusion같은 모델들은 radiance fields를 optimize하면서 Text를 기반으로 object의 geometry한 부분이나 color를 결정했다. Magic3D는 DreamFusion의 느린 Optimization 속도를 극복하기도 하며 이 분야는 꾸준히 발전되고 있었다.
하지만 해당 논문들은 모두 Text를 기반으로 새로운 3D Object를 만드는 것이었다면, 이 논문은 이미 주어진 Object에 대해서 Text를 기반으로 수정하는 것이다.
사용되는 3D grid G는 각 Voxel마다 4D feature vector를 갖고 있다. RELU를 기반으로 생성되는 spatial density(geometry 정보), Sigmod를 기반으로 생성되는 RGB 3가지 정보(appearance 정보)
일반적인 방식과 다르게 View dependent 효과를 사용하지 않았다고 한다. View dependent는 어느 view에서 보느냐에 따라서 색깔값이 달라지는 효과인데, 해당 방식을 이용했을 때 2D diffusion 모델에서 부자연스럽게 보이는 결과 때문에 사용하지 않았다고 한다. 조금 더 자세히 설명하면 diffusion 모델 자체가 단일 이미지 생성에 초점을 맞췄는데, View dependent 효과를 추가한다면 특정 view에서는 자연스럽게 보일 수 있지만, 다른 각도에서는 부자연스러운 결과를 제시한다.
입력한 Object를 Grid로 변형하기 위해서 NeRF에서 사용하는 방식과 유사하게 이미지와 카메라의 위치 정보를 활용한다. 이 과정에서 여러 각도에서 찍은 사진을 바탕으로 3D 오브젝트의 구조를 재구성한다. 하지만 이때 Positional Encoding(PE)는 사용하지 않는다. Grid로 변환할 때 MLP방식을 사용하는 것이 아니라 interpolation방식을 사용하기 때문이다.
Grid로 변형하는 과정에서는 L1 Loss를 이용해서 생성된 이미지와 입력 이미지간의 차이를 측정한다. 이부분도 처음에 헷갈렸는데 입력값으로 3D object가 들어가는게 아니라, 3D 오브젝트를 촬영한 이미지들이 들어가기 때문에 해당 이미지와 생성된 이미지간의 차이를 측정하는 것이다.
그림에 대한 설명을 진행하고 각 부분이 어떻게 학습됐는지 자세히 아래에 설명하겠다.
목표: 값을 Text prompt에 적합한 형태로 변형한 를 생성하자!
Generative Text-guided Objective
SDS(School Distillation Sampling) loss
DreamFusion에서 나온 loss값으로 2D 이미지를 생성하는 모델의 지식을 3D 오브젝트로 전이(distill)하는 데 사용된다.
SDS loss에 대한 수식은 아래와 같다. 우선 노이즈가 추가된 이미지()를 생성한다.
다음으로 SDS loss의 Gradient를 계산한다.
해당 논문에서는 annealed SDS loss를 사용했다. SDS loss와의 차이점은 학습 초기에는 큰 t(time step)를 사용해서 이미지의 전반적인 특징(low frequency)에 집중한다. 학습 후반에는 t값을 줄여서 이미지의 세부적인 특징(high frequency)를 학습할 수 있도록 해준다. 한마디로 차이점을 설명하면 t를 점진적으로 줄인다는 점이다.
논문에서의 설명은 여기서 끝났지만, 위의 그림에서 대략적인 구조를 통해서 설명했듯이 annealed SDS loss는 결론적으로 렌더링된 이미지가 text prompt가 반영된 LDM의 결과와 비슷해지도록 학습하는 과정에서 사용된다.
Volumetric Regularization
원본 Object와 너무 많이 바뀌거나, 뷰에 따라서 너무 많이 변하는 것을 방지하기 위해서 논문에서는 Volumetric Regularization을 사용했다고 한다.
의 density feature값인 와 의 density feature값인 의 상관관계를 비교하면서 진행된다.
상관관계가 높을수록, 수정된 그리드가 원래 그리드와 더 유사하게 유지된다. 따라서 오른쪽 분수에 음수값을 붙여서 해당 값이 클수록 Loss가 작아지도록 진행된다.
해당 과정에대해서도 전반적인 구조를 보고 아래에 더 자세한 설명을 하겠다.
우선 이전 Text-guided Object Editing 과정을 통해서 우리는 Text에 알맞은 형태의 Object를 생성할 수 있었다. 하지만 우리는 Object중에서 특정 부분만을 수정하길 원한다. 예를들어서 기존 강아지 Object에 대해서 “선글라스를 쓴 강아지를 만들어줘!”라고 하면 강아지는 그대로 두고 선글라스만 생성해야된다. 결론적으로 Spatial Refinement via 3D Cross-Attention은 우리가 원하는 부분에 대해서만 수정하기 위해서 수정할 부분에 대한 Mask를 생성하고 해당 부분만 나타내는 것이다.
위에서 설명한 모델 단계에서 2번에 해당하는 수식이다. Binary Mask(M)을 이용해서 우리가 변경하고싶어하는 부분(M)에 대해서는 를 적용하고, 우리가 변경하고 싶지 않은 부분(1-M)에 대해서는 를 적용하는 것이다.
Cross-Attention Grids
Cross-Attention은 텍스트 프롬프트의 각 단어가 이미지의 어느 부분과 관련 있는지를 나타내는 정보를 제공한다. 예를들어서 선글라스라는 단어는 이미지에서 선글라스 위치와 관련된 영역을 강조한다.
이렇게 Cross-Attention을 통해서 얻은 probability Map과 초기에 우리가 를 생성한 것처럼 density를 ReLU 함수를 양수로 만들고 기존에는 우리가 Color를 사용해서 4D-vector로 이용했다면 이번에는 probability Map을 이용해서 L1 Loss를 진행한다.
그림을 보면서 조금더 자세히 설명 하겠다.
1번째 열에서는 우리의 입력값을 Grid형태로 나타낸 이다.
2번째 열에서는 Text-guided Object Editing의 결과인 이다.
3번째 열은 2D image에 대해서 Cross Attention Map을
4번째 열은 위의 probability Map을 이용해서 생성한 3D cross attention grid
5번째 열은 우리가 변경하고 싶은 부분을 나타내는 Segmentation Mask
6번째 열은 최종 결과이다.
이그림을 통해서 다양한 시점의 이미지들을 통해서 Probability Map을 얻고 이를 기반으로 3D grid를 생성했을 때의 결과를 보여준다. 해당 이미지는 “캥거루가 롤러스케이트를 신고있어”에 대한 결과이다.
Binary Mask
위의 결과로 나온 3D probability fields를 이용해서 우리는 Binary Mask(M)을 얻는다.
Binary Mask를 생성하는 과정에서는 energy minimization에 기반한 seam-hiding segmentation 알고리즘이 사용된다
energy minimization는 2개의 Term이 존재한다.
위의 수식은 smoothness term을 나타내는데 인접한 픽셀 p와 q에대해서 색깔값의 차이를 기반으로 가중치를 구하는 것이다. σ값이 클수록 색상 차이에 덜 민감하게 되고, 작을수록 색상 차이에 민감하게 되는데 여기서는 실험적으로 0.1로 설정했다.
: 우리가 기존에 Cross-Attention Grids를 통해서 얻은 값으로 텍스트 프롬프트에서 수정하고자 하는 특정 부분(예: "sunglasses")과 관련된 영역을 강조한다. 이 맵은 주로 unary term에서 사용된다.
: 오브젝트 전체와 관련된 영역(예: “dog”)을 나타낸다. 이 맵은 오브젝트의 기본적인 구조를 강조하며, smoothness term에서 사용된다.
5가지 텍스트 프롬프트를 이용해서 학습을 진행했다.
위의 3개는 local edits & 아래 2개는 global edits
평가지표
CLIP Similarity()
CLIPSim은 편집된 3D 오브젝트와 타겟 텍스트 프롬프트 사이의 의미적 유사성을 측정한다. 즉, 편집 결과가 주어진 텍스트 프롬프트와 얼마나 잘 일치하는지를 평가하는 것이다.
코사인 유사도 측정
텍스트 프롬프트와 출력된 3D 오브젝트의 이미지 벡터 간의 코사인 유사도(cosine similarity)를 측정한다. 이 유사도는 두 벡터가 얼마나 비슷한 방향을 가지는지를 나타낸다.
CLIP Direction Similarity()
CLIPDir은 편집된 3D 오브젝트가 원래의 오브젝트에서 목표 텍스트 프롬프트로 어떻게 변화했는지를 평가한다. 이 지표는 변화의 방향이 텍스트 프롬프트의 의미와 얼마나 일치하는지를 측정한다.
코사인 유사도 측정
FID: Inception network를 이용해서 feature를 추출하고 이 추출된 값을 기준으로 측정되는 지표
FIDInput: 편집 후의 출력 이미지와 원래 입력 이미지 사이의 시각적 차이를 평가합니다. 편집이 얼마나 큰 변화를 가져왔는지 알 수 있다.
FIDRec: 편집 후의 출력 이미지와 초기 재구성 그리드에서 생성된 이미지 사이의 시각적 차이를 평가합니다. 모델의 표현력이 얼마나 강력한지 알 수 있다.
다른 모델들과 비교해서 원본에 대한 유사도도 높거나 비슷하고, 변화 방향에 대한 일치도도 높거나 비슷한 것을 확인할 수 있다.
추가적인 실험 설명은 생략하고 결과에 대해서 시각적으로 아래에 제시하도록 하겠다.
위의 사진은 RF(ReLU-Fields)와 DVGO(ReLU-Fields와는 다른 3D 표현 방식)을 비교 했다.
해당 비교를 통해서 논문에서는 다양한 Voxel 기반 표현 방식에서도 효과적으로 동작할 수 있음을 보여준다. 즉, 제안된 방법은 3D 장면을 표현하는 방식에 구애받지 않고 여러 방법에서 잘 작동한다는 것을 의미한다.
위의 사진과 Table의 결과를 통해서 와 SR(Spatial Refinement via 3D Cross-Attention)의 중요성을 강조하고 있다.
를 제거한 경우 L2 Regularization Loss를 사용했다. 의 유무에 따라서 우선 이미지를 보면 노이즈가 많이 껴있는 것을 볼 수 있다. 또한 Table에서는 수치들 중 특히 부분의 성능이 높아진 것을 통해 원본과의 유사도를 확실히 높일 수 있는 방법인 것을 증명했다.
SR의 값의 유무를 통해서는 이미지를 보면 선글라스 부분을 제외하고도 다른 부분이 많이 변하는 것을 확인할 수 있다. 그러나 SR 모듈이 있을 때, 편집된 결과가 텍스트 프롬프트와의 유사성이 약간 떨어질 수 있다. 이는 편집 신호보다 입력 오브젝트와의 유사성을 더 중요시하기 때문이다.