이번 게시글에서는 Text2Light 사용을 위한 환경 구축 과정 과 사용의 결과에 대한 내용을 작성할 것이다.
Text2Light의 깃허브 링크에 모델을 사용하기 위해 필요한 환경 구축 과정을 작성해주고 있다. 아래 해당 링크를 첨부하겠다.
Text2Light는 Anaconda를 이용하여 환경을 설정하는 것을 추천하고있다. Anaconda를 이용하여 아래 명령어를 순서대로 수행하면 된다.
environment.yml 파일에 정의된 모든 패키지와 설정을 이용해 새로운 Anaconda 환경을 생성한다.
명령어를 사용하여 환경을 활성화한다.
HDR 파노라마 생성을 위한 사전 훈련된 모델을 구글 드라이브에서 다운로드 받는다. 후에 각각의 sampler들을 파노라마 추론을 수행할 때 사용된다.
다운로드한 모델을 프로젝트에 logs 디렉토리에 저장하고, 해당 모델을 사용하여 텍스트로부터 HDR 파노라마를 생성하는 추론 스크립트를 실행한다. 아래에는 간단하게 예시 스크립트를 이용하여 설명하겠다.
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_outdoor --outdir ./generated_panorama --text "YOUR SCENE DESCRIPTION" --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 4
- -rg와 -rl은 각각 global sampler와 local sampler의 위치를 지정합한다.
- --outdir는 생성된 파노라마 이미지를 저장할 디렉토리를 지정한다.
- --text는 생성할 장면의 텍스트 설명을 입력한다.
- --clip은 CLIP 모델 임베딩 파일의 위치를 지정한다.
- --sritmo는 SRITMO 모델 파일의 위치를 지정한다.
- --sr_factor는 이미지의 해상도 배율을 설정한다.
Text2Light 모델의 환경 구축을 진행하며 생긴 오류들을 정리해보았다.
environment.yml 파일에 "cudatoolkit=10.2"라고 명시되어있다. 해당 버전을 현재 본인의 컴퓨터에 맞게 수정해주어야한다.
save_image(xsample_holistic[i], os.path.join(outdir, "holistic", "holistic_[{}].png".format(prompts[i])))
기존 코드에서는 추론된 이미지를 저장할 때 프롬프트를 그대로 저장한다. 그래서 일정 범위 이상의 프롬프트로 이미지를 생성할 경우, 이미지 저장에 오류가 발생한다.
save_image(xsample_holistic[i], os.path.join(outdir, "holistic", "holistic_[{}].png".format(prompts[i][:10])))
python의 슬라이싱 기능을 이용하여 이를 간단하게 해결하였다. 복잡한 방식으로 해결하는 방법도 있지만 현재에서는 간단하게 가상 면접장 생성을 위한 가능성만을 탐구하는 과정으므로 슬라이싱을 이용하여 간단하게 구현하였다. 아래에 해당 커밋의 링크를 첨부하겠다.
fix: 생성되는 파일명 길이 제한
모델의 성능을 테스트해보기 위해서 많은 프롬프트들을 테스트 해보았으며, 해당 결과를 공유하고자 한다. 후에 참고할때의 편의성을 위해서 스크립트 전체를 첨부하겠다.
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "bright, realistic, 4k , high quality , interview room , office room" --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 8
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "standard company meeting room" --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 8
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "A standard corporate meeting room, equipped with a large conference table surrounded by comfortable chairs. The room includes a projector and screen for presentations, a whiteboard for brainstorming sessions, and ample natural light from windows on one side. The walls are decorated with minimalistic art, reflecting a professional atmosphere. A small coffee station at the back provides refreshments for attendees." --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 4
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "Modern and professional interview room within a corporate office, featuring a sleek, rectangular table surrounded by ergonomic chairs. The room is illuminated by soft, natural light filtering through large windows, casting a calm and inviting atmosphere. Walls are adorned with subtle art that inspires innovation and collaboration. The space is equipped with state-of-the-art technology for video conferencing, ensuring a seamless and interactive interview experience. A small, green plant sits in the corner, adding a touch of vibrancy and life to the room." --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 4
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "A vibrant and energetic interview room inspired by tech startups, featuring an eclectic mix of modern furniture and bold wall art. The space is equipped with the latest tech gadgets for interactive presentations, a brainstorming area with whiteboards and sticky notes, and a casual seating corner with bean bags and a coffee machine, embodying the innovative and relaxed culture of a startup." --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 4
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "company room" --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 4
python text2light.py -rg logs/global_sampler_clip -rl logs/local_sampler_indoor --outdir ./generated_panorama --text "meeting room" --clip clip_emb.npy --sritmo ./logs/sritmo.pth --sr_factor 4
RuntimeError: Input ... is too long for context length 77
프롬프트를 길게 입력할 경우 프롬프트 context 길이 제한 오류가 발생한다.
Text2Light 프로젝트는 고해상도 파노라마 이미지 생성에 중점을 둔 만큼 대부분의 파노라마 이미지에서 뛰어난 해상도를 보여준다. 그러나 프롬프트와 관련 없는 이미지를 생성하거나, 기대한 해상도에 미치지 못하는 이미지를 출력하기도 한다. 후에 더 많은 연구가 필요해 보인다.
추론 결과의 한계점 외에도, 유니티 엔진을 사용하여 3D 환경을 구축할 때 특정 제약사항이 드러났다.
유니티 엔진으로 구성된 3D 환경에 파노라마 이미지를 적용했을 때, 이미지의 시작 부분과 끝 부분이 자연스럽게 이어지지 않는 문제가 발생했다는 것이 확인되었다.