AI 기반 동영상 처리(3)

동영상 처리 패턴

Seunggeun Baek
KLleon
5 min readNov 8, 2022

--

들어가며

유튜브, 틱톡과 같은 동영상 플랫폼의 대중화에서 볼 수 있듯이, 동영상은 우리의 일상과 떼어 놓을 수 없는 친숙한 미디어 콘텐츠 형식입니다. 동영상은 시청각을 동시에 자극함으로써 시청자가 내용을 직관적, 효과적으로 이해할 수 있다는 특성을 가지고 있습니다.

클레온은 모두의 경험을 나의 경험으로 만들자는 비전 아래, 다양한 AI 기술로 새로운 동영상 콘텐츠를 만들 수 있는 환경을 제공하고 있습니다. 이러한 환경을 만들기 위해서는 동영상의 특성에 대해 잘 알고, 그 특성에 맞게 각 처리 과정에 AI 기술을 적절히 녹여낼 필요가 있습니다.

연재 순서

  1. 동영상의 구성 요소
  2. FFmpeg
  3. AI 기반 동영상 처리 패턴

3. AI 기반 동영상 처리 패턴

이번 연재에서는 AI를 활용하는 동영상 처리에 주로 사용되는 몇 가지 패턴을 알아봅니다.

파일 일괄 처리

파일 기반의 일괄 처리 패턴은 서비스보다는 연구 단계에서 사용되기 적합하고, 여러 오픈 소스 AI 모델들이 이러한 패턴으로 공개됩니다.

  1. 동영상 파일을 읽은 다음, 프레임 일련번호를 붙여 각 프레임 이미지를 저장한다.
  2. 프레임으로부터 AI 모델에 넣을 입력을 얻어내기 위해 전처리 로직을 수행하고, 결과를 파일로 저장한다.
  3. 전처리 결과를 AI 모델의 배치 크기에 맞게 몇 개씩 묶어 모델 추론을 실행하고, 모델 출력을 후처리한 뒤 파일로 저장한다.
  4. 여러 모델 수행이 필요한 경우, 2와 3을 반복한다.
  5. 최종 결과물을 동영상으로 인코딩하여 출력한다.

장점

  • 구현이 직관적이다.
  • 중간 결과를 통해 모델이 예상하는 대로 동작하는지 빠르게 확인할 수 있다.
  • 전처리 결과 파일을 보관하였다가 학습 시 학습 데이터로 빠르게 활용할 수 있다.

단점

  • 파일 입출력에 필요한 cost가 너무 커, 실제 서비스로 사용하기에는 느리다.

순차 처리

순차 처리 패턴을 이용하면 동영상 파일 기반의 서비스를 빠르게 구현하여 제공할 수 있습니다. 순차 처리 패턴은 특히 실험적인 서비스나 MVP 구현과 같은 초기 서비스 단계에서 사용하기 적합합니다.

  1. 결과 프레임이 인코딩되어 들어갈 출력 동영상 파일을 미리 열어 놓는다.
  2. 입력 동영상 파일을 연 다음, 파일로부터 프레임 몇 개를 읽는다.
  3. 프레임으로부터 AI 모델에 넣을 입력을 얻어내기 위해 전처리 로직을 수행하고, 전처리 결과로 나온 모델 입력을 메모리에 보유한다.
  4. 결과를 배치로 묶어 모델 추론을 실행하고, 결과물을 후처리하여 메모리에 보유해둔다.
  5. 여러 모델 수행이 필요한 경우, 3과 4를 반복한다.
  6. 결과물을 출력 동영상 파일에 쓴 뒤, 3~5에서 할당하였던 메모리를 해제한다.
  7. 2로 돌아가 다음 프레임들을 읽고, 3~6을 반복한다. 모든 프레임을 처리하였으면 1의 파일을 닫는다.

장점

  • 긴 길이의 영상이 들어와도 안정적으로 작업을 처리할 수 있다.
  • 입출력 영상 외 프레임 이미지 등의 파일 입출력을 하지 않아, 파일 기반 처리 방식에 비해 시간이 단축된다.

단점

  • 모델이 적을 때에는 작업이 직관적이나, 다수 모델 연동 시 로직의 복잡도가 급격히 증가한다.
  • 프레임의 처리가 나중 프레임에 종속되는 경우, multi-pass 처리가 필요할 수 있다.
  • 구현을 잘못하는 경우, 아래와 같은 메모리 관련된 문제가 발생할 수 있다.

예시 1) 2에서 모든 프레임을 한 번에 읽는 형태로 구현한 경우 메모리 초과가 발생할 수 있다.

예시 2) 6에서 메모리를 잘 해제하지 않으면 메모리 누수가 발생하여, 장기적으로 서비스가 불안정해질 수 있다.

파이프라인 처리

파이프라인 처리 패턴은 스트리밍 서비스 등의 실시간 서비스 제공 단계에서 사용하기 적합합니다. 동영상 파일 처리 시에도 파일을 스트림으로 보고 동일한 로직을 사용할 수 있습니다.

  1. 각각의 AI 모델과 전/후처리 로직의 입출력을 확실히 정의해놓고, 미리 모듈화해 놓는다. 모듈화된 함수 내부에서는 일반적인 로직을 수행하거나, 같은 머신의 모델 수행 프로세스를 호출하거나, 외부 API를 호출할 수도 있다.
  2. 모듈을 미디어 처리 커스텀 필터 형태로 변환하는 Wrapper를 구현한다. NVIDIA DeepStream, nnstreamer 등의 파이프라인 확장 도구는 AI 모델로부터 효과적으로 커스텀 필터를 제작하는 기능을 제공한다.
  3. AI 작업을 의뢰받으면, gstreamer 등의 파이프라인 처리 도구에서 이용할 수 있도록 작업의 목표에 맞게 해당하는 필터를 조합하여 파이프라인을 구성한다.
  4. 입력 스트림에서 읽은 프레임을 파이프라인을 통해 흘려보내 결과 스트림으로 가도록 가동한다.

장점

  • 시스템 구성 요소는 많지만, 모듈화로 인해 유연성이 높고 복잡도는 낮은 편이다.
  • 파이프라인은 directed acyclic graph 형태로 생각할 수 있으므로, 여러 플로우 관리 도구를 사용하여 관리 및 시각화하기 용이하다.
  • AI 기반 서비스를 파일뿐만 아니라, 다른 동영상 필터와 연동하여 스트리밍 서비스로 제공하기에도 적합하다.

단점

  • 모듈화 시 입출력을 명확하게 할 필요가 있으며, 모델들의 상태가 종속되어 있는 경우 모듈화에 세심한 고려가 필요하다.
  • 프레임의 처리가 다른 프레임에 종속되는 경우 버퍼 처리 등 대안적인 구현 기법이 필요하다. 특히 interpolation 등, 이후 프레임에 종속되는 경우 출력의 latency가 증가할 수 있다.
  • 스트림 입출력의 경우 특성상 multi-pass 구현이 어렵다. 즉, 모델을 수행할 때 영상 전체에 대한 global feature는 이용할 수 없으며 feature를 시작 시점부터 누적시켜 활용하거나 버퍼 구간의 영상에서 feature를 추출하여 이용하는 형태로 바꾸어야 한다.
  • 모듈화 과정에서 최적화가 잘 안되는 경우 성능이 감소할 수 있다. 특히, 사용하는 파이프라인 수행 도구의 최적화 정도도 전체 시스템의 성능을 좌우한다.

--

--