Video features 공부: Schwenzow et al. (2021)(6)
Schwenzow et al. (2021)에 나온 video feature 를 소개하는 여섯 번째 포스팅이다. 이전까지 소개한 feature 들은 기본적으로 비디오를 구성하는 사진(frame) 차원에서 계산되는 feature 들이었다. 이것을 전체 비디오 차원에서 합, 평균, 분산 등을 구해서 비디오 차원의 feature 로 사용하는 방식이었다. 이에 비해, 이번 포스팅에서 소개할 feature 들은 원래부터 비디오 차원의 feature 들이다. 먼저 scene cut 이다.
6. Scene cuts
9) average scene cut frequency
텍스트 분석의 기본 절차 중 하나가 단어 등 구성단위로 나누는 것이듯, 비디오 역시 하부 구성단위로 나누는 것이 중요한 전처리 단계이다. 가장 기본적인 절차는 기본 구성 단위인 샷(shot)으로 나누는 것이고, 이것은 shot (boundary) detection 이라고 부른다. shot detection 은 매우 중요한 절차인 만큼 여러 알고리즘들이 제안되어 왔고, 현재도 활발히 연구되는 분야라고 알고 있다. 초기에는 인접한 두 프레임 사이에 어떤 “차이”를 계산한 후 그 차이가 일정한 경계치를 넘어가는 지점을 샷의 경계선으로 간주하는 방식의 알고리즘이 많이 제안되었었다. 그 “차이”는 RGB 화소 히스토그램의 차이가 많이 사용되었고, motion flow 같은 다른 측정치의 차이도 많이 사용된 것으로 알고 있다. 요새는 이것도 인공신경망을 통한 작업이 대세가 된 것 같다. 나중에 기회가 되면 이에 대해서도 정리해서 포스팅했으면 좋겠다. (물론 비디오를 구성하는 모든 프레임을 분석해야 하는 경우도 있다. CCTV 같은 감시 영상같은 경우에는 편집이 가해지지 않기 때문에 샷의 구분이라는 것 자체가 성립하지 않는다. 이런 경우에는 모든 프레임을 분석해야겠지만…)
다시 논문으로 돌아오면, 여기에서는 scene cut 이라고 썼지만 엄밀히 말하면 틀린 표현이다. 비디오의 구성 단위는 (논문마다 차이는 있지만) 대개 프레임(사진) - 샷 - 씬 - 시퀀스로 구성된다고 얘기된다. 즉 scene 과 shot 은 엄연히 다른 개념이다. 그렇다면, 이 논문에서 쓴 개념은 무엇일까? 여기에서는 알고리즘을 상세히 제시하지 않고, 대신 PySceneDetect 라는 프로그램을 썼다고 적혀 있다. 사실 PySceneDetect 는 나름 유명한 프로그램이다. 다만, (대충 살펴보긴 했지만) 어떤 알고리즘을 구현한 프로그램인지를 정확히 제시하지는 않은 것 같다. 그래서 이 논문에서도 알고리즘 대신 프로그램 이름을 제시한 것 같고, 프로그램의 이름 때문에 shot 과 scene 을 뭉뚱그려서 사용한 것 같다. 당연히 권장되지 않는 방식이다.
어쨌든 이 논문에서는 ‘초당 cut 의 수’(number of scene cuts per video second)를 feature 로 사용하였다.
7. Visual variance
10) the variance from scene to scene
11) an average of this value across all scenes
다음으로는 visual variance 관련 feature 들이다. 일단 위에서 탐지한 shot 의 경계를 통해 샷의 시작과 끝을 확보한 후, 샷의 중간 프레임들을 선택한다. 그리고 선택된 프레임들을 벡터로 전환한 후, 이어지는 샷의 프레임 벡터 사이의 코사인 유사도(cosine similarity 또는 angular distance)를 계산한다. 벡터로의 전환은 이미지넷 데이터로 사전 훈련된 ResNet-152 모델을 사용한다. 사전 훈련된 모델에 이미지를 주입해서, 마지막 층의 값(2,048차원)을 벡터로 사용한다. 이 값들을 가지고 feature 를 계산하는데, 인접한 두 샷의 프레임 사이의 코사인 유사도를 variance 라고 정의한 것 같다. 근데 왜 ‘유사도’라고 이름붙여진 수치를 variance 의 측정치로 사용했는지는 의문이다. 어쨌든… 그리고 이렇게 연속되는 프레임 사이의 variance 를 모두 아울러 평균낸 수치도 feature 로 사용한 것 같다. 이 평균낸 수치(11)는 하나의 수치가 나올테니 그러려니 하겠는데, 앞의 두 샷 사이의 variance (10)는 여러 개가 나올텐데 그건 어떻게 사용했는지 의문이다. 논문의 코드를 보니, Average_Scene2Scene_Similarity, Variance_Scene2Scene_Similarity, Average_Scenes_Similarity, Variance_Scenes_Similarity 라고 이름 붙여진 총 4개의 수치가 계산되었다. scene to scene (실제로는 shot to shot) similarity 는 무슨 얘긴지 알겠고, 그것의 평균과 분산을 구한 것도 알겠다. 근데 scenes similarity 는 뭘 얘기하는 건지 모르겠다. 코드도 주석도 없이 달아놔서 알아보기가 어렵다.
8. Duration
12) duration
이것은 영상의 길이다. 초(second) 단위로 계산되었다.
일단 이 논문의 feature 는 여기까지이다. 한 마디로 평을 하자면, “너 이러면 안돼”이다. feature 의 정의와 제시를 이런 식으로 하는 것은 읽는 사람을 괴롭게 할 뿐 아니라 과학의 재현 가능성 측면에서도 바람직하지 않다고 생각한다.
<참고문헌>
- Schwenzow, J., Hartmann, J., Schikowsky, A., & Heitmann, M. (2021). Understanding videos at scale: How to extract insights for business research. Journal of Business Research, 123, 367-379. https://doi.org/10.1016/j.jbusres.2020.09.059