아무래도 겨울이다 보니 집이나 사무실 같은 건물 내에서 생활하는 시간이 늘고 있습니다. 주간에는 회사에서 일을 하고 출퇴근을 위해 움직이지만 주말이 되면 따뜻한 방바닥에 붙어서 일종의 '짧은 동면'을 하는 경우가 많아졌죠. (물론 구독자님은 그러지 않으시리라 생각합니다만...) 다른 곳은 모르겠지만 제가 있는 곳은 모처럼 아침부터 비가 내리고 있습니다. 눈 대신 비를 본 것이 얼마만이었었나 잠시 생각에 잠겨 봤습니다. :-)
이번 소식에서는 인공지능을 이용해서 해 볼 수 있는 재미나고 작은 팁 하나를 소개하려고 합니다. 2D 사진을 3D 영상이나 이미지처럼 바꾸는 것인데 이런 영역에 사용되는 NeRF라는 기술이 뭔지 살짝만 찾아보고 그것과는 결이 다른 기술이지만 그나마 손쉽게 써 먹을 수 있는 예시도 하나 알려 드리도록 하겠습니다.
NeRF (Neural radiance Fields)
NeRF(Neural radiance Fields)란 뭔가요?
NeRF는 장면 표현을 Neural Network를 이용해서 구현하는 모델입니다. 객체나 장면을 촬영한 불연속적인 2D 이미지들을 이용해서 네트워크를 학습시키면 학습되지 않은 객체, 장면을 생성해 내는 것이죠. 주로 2D 사진들을 이용해서 3D 객체나 장면을 만드는 용도로 많이 사용됩니다.
이 기술은 2020년 구글과 버클리대학 등에서 연구논문을 통해 소개되었습니다. 저는 처음 이 기술이 적용된 데모 영상을 보고 상당히 놀랐었는데, 그것은 이전까지 복잡한 3D 모델링을 이용한 CG 기술을 적용해야 가능하다고 생각했던 것을 인공지능 모델이 손쉽게 현실 세계의 사물과 장면을 3D로 멋드러지게 연출해 냈기 때문입니다. 조만간 이 기술을 이용한 영화가 나오거나 쇼핑몰 제품 판매용 영상 제작이 줄을 잇겠구나 싶었었죠.
NeRF의 원리는 어떻게 되나요?
논문 상의 설명에 의하면, 카메라 광선을 따라 5D 좌표(위치+방향) 정보를 샘플링해서 입력으로 넣어 색상(RGB)와 볼륨밀도(Density)를 생성한 후 볼륨 렌더링을 이용해 이미지를 합성합니다. 이렇게 합성된 이미지와 실제 관측이미지 사이의 loss를 최소화하도록 Network을 학습시키는 방식으로 진행됩니다. 아래 그림에 그 과정들이 도식화되어 있습니다.
Luma AI라는 기업은 NeRF 기술을 이용해서 3D 이미지나 영상 생성 서비스를 제공한다고 소개하고 있습니다. 주로 전자상거래/AR을 위한 3D 모델, 게임 아트, VFX (Visual Effects) 에 활용할 수 있을 것 같네요. 앱이 아직 출시는 되지 않았고 홈페이지 상 앞으로 어떤 기능을 제공할지, API 사용방식은 어떻게 될지 등에 대한 소개와 데모 영상을 올려 두었습니다.
Tesla가 도로 상에 돌아다니는 자동차에서 수집된 영상데이터와 가상 생성 영상등을 이용해 자율주행 모델을 학습하고 있다는 것은 아실 겁니다. 구글 자회사인 Waymo도 라이다를 포함한 다양한 장치에서 수집된 데이터를 이용하고 있는데 추가적으로 block-NeRF라는 것을 이용해서 도시 단위의 거대 스케일 가상렌더링 영상 데이터를 이용해서 자율주행 시뮬레이션을 진행하고 있다네요. 생성된 샌프란시스코 도심 영상은 기존에 봤던 NeRF 데모들 상의 작은 객체 혹은 건물 수준이 아니라 훨씬 큰 범위가 포함되어 있습니다. 제목에 걸린 링크에 해당 영상이 있으니 한번 보시기 바랍니다.
Synthetic Data generation & auto labeling
인공지능 서비스 개발을 하다보면 모델 학습을 위해 필요한 학습 데이터가 부족한 경우가 부지기수입니다. 2D 사진을 찍어와서 NeRF로 3D 모델을 만들면 촬영각도나 거리, (경우에 따라서 조명이나 날씨까지?) 원하는 대로 변경해가면서 더 많은 학습 데이터를 생성할 수 있다면 좋겠죠? 이런 아이디어와 관련된 솔루션도 있었습니다. (Autolabel)
NeRF에 대한 추가 정보를 알려주세요.
유튜브나 구글 상에서 검색하면 많은 정보가 나옵니다. 대부분은 해외 자료이거나 Nvidia에서 직접 내놓은 자료인데 간간히 국내에서 만들어진 자료들도 있긴 합니다.
소이뉴스 시작 부분에 집에서도 해 볼 수 있을만한 것으로 소개를 했는데 흠... NeRF는 아무리봐도 준비해야 하는 것들이나 적용해야 하는 기술의 깊이가 이곳에서 소개하기에는 맞지 않는 것 같습니다. 그래서, 비슷한 효과를 볼 수 있는 다른 방식을 소개드리니 양해 부탁 드립니다. 물론 그렇다고 아주 간단하지는 않네요... 후다닥...
어떤 방식이죠?
'3D photo Inpainting' 기술로 NeRF와는 다른 방식이었죠. 2D 이미지에서 forground 객체를 mask처리하고 depthmap을 생성한 후 이동시키고 그 사이 구멍난 부분을 inpainting 기술을 사용해서 생성해서 채우는 방식이죠. (링크)
자기 컴퓨터에 VRAM 크기가 최소 8GB 이상되는 Nvidia GPU가 있고 github 정도는 쉽게 다룬다 하는 분은 3번째 추천. 컴퓨터가 있지만 앞서의 사양이 안 된다 하시면 2번째 추천. 난 둘 다 싫고 그냥 사진만 올려서 작업된 결과를 보고 싶어 하시는 분은 1번째 추천입니다. 제일 간단한 것을 맨 마지막에 언급한 것은 사진을 올렸을 때 작업에 소요되는 시간이 아주 오래 걸리기 때문입니다. (CPU를 이용하기 때문) 하긴 로컬 컴퓨터에서 각종 환경을 구성하고 준비하는 과정을 생각하면 그건 큰 문제가 아닐 수도 있겠습니다. 참고로 제 경우에는 1번은 기다리다 지쳐서 포기했고 2번이 더 편했던 것 같습니다.
[로컬 컴퓨터에서 github clone 해서 하는 방법]
# github clone
$ git clone https://github.com/vt-vl-lab/3d-photo-inpainting
$ cd 3d-photo-inpainting
# 필요한 python 패키지 설치
$ pip install -r requirements.txt
# pre-trained weight 다운로드
$ bash ./download.sh
# 프로그램 실행 (image 폴더에 작업할 사진 복사 후에 진행)
# main.py 에서 29라인에서 load -> full_load로 변경해야 합니다.
$ python main.py --config argument.yml
image 폴더에는 테스트에 사용된 달에 첫 발을 내디딘 닐 암스트롱의 사진(moon.jpg)이 있습니다. 이 사진을 삭제하고 작업할 사진을 같은 이름으로 변경해 넣어둔 후에 프로그램 실행을 하시는 것이 제일 간단합니다. 렌더링이 완료된 후에 결과물 영상(mp4)을 얻을 수 있습니다. 만약 추억이 담긴 사진을 갖고 계신다면 그걸 이용해서 가족들에게 재미난 영상을 만들어서 보여주시면 좋아하실 겁니다.
주의) 가능한 전경이 되는 사람이 1명이고 배경이 zoom, shift될 때 대비가 잘 될만한 사진들이 좋습니다. 아래 사용한 사진의 경우 자세히 보면 카메라 쪽에 깔끔하지 않는 부분들이 생겼네요.
사진) 최종 생성된 영상 (mp4->animated gif 변환). 원본사진의 출처는 이곳입니다.
참고로 이것은 facebook 앱의 갤러리 기능에 포함된 것으로 알고 있습니다. 해당 기술의 소개 당시 의 제목은 'One Shot 3D Photography'라는 것이었구요.
글을 마치며... 지난 번 소이뉴스에서 진행한 설문조사는 부끄럽지만... 응답자 수가 너무 적어서 유의미한 통계치를 추려낼 수 없었습니다. 준비가 너무 부족했던 것 같아 죄송합니다. 다음 번에는 제대로 준비해서 많은 분들이 참여하실 수 있도록 해 보겠습니다.
인공지능 서비스의 배포와 운영 시 도움이 필요하신가요?
(주)소이넷은 인공지능 서비스를 제공하는 기업들 가운데 서비스 배포와 운영에서 어려움을 겪고 계신 곳에 도움을 드릴 수 있습니다.
혹시 구독자님의 회사는 다음과 같은 어려움을 겪고 계시지 않나요?
AI 모델을 개발하고 학습 후 서비스를 위한 성능 (Accuracy)는 달성했는데, 정작 최적화 엔지니어가 없어서 어플리케이션, 서비스로의 배포를 위한 실행최적화를 못하고 있어요!
AI 서비스를 이미 제공하고 있지만, 비싼 클라우드 GPU 서버 인스턴스 사용료가 부담이 되네요. 흠... 경비를 절감할 수 있는 방안이 없을까?
서비스에 적합한 공개 SOTA 모델이 있지만 그대로 가져다 쓰기에는 우리 쪽 어플리케이션에 접목하기도 어렵고 운영 비용도 많이 들 것 같은데 어쩌지?
서비스에 사용되는 AI 모델을 통합적으로 관리, 배포, 모니터링을 하고 싶은데 그렇다고 비싸고 너무 복잡한 솔루션을 쓸 수는 없고 어쩌지?