AI 기반 동영상 처리(3)
동영상 처리 패턴
들어가며
유튜브, 틱톡과 같은 동영상 플랫폼의 대중화에서 볼 수 있듯이, 동영상은 우리의 일상과 떼어 놓을 수 없는 친숙한 미디어 콘텐츠 형식입니다. 동영상은 시청각을 동시에 자극함으로써 시청자가 내용을 직관적, 효과적으로 이해할 수 있다는 특성을 가지고 있습니다.
클레온은 모두의 경험을 나의 경험으로 만들자는 비전 아래, 다양한 AI 기술로 새로운 동영상 콘텐츠를 만들 수 있는 환경을 제공하고 있습니다. 이러한 환경을 만들기 위해서는 동영상의 특성에 대해 잘 알고, 그 특성에 맞게 각 처리 과정에 AI 기술을 적절히 녹여낼 필요가 있습니다.
연재 순서
- 동영상의 구성 요소
- FFmpeg
- AI 기반 동영상 처리 패턴
3. AI 기반 동영상 처리 패턴
이번 연재에서는 AI를 활용하는 동영상 처리에 주로 사용되는 몇 가지 패턴을 알아봅니다.
파일 일괄 처리
파일 기반의 일괄 처리 패턴은 서비스보다는 연구 단계에서 사용되기 적합하고, 여러 오픈 소스 AI 모델들이 이러한 패턴으로 공개됩니다.
- 동영상 파일을 읽은 다음, 프레임 일련번호를 붙여 각 프레임 이미지를 저장한다.
- 프레임으로부터 AI 모델에 넣을 입력을 얻어내기 위해 전처리 로직을 수행하고, 결과를 파일로 저장한다.
- 전처리 결과를 AI 모델의 배치 크기에 맞게 몇 개씩 묶어 모델 추론을 실행하고, 모델 출력을 후처리한 뒤 파일로 저장한다.
- 여러 모델 수행이 필요한 경우, 2와 3을 반복한다.
- 최종 결과물을 동영상으로 인코딩하여 출력한다.
장점
- 구현이 직관적이다.
- 중간 결과를 통해 모델이 예상하는 대로 동작하는지 빠르게 확인할 수 있다.
- 전처리 결과 파일을 보관하였다가 학습 시 학습 데이터로 빠르게 활용할 수 있다.
단점
- 파일 입출력에 필요한 cost가 너무 커, 실제 서비스로 사용하기에는 느리다.
순차 처리
순차 처리 패턴을 이용하면 동영상 파일 기반의 서비스를 빠르게 구현하여 제공할 수 있습니다. 순차 처리 패턴은 특히 실험적인 서비스나 MVP 구현과 같은 초기 서비스 단계에서 사용하기 적합합니다.
- 결과 프레임이 인코딩되어 들어갈 출력 동영상 파일을 미리 열어 놓는다.
- 입력 동영상 파일을 연 다음, 파일로부터 프레임 몇 개를 읽는다.
- 프레임으로부터 AI 모델에 넣을 입력을 얻어내기 위해 전처리 로직을 수행하고, 전처리 결과로 나온 모델 입력을 메모리에 보유한다.
- 결과를 배치로 묶어 모델 추론을 실행하고, 결과물을 후처리하여 메모리에 보유해둔다.
- 여러 모델 수행이 필요한 경우, 3과 4를 반복한다.
- 결과물을 출력 동영상 파일에 쓴 뒤, 3~5에서 할당하였던 메모리를 해제한다.
- 2로 돌아가 다음 프레임들을 읽고, 3~6을 반복한다. 모든 프레임을 처리하였으면 1의 파일을 닫는다.
장점
- 긴 길이의 영상이 들어와도 안정적으로 작업을 처리할 수 있다.
- 입출력 영상 외 프레임 이미지 등의 파일 입출력을 하지 않아, 파일 기반 처리 방식에 비해 시간이 단축된다.
단점
- 모델이 적을 때에는 작업이 직관적이나, 다수 모델 연동 시 로직의 복잡도가 급격히 증가한다.
- 프레임의 처리가 나중 프레임에 종속되는 경우, multi-pass 처리가 필요할 수 있다.
- 구현을 잘못하는 경우, 아래와 같은 메모리 관련된 문제가 발생할 수 있다.
예시 1) 2에서 모든 프레임을 한 번에 읽는 형태로 구현한 경우 메모리 초과가 발생할 수 있다.
예시 2) 6에서 메모리를 잘 해제하지 않으면 메모리 누수가 발생하여, 장기적으로 서비스가 불안정해질 수 있다.
파이프라인 처리
파이프라인 처리 패턴은 스트리밍 서비스 등의 실시간 서비스 제공 단계에서 사용하기 적합합니다. 동영상 파일 처리 시에도 파일을 스트림으로 보고 동일한 로직을 사용할 수 있습니다.
- 각각의 AI 모델과 전/후처리 로직의 입출력을 확실히 정의해놓고, 미리 모듈화해 놓는다. 모듈화된 함수 내부에서는 일반적인 로직을 수행하거나, 같은 머신의 모델 수행 프로세스를 호출하거나, 외부 API를 호출할 수도 있다.
- 모듈을 미디어 처리 커스텀 필터 형태로 변환하는 Wrapper를 구현한다. NVIDIA DeepStream, nnstreamer 등의 파이프라인 확장 도구는 AI 모델로부터 효과적으로 커스텀 필터를 제작하는 기능을 제공한다.
- AI 작업을 의뢰받으면, gstreamer 등의 파이프라인 처리 도구에서 이용할 수 있도록 작업의 목표에 맞게 해당하는 필터를 조합하여 파이프라인을 구성한다.
- 입력 스트림에서 읽은 프레임을 파이프라인을 통해 흘려보내 결과 스트림으로 가도록 가동한다.
장점
- 시스템 구성 요소는 많지만, 모듈화로 인해 유연성이 높고 복잡도는 낮은 편이다.
- 파이프라인은 directed acyclic graph 형태로 생각할 수 있으므로, 여러 플로우 관리 도구를 사용하여 관리 및 시각화하기 용이하다.
- AI 기반 서비스를 파일뿐만 아니라, 다른 동영상 필터와 연동하여 스트리밍 서비스로 제공하기에도 적합하다.
단점
- 모듈화 시 입출력을 명확하게 할 필요가 있으며, 모델들의 상태가 종속되어 있는 경우 모듈화에 세심한 고려가 필요하다.
- 프레임의 처리가 다른 프레임에 종속되는 경우 버퍼 처리 등 대안적인 구현 기법이 필요하다. 특히 interpolation 등, 이후 프레임에 종속되는 경우 출력의 latency가 증가할 수 있다.
- 스트림 입출력의 경우 특성상 multi-pass 구현이 어렵다. 즉, 모델을 수행할 때 영상 전체에 대한 global feature는 이용할 수 없으며 feature를 시작 시점부터 누적시켜 활용하거나 버퍼 구간의 영상에서 feature를 추출하여 이용하는 형태로 바꾸어야 한다.
- 모듈화 과정에서 최적화가 잘 안되는 경우 성능이 감소할 수 있다. 특히, 사용하는 파이프라인 수행 도구의 최적화 정도도 전체 시스템의 성능을 좌우한다.