ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AI 아이돌 교차편집 프로그램
    컴퓨럴/후로그람스 2020. 11. 1. 23:40

      아이돌 덕질 한번이라도 해본 사람은 교차편집 영상을 지나치기라도 했을거라 확신한다. 여러 무대 영상을 한 영상처럼 자연스럽게 편집한 영상이다. 영상 하나로 내가 좋아하는 아이돌 멋쁜 모습 다 보면 얼마나 효율 좋은가! 그런데 만드는건 효율이 낮다. 교차편집 하는 법 같은 검색어로 영상들을 찾아보면 반복되는 작업이 매우 많고 매우 오랜 시간이 걸리는 것을 확인할 수 있다. 물론 반복적으로 내가 좋아하는 아이돌 보는데 무슨 문제며, 효율 따질거면 덕질왜하냐 싶을 수 있겠다. 하지만 덕질도 효율적으로 할 수는 없을까? 개발 하는 사람들은 덕질에서도 이런 생각을 하게 된...다...

     이런 젼차로 내가 속한 동아리에서 컨퍼런스 발표를 위해서 팀원들과 함께 아이돌 교차편집을 자동으로 생성하는 프로그램을 만들어 보았다. 유투브에 '귷'이라는 크리에이터분은 교차편집을 거의 예술로 하시는 분인데(거의 웨딩피치 변신급이다. 웨딩피치 알죠...? 저만 아는거 아니죠..?) 이런 분을 발끝만큼 따라가는 프로그램을 만드는게 목표였다. 

    와;;;; [출처 : 귷님 유툽 https://youtu.be/IEsUSLFlUtM]

    [ 영상 전처리 ]

     영상을 자연스럽게 전환하기 위해서는 당연히 각 영상의 타이밍도 맞아야 한다. 먼저, 노래를 다시 편곡하거나 중간에 댄스 브레이크를 넣은  무대들은 제외하자. 그리고 노래 시작 지점을 맞추면 된다. 처음에는 시계열로 비슷한 지점을 찾아주는 DTW 알고리즘으로 가장 시작점이 유사한 부분을 찾도록 했다. 그런데 DTW를 이용해 시작점을 맞춰보니 결과가 그리 좋지 못했다. 그래서 어쩔 수 없이, 시작점을 수동으로 맞춰줬다. 코드 단에서 start_times = [0, 4, 4, 0, 0, 1, 14, 0.3, 0, 0, 0] 와 같이 각 영상별 시작점을 주고 자르기도 하고, 직접 편집 프로그램을 이용해 미리 시작점을 잘라 보기도 했다.(직접 듣고 편지프로그램으로 편집하는게 제일 싱크를 잘 맞추긴 하더라. 코드단에서 소수점을 모두 맞추긴 어렵다)

     이 부분은 자동 교차편집 프로그램에서 완전한 자동화를 저해한다는 측면에서 개선하면 좋겠다 생각하고 있다. 호옥시 방법이 생각난다면 아래 github에 pull request 를 해주면 좋겠다...

    [ 비교군 만들기 ]

     처음에 정말 랜덤하게 생성해 비교할만한 영상을 만들었다.(최소한 이것보다는 나아야 한다) 5~ 10초 이내에 랜덤으로 다음 영상을 뽑아 편집하는 방식이었다. 그런데 예상치 못한 일이 생겼다. 다른 동아리 친구들에게 랜덤하게 생성한 결과물을 보여주니 꽤 괜찮은 교차편집 결과물이라고 말하는 것이다!!! 대충 만들고 교차편집 했다고 입 털어도 문제 없겠다 라는 생각이 안든건 아니지만... 랜덤으로 한 것 보다는 드라마틱하게 좋아진 결과물이 꼭 필요하겠다는 생각이 들었다. 예를 들면 얼굴이 스르륵 전환되거나, 옷이 물감 퍼지듯 바뀌는 등의 효과가 있어야 한다. 

     또 모델 구축 장인 팀원이 Resnet3D를 활용해서 행동의 Embedding vector를 구하고 벡터간 유사도 얻어 교차편집에 활용해보기도 했다. 그런데 이 결과물은 어떤 포인트에서 스르륵 하는 효과를 넣어주면 좋을지가 명확하지 않았다. 

    [ Face 기반으로 생성하기 ]

      교차편집 영상들을 보면 얼굴이 크게 클로즈업 되어있을 때 스르륵 다음 장면으로 전환되는 경우가 많다. 스르륵 전환될 때 중요한 포인트는 두 얼굴의 위치가 잘 맞다는 것이다. 그렇다면, 얼굴의 위치만 맞춰서 전환만 잘 해주면 매우 자연스럽게 전환되겠다는 판단이 들었다. 얼굴 위치를 찾아주는건 머신러닝에서 매우매우 자주 나오는 주제라 바로 활용 가능하다. OpenCV에서 Face Landmark를 잡아주면서 속도도 매우 빠른 모델들이 이미 나와있다. 이를 활용해 얼굴의 사이즈와 좌표를 계산하면 다음 프레임에서 가장 가까운 영상을 뽑아 전환하기만 하면 된다.

    옵아마의 face Landmark

     - LandMark
     처음에는 왼쪽 노란색 점처럼 얼굴 모든 좌표를 계산했었다. 그런데 어차피 우리는 같은 얼굴이지만 시간에 따른 차이를 구하는 것이 목적이다. 프레임 간의 거리 계산할떄 굳이 계산량을 늘려가며 모든 점의 거리를 계산할 필요가 없겠다는 생각이 들었다. 그래서 양쪽 눈의 끝점을 활용했다. 나중에 영상 전환할 때 양쪽 눈 끝점으로 각도와 거리를 계산해 얼마나 회전하고 확대해야 할지 파악할 수 있다.

     물론 두 얼굴 중 하나는 측면을 보고 있고 하나는 정면을 보고 있으면 양쪽 눈의 거리를 계산하는 것은 무의미할 수 있다. 원래 이 문제를 해결하기 위해서 3d로 얼굴 lanmark를 구하는 방법을 사용해보았으나 opencv보다 시간도 훨씬 걸리고 코드도 복잡해졌다. 우리가 하는 프로젝트는 아이돌 무대로 한정해 같은 시간에는 같은 각도로 카메라를 보고 있을 것이라 복잡도를 높일 필요가 없다고 판단했다.

    - 계산하는 Frame 단위
     각 영상간의 거리차이를 계산 할때 전환하고 싶은 시점의 한(one) frame의 거리만 계산했었다. 그런데 전환된 프레임 바로 다음 프레임이 관중을 찍는다거나 하는 문제가 생겼다. 해결을 위해 n개의 frame 중에서 가장 거리가 먼것(max)을 그 영상의 대표 거리로 만들고 대표 거리의 최소값(min)을 구하는 방식을 활용했다(max의 min값을 찾는방식). 또 몇개의 frame을 함께 계산하면 좋을지 파악해보기 위해서 연속하는 frame 수가 보통 몇개인지 통계적으로 계산해보니 5frame 정도였고 거리를 계산할 때 5frame window로 계산하도록 구현했다.

    우리 조원들의 대단한 피피티 이미지

    - 스르륵 전환 효과 넣기
     스르륵 전환 효과는 흑염룡에 눈을 그려주는거와 마찬가지다. 스르륵 효과 없이도 비슷한 영상을 자연스럽게 전환할 수도 있지만, 스르륵 효과가 있다면 효과는 배가 된다(이 효과를 넣으면 멍하게 보다가 사람들이 우와~ 해주더라). Moviepy에서는 장면을 아래 그림처럼 fade-in/fade-out(crossfade)해주는 효과를 제공해준다.

    스르륵 스르륵

    스르륵 전환 이슈 1. 위치, 각도 맞춰주기
     그런데! 스르륵 효과만 넣어준다고 자연스러운 느낌이 만들어지는건 아니었다. 앞 영상과 뒤 영상의 얼굴 위치가 다른데 그대로 crossfade 해주면 얼굴은 그대론데 주변 배경이 바뀌는 느낌을 낼수가 없다. 되려 그냥 컷컷으로 편집한게 더 자연스러워 보인다. 그래서 두 영상의 얼굴 위치를 맞추는게 필요하다. 아래처럼 앞에서 구한 양쪽 눈 landmark 끝의 거리로 영상에서의 얼굴 확대 정도를 구하고, 양쪽 끝 점의 기울기를 통해 각도를 구한다. 이렇게 구한 크기와 각도를 이용해서 확대/축소와 회전을 해주면 된다(말이야 쉽지... 회전할 때 중심점도 생각해야 하고 앞 영상이 클때, 뒷 영상이 클 때 같은거 고려하느라 머리가 아팠다... 멍청한게 죄다...) 

    스르륵 전환 이슈 2. 나는 검은 부분이 보기 싫어요
     그냥 무턱대고 회전하고 다음 영상에 크기를 맞추면 아래 그림처럼 검은부분이 생기는 경우가 있다. 그래서 검은 부분이 생길 것으로 판단되면 보이는 장면 자체를 확대시켜줘야 한다. 아래 그림에서는 검은 부분이 안보이게 확대한다면 노랑색 모양으로 자르는게 가장 좋겠다. 여기서 또 주의할 점은 확대할 때 그냥 확대하면 얼굴의 위치가 바뀐다는 점이다. 그러므로 확대할 때 아래 코드와 같이 비를 유지하면서 잘라줘야 한다. 

    w1, w2 = int(round(cur_w - W_real * w_ratio)), int(round(cur_w + W_real *(1-w_ratio)))
    h1, h2 = int(round(cur_h - H_real * h_ratio)), int(round(cur_h + H_real *(1-h_ratio)))

    - 얼굴 임베딩 효과넣기
     가끔 같은 시간초라도 다른 아이돌이 확대되는 경우가 있다. 특히 아이돌 그룹에서 혼자서 인기를 독차지 하고 있는 경우에 다른 사람이 노래를 부르고 있는데도 인기 있는 아이돌 얼굴을 클로즈업 해주기도 한다. 이럴 때 얼굴을 구분하지 않고 거리로만 계산하면 서로 다른 얼굴이 스르륵 전환되는 불상사가 생긴다. 그래서 FaceNet을 활용해서 각 사람의 얼굴 임베딩 벡터를 구해 서로 다른 임베딩 벡터가 나오면 기존 거리 값에 패널티 값을 더 더해주는 방식을 사용했다(처음에는 아이돌 얼굴 사전을 만들어서 classify를 할까 했는데, 매번 아이돌이 새로 생길때마다 추가할 수 없는 노릇이라 조금 부정확 하더라도 embedding vector를 활용했다)

    cosine_dist = 1 - np.dot(reference_frame_embed, compare_frame_embed) 
    			/ (np.linalg.norm(reference_frame_embed) * np.linalg.norm(compare_frame_embed))

    [ Pose 기반으로 생성하기 ]

     아이돌 덕질할 때 그 인물 자체가 너무 멋있어서 꽂히는 경우도 있지만, 안무 자체가 너무 멋있어서 꽂히는 경우도 있다(나에겐 샤이니가 그렇다). 그만큼 아이돌에게 안무는 중요하다. 그래서 교차편집할 때 pose를 고려해서 가장 비슷한 포즈일 때 영상이 교차되면 좋다.

    샤이니 Everybody 뮤비에서

     Pose기반 교차편집을 위해서는 비슷한 위치에 비슷한 자세로 하고 있을 때를 찾아야 한다. 처음에는 AlphaPose 모델을 활용하여 사람의 관절 좌표를 추출하여 비교하려 했었다. 아래 그림처럼 이쁘게 관절을 찍어주는 모델이다. 그런데 우린 또 컴퓨팅 파워에 꼭 필요한 돈이 없는 사람들이다. 게다가 많은 영상을 한꺼번에 봐야 하기 때문에 시간도 꽤 오래 걸린다. 

    알파포즈에서 보여주는 예시

    하지만 우리는 아이돌 교차편집의 장점을 잊으면 안된다. 모든 영상은 같은 춤을 추고 있고, 같은 사람이 있다(물론 빅뱅같은 아이돌은 스웨그를 중시하기 때문에 매번 쀨링대로 춤춘다). 그러므로 현재 사람의 위치만 잘 파악해도 꽤 좋은 결과물을 얻을 수 있다. 그래서 Alphapose에서 Detector로 활용하는 Fast R-CNN을 활용하여 위치를 찾아보기로 했다 Fast R-CNN 모델은 CNN을 이용하여 Object Detection을 하는 모델이다. 

     

     이렇게 Fast R-CNN으로 사람으로 인식한 bounding box를 얻으면 box를 이용하여 사람의 위치와 장면에 담긴 사람 수를 파악할 수 있다.이 때 Box의 꼭지점 네 좌표를 활용하는 것이 아니라 박스 좌표의 중심점만을 이용해서 거리를 계산해서 계산량을 줄일수도 있다. 이렇게 중심점이 가장 유사한 프레임 영상을 다음 편집 영상으로 택함으로써 비슷한 안무일 자연스럽게 전환되는 효과를 얻을 있다.

    [ 개선할 방향 ]

     기간도 짧은데다가 프로젝트를 진행하면서 학교도 다녀야 하다보니 너무 욕심을 부리지 않고 지금 당장 필요한 것들만 작업했다고 생각한다. 더 좋은 모델들이 있었지만, 일단 효율적으로 결과를 낼 수 있는 것들을 먼저 선택했다. 결과물을 보면서 더 좋은 모델을 써서 해봤다면 얼마나 좋은 결과물이 나왔을까 싶기도 하다. 또 얼굴기반, Pose기반 모델을 한꺼번에 합치는 시도를 해봤으면 좋았을텐데 해보지 못했다. 프로젝트가 끝나고 시간이 되면 해봐야지 했는데 역시 사람은 마감이 닥쳐야 열심히 하는건지 마감이 없으니까 안하게 되더라.

     또 귷님의 영상처럼 옷만 샥 바뀌는 효과 같은 것들도 만들면 참 좋을거같다. 최종 목표는 귷님 영상처럼 일테니까... 

    ---

    결과물은 유투브에서 구경할 수 있다. 저작권 때문에 사실 이렇게 공유하는게 맞는지 고민이다.

    발표자료도 투빅스 동아리 사이트에서 확인할 수 있다.

     대학교 동아리 활동의 마지막 결과물이라 뭔가 기분이 이상했다. 그래도 대단한 친구들이 같은 조원들이 되어서 협업도 엄청 잘되고 회의할때도 신선한 아이디어가 금방금방 나왔다. 같이 함께한 친구들이 정말 대단대단쓰... 다음에 또 시간되면 이런 프로젝트 해보고 싶다! 

    대단쓰 친구들...

     

    ----

    진행했던 아이돌 교차편집  프로젝트를 책으로 써볼수 있는 기회가 생겨서 책을 발간하게 되었다. 마지막 챕터가 우리 프로젝트 내용이다!!

    혹시 관심있는 분들은 한번 읽어보시는 것을 추천한다!! 다른 재미있는 프로젝트들도 많다.

    책 링크 - https://product.kyobobook.co.kr/detail/S000001842189

Designed by Tistory.