본문 바로가기
캡스톤

[PIFuHD] 2D 이미지 to 3D 모델링(.obj) 2024.Ver

by limsjin 2024. 12. 2.

배경제거 이전 포스팅 다음 단계인 2d 이미지에서 3d 객체(메쉬)로 만드는 작업에 대해 이야기 해보려고 한다.

모델을 프로젝트에 적용한 과정 Input 사진에 따른 모델링 결과물 퀄리티 위주로!

 

우선, 자료조사 당시 콜맵 등 다양한 모델들이 있었다. 그 중에서 PIFuHD를 선택하게 된 이유는 다음과 같다.

 

PIFuHD는 사진에서 인물의 포즈를 탐지해 손,발 등 keypoints를 생성하고, 이를 바탕으로 3D 객체를 만들어 더 사람에 대해 특화된 모델이다. 따라서, 인물을 3D 모델링 하려는 우리에게 적절했다.

https://shunsukesaito.github.io/PIFuHD/

 

로컬에서 첫 성공적인 결과물. 상당히 앞면과 뒷면도 잘 메쉬가 생성된 것 같다. (누군지 맞혀보세요! 원본 사진은 아래에서 확인할 수 있다.)

 

 

 

하지만, 우리 프로젝트의 서브모듈로 적용하는데에 몇가지 어려운 점이 있었다.(->fork)

우선, 이 프로젝트는 2020년도(지금으로부터 약 4-5년 전)에 나와서 빠르게 라이브러리 등 버전이 업데이트되는 파이썬 환경 상 모델이 돌아가는데 몇가지 오류들이 있었다. 그래서, 처음 프로젝트 내 로컬에서 모델링 결과물이 나왔을 때 짜릿했다. (그러나, 프로젝트에 실제로 적용된 모델은 다음편에서 다시 소개할 예정이다)

 

 

 

다음은 현재 문제상황들을 토대로 기존 코드에서 변경한 부분들이다.

 

 

 

 

1. 실행은 성공했지만, 모델링 파일이 제공안되는 문제(Not .obj file)

sdf.py

np.bool -> bool 로

 

초반에,  전체적인 코드 진행 흐름을 파악하기 위해 제공된 코랩을 실행했는데 오류 + obj 파일 제공 안됨. 의 문제가 있었다. 그래서 관련 문제를 열심히 구글링으로 찾아서 어떤 외국분의 도움으로 해결할 수 있었다. 

 

 

2. Input 사진 비율이 512로 자동 조정되어 모델링 결과가 이상하게 나온 경우.(

get_rect(net.cuda(), [image_path], 512)   --> error!

)

 

위와 비슷하게 코랩에서는, np.int -> int로 변경해주어야 한다. 이도 영문 사이트들을 읽어가면서 찾은 내용이다.

 

로컬에서는, lightweight-pose-estimation 모델를 클론받아 keypoints 를 추출하는 과정의 코드를 새로 추가했다.

 

 

3. cuda, pytorch 버전 오류

 

requirement.txt 로 pytorch, gpu cuda 해당 라이브러리 버전을 다운받아 실행하면 오류가 난다. 따라서, 다음 문서를 참고하여 다운받으면 좋을 것 같다.

https://pytorch.org/get-started/locally/

 

Start Locally

Start Locally

pytorch.org

 

4. 로컬 적용시 추천 사항.

.pt 파일이나 .sh 파일을 미리 코랩 다운을 받아서 프로젝트 폴더에 넣는 것이 좋다. 왜냐면 깃헙에 써있는 설명대로 하면 명령어 등등 실행이 안되어 번거로울 수 있기 때문이다.

 

 

 


 

 

다음은 어떤 이미지들이 input으로 들어가야 좋은 모델링 파일을 얻는 지 여러번 테스트를 해보며 얻은 결과다.

 

1. 신체 일부(ex: 상반신)가 나온 사진도 잘 모델링 될까?(Part of body)

 

 

-> 전신이 다 나온 사진이 모델링이 잘된다.

상반신 아기의 메쉬 결과 → ..무섭다

 

 

keypoint를 추출할 때 전신이 아니라면 정확한 손, 발의 위치를 알 수 없어 메쉬 생성 시 잘못된 keypoints 기반으로 생성되다 보니 그런 것이라 예상한다.

 

 

 

2. 임의로 Input 이미지를 512 사이즈로 조정한 경우?(512 size)

 

-> 잘 나오지 않는다.

 

 

 

앞서, 위 문제들 중 2번 문제에서 그럼 애초에 Input 사진을 512로 조정하여 모델링을 진행해보았다.

그러나, 임의로 비율이 조정된 사진이 보긴엔 그래도 나쁘진 않지만 keypoints 인식이 잘 되지 않아서 인지 모델링 결과가 좋지 못했다.

 

3. 신체의 일부가 가려진 경우(hidden object space)

 

-> 깊이(depth) 정보가 없어 해당 부분만 잘 모델링 되지 않는다.

 

핸드폰 부분만 모델링이 잘 이루어지지 않음.

V의 두께가 엄청나다...

 

 

사진 한장으로 메쉬가 생성되다 보니 손으로 브이(V)를 하던가 거울 셀카를 찍을 때 그 깊이에 대한 정보까지는 없다보니, 이런 아쉬운 부분이 있었다.

 

이와 관련한 연구가 있는 것 같아 추후에 살펴보고 싶다.

Beyond the Contact: Discovering Comprehensive Affordance for 3D Objects from Pre-trained 2D Diffusion Models ( In ECCV 2024 , Hanbyul Joo)

 

 

 

 

결론: 물체에 가려지지 않는 전신 위주일수록 메쉬 파일의 결과물이 좋다!