먼저 사용법을 정확히 익히기 위해서 shapenet_car를 이용해서 학습하고, 추출해보도록 하겠다.
car 사진의 렌더링 된 테이터는 [일단 박죠] NVDIA의 GET3D를 활용한 아바타 자동 생성 #1에서 만들었던 데이터를 이용했다.
사진과 같이 자동차 이미지에 대한 24장의 렌더링 된 이미지가 있다. 해당 이미지들을 이용해서 아래와 같이 학습시킨다.
사진과 같이 camera_mode를 shapnet_car로 둘 경우에 아래 사진에서 보이는 txt 파일에 담겨있는 폴더명을 이용하여 학습한다.
해당 파일들을 나누어주기 위해서 아래와 같은 코드를 이용하였다.
import os
import random
current_directory = '/mnt/ext_hdd/jysong/get3d_folder/out_dir/img/02958343'
file_and_directory_list = os.listdir(current_directory)
directory_list = [item for item in file_and_directory_list if os.path.isdir(os.path.join(current_directory, item))]
random.shuffle(directory_list)
length = len(directory_list)
train_list = directory_list[:int(0.7 * length)]
val_list = directory_list[int(0.7 * length):int(0.9 * length)]
test_list = directory_list[int(0.9 * length):]
with open('train.txt', 'w') as f:
for item in train_list:
f.write(item + '\n')
with open('val.txt', 'w') as f:
for item in val_list:
f.write(item + '\n')
with open('test.txt', 'w') as f:
for item in test_list:
f.write(item + '\n')
하지만 camera_mode를 shapnet_car로 둘 경우에 오류가 발생한다. 해당 오류는 미리 제공해준 캐시와 무엇인가 충돌이 일어나는 것 같다.
코드를 직접 분석해보면 camera_mode를 renderpeople로 둘 경우에 해당 오류가 발생하지 않을 것 같아. 아래와 같이 수정하여 실행하였다.
사진과 같이 학습에 사용된 폴더의 개수는 1376개 이다. 즉 1376개의 자동차 이미지를 이용했다. kimg의 값은 300으로 설정하였다.
이제 해당 파일을 이용해서 추론해보겠다.
아래와 같이 학습해서 생성된 pt 파일을 이용해서 추론하였다.
중요한 명령어는 --inference_to_generate_textured_mesh 1 를 추가할 경우 텍스쳐를 입혀준다. 해당 명령어를 이용해서 만들어낸 결과는 아래와 같다.
mesh_pred 폴더가 텍스쳐가 입혀지지않은 모델이있는 폴더이고, texture__mesh_for_inference 폴더에는 텍스쳐가 입혀진 모델이 있다. 해당 모델을 블렌더를 이용하여 볼 경우 아래와 같다.
kimg 값을 300으로 설정하였음에도 불구하고, 나름 괜찮은 데이터를 보여준다. 하지만 내가 원하는 건 면접관의 모델이다... 다음 게시글은 면접관을 이용해서 학습하고 추론해보겠다.