AI/OpenVINO

3-3. Frame interpolation using FILM and OpenVINO

된다잘된다 2024. 7. 11. 13:41

참고: https://docs.openvino.ai/2024/notebooks/film-slowmo-with-output.html

 

Frame interpolation using FILM and OpenVINO — OpenVINO™ documentation

Frame interpolation using FILM and OpenVINO This Jupyter notebook can be launched after a local installation only. Frame interpolation is the process of synthesizing in-between images from a given set of images. The technique is often used for temporal up-

docs.openvino.ai

 

이번 예제는 frame interpolation이다.

이게 무슨 뜻이냐 하면, 영상이 frame(하나의 사진)과 frame들을 모아서 만들어진다는 것은 알고 있을 것이다. 

이 frame과 frame 사이에 중간 frame을 하나더 만들어주는 것이 frame interpolation이다.

frame이 뭔지 잘 모르겠으면 아래 동영상을 보자. 그림 한장이 하나의 frame이 되는 것이다. 출처: 유튜브

https://youtube.com/shorts/r6NJIejBvJE?si=tdvMAjvh7bpEr07-

 

이런 기술은 어디에 사용하냐하면 화질 개선을 위한 up-sampling, 또는 슬로우모션을 만들 때 사용한다.

두 장의 frame을 분석하여 같거나 비슷한 부분은 그대로 두고 달라진 부분은 그 어디 중간 값을 사용하여 interpolation을 한다.

여기에서 사용된 이론이 정말 궁금하다면 여기를 참고하길 바란다.

 

모델은 TensorFlow Hub에서 가지고 오고, 윈도우에서 사용시 VP9 비디오 엔코더가 필요하다.

 

해당 notebook 파일은 C:\Intel\openvino_2024.2.0\openvino_notebooks\notebooks\film-slowmo 있다.

 

처음에는 필요한 몇가지 패키지들을 설치한 뒤 jupyter kernel을 다시 시작하도록 하자.

 

필요한 패키지들을 import 해주고 사용할 이미지를 다운받는다.

 

여기까지 하면 현재 폴더에 data라는 폴더가 생성되고 귀여운 강아지 사진 두개가 들어있을 것이다.

 

이제 사용할 모델과 input tensor를 아래와 같이 정한다.

 

사용법은 의외로 간단하다.

inputs을 정의하고, KerasLayer()를 이용해 layer를 만들어주고, keras.Model()을 이용해 input과 layer를 넣어주면 모델이 된다. 그러면 잘 만들었는지 확인해 보자.

 

발바닥 부분을 보면 어느정도 차이를 볼 수 있다.

 

이 작업을 반복하면 어떻게 될까? 이 이미지들 사이의 이미지를 또 생성해 낼 수 있다. 해당 코드는 아래와 같다.

 

times_to_interpolate를 5로 설정하였으므로 31개의 이미지를 만들고 이것을 이어붙이면 아래와 같은 영상이 된다.

 

 

 

그런데 우리의 본론은 여기부터다. 이 모델을 OpenVINO IR로 변환하여 내 컴퓨터에서 비슷한 성능이 나오도록 하는 것!

 

위에서 사용한 추론 모델을 IR로 바꿔보자.

위에서 사용한 film_model을 convert_model 함수를 이용하여 변환하고 저장한다.

 

컴파일한 모델로 입력을 넣고 interpolate된 frame을 만들어보자.

* film_model(tensorflow 모델) -> converted_model(OpenVINO IR 모델) -> compiled_model(IR 모델의 타겟 지정)

그리고 같은 input을 compiled_model에 넣어주면 결과 이미지, image를 출력한다.

 

위의 예제와 마찬가지로 연속된 이미지를 생성하기 위해서 Interpolator를 지정하고 처음과 마지막 이미지 그리고 interpolate할 횟수를 정하면된다.

 

 

이렇게 만든 결과물을 보자.

 

 

 

OpenVINO IR 로 변환하기 전과 후의 소요시간을 비교해보자.

tensorflow 모델을 사용하였을 때, 16분 3초.

OpenVINO IR을 사용하였을 때, 6분 49초.

 

GPU 없이도 상당히 빠른 처리속도를 보여준다.

 

귀엽네...