SwingNet의 입력 영상은 CNN 기반의 MobileNet V2를 통과한다. 그렇다면 MobileNetV2가 뭔지부터...


manifold of interest 양수이면 ReLU를 통과할 때 자기 자신을 반환한다 (정보 보존)
하지만 이 과정에서 필연적으로 정보의 손실이 발생하는데, 많은 채널을 사용할수록 정보가 더 보존된다.
MobileNet V2에서는 이 저차원 mapping을 위한 linear transformation을 위해 bottleneck 구조를 활용한다.
Bottleneck 안에 있는 ReLU(비선형성)는 너무 많은 정보 손실이 일어나므로, 이것을 제거한 Linear Bottleneck 구조가 더 좋은 성능
→ 차원은 줄이되 manifold of interest(중요 정보)는 그대로 유지
= 네트워크 크기는 줄어들지만, 정확도는 그대로!

MobileNet V2는 Shortcut connection을 bottleneck block끼리 연결
Narrow → Wide → Narrow
형태의 Inverted Residual Block을 사용

빗금 block: ReLU 등의 비선형 함수를 제거한 block
입/출력의 채널수가 낮기 때문에 Residual Block에 비해 연산량이 적고 메모리 효율이 좋음
아무튼 MobileNetV2는 Lightweight Depthwise Convolution을 자유롭게 사용할 수 있어서 모바일 어플에 잘 맞다는 장점이 있다!
본론으로 돌아와서, input 영상이 MobileNetV2를 통과하여 얻어진 feature가 bi-LSTM layer를 거치면 시간 정보가 입력된다.
LSTM = Long Short Time Memory
그 이전에 RNN (Recurrent Neural Network)가 있었다. 얘는 이전의 입력 데이터를 기억해서 다음 출력을 결정하는 모델인데, 입력 데이터가 길어지면 Gradient Vanishing Problem 때문에 이전의 정보를 제대로 기억하는 데에 문제가 있다.
그 래 서!
LSTM은 이 RNN의 그래디언트 소실 문제 해결을 위해 등장한 모델인데,
이라는 장점을 가진다.
근데 RNN이랑 그래서 뭐가 다르냐 하면...
메모리 셀의 값을 얼마나 기억할지 결정이 가능한 "게이트"가 있어서 필요한 정보만 기억하도록 제어가 가능하다.

(메모리 셀 안에 상태 정보를 변경하는 게이트가 있다!: Input Gate, Forget Gate, Output Gate와 함께 Cell State가 있다)

이건 SwingNet 안에서 LSTM이 작동하는 구조다. 골프 스윙과 같은 스포츠 동작은 시간에 따라 변하는 연속적인 데이터 이다. 각 순간의 동작이 이전의 동작과 연관되기 때문에, 단일 프레임을 사용해 골프의 swing event를 감지하는 것은 어려운 작업이다. 따라서 시간적 context가 중요한 요소가 되는데,
하지만 LSTM을 사용해 이러한 시간적 의존성을 잘 처리할 수 있다!
이렇게 시간 정보를 입력하고 나서, 최종적으로 softmax 함수를 적용하면 최종 결과값으로는 각 event 별로 Confidence 값(Event Probabilities)이 얻어진다.

실제 Michelle Wie 선수의 스윙 동작을 input으로 넣었을 때 얻은 확률값들이다.
근데 Address(처음)와 Finish(끝) 단계의 확률이... 좋지 않다.
이제 우리의 프로젝트인 '손동작 인식을 통한 메시지 전송'을 위한 Human Pose Estimation에 대해 알아보고자 한다.

컴퓨터 비전을 통해 사람을 이해하는 것은 매우 중요하다. 이러한 분야를 Human Understanding Computer Vision (HUCV)라고 하는데, HPE는 이 HUCV의 아주 핵심 분야이다. 여기서 'Human Pose'라 함은, 사람 관절의 좌표, 회전을 의미한다. Pose Estimation(이하 P.E)은 대상 이미지나 영상 속 인체 부위가 갖는 방향성이나 위치를 감지(Detecting) + 연결(Associating) + 추적(Tracking)하는 것을 포함한다. 그 대상은 Semantic Key Point인데, 인간의 경우 예를 들어 "right shoulders", "left knees" 등이 있다. 사물이 경우 자동차라면 "left brake lights of vehicles"가 있다.
real-time 영상에서 semantic keypoint를 추적하는 것은 매우 큰 컴퓨팅 리소스를 필요로 하지만 최근 하드웨어와 모델 효율성이 크게 발전해서 구현이 가능해지고 있는 추세다.
→ 참고: Occluded Human Dataset API로 해결하고자 함
https://github.com/liruilong940607/OCHumanApi


입력으로 이미지를 받고, Feature Extractor(ex. ResNet, Hourglass)가 입력 이미지에서 강하게 드러나는 feature를 Feature Map으로 추출한다.
보편적인 MS COCO 데이터셋의 경우 서로 다른 17개의 keypoint(class)를 감지할 수 있는데, 이 때 세 개의 숫자 (x,y,v)가 annotated 된다.
x,y: target point의 좌표
v: keypoint인지 아닌지 여부 (key면 v=1, non-key면 v=0)
