2017년 11월 3일 금요일

Combining Residual Networks with LSTMs for Lipreading 정리

알아야 할 어휘

  • Viseme
  • Any of a group of speech sounds that look the same, for example when lipreading.
  • '비슴'이라고 발음함.
  • 시각적으로 구분할 수 없는 음소

  • HMM-based, hand-engineered features, 립리딩[11, 12, 13, 14]
  • optical flow, SVM 등의 active appearance spatiotemporal descriptor [16]
  • ???[17, 18]
  • DBN 사용하여 립리딩 21% 성능 향상[22]
  • Deep autoencoder로 얻은 feature를 DCT feature와 함께 붙여 LSTM 학습[23]
  • end-to-end LSTM 사용, GRID DB에서 기존 방법들보다 높은 성능[3]
  • LSTM과 CTC 결합, GRID에서 95.2% 인식률[1]
  • attention mechanism을 사용한 encoder-decoder 방식으로 GRID DB에서 97% 달성[2]

  • 제한된 어휘의 DB에서 립리딩 전문가(사람)을 능가하는 립리딩 알고리즘[1][2]
  • 립리딩 접근 방법 2가지
  • word에 대한 모델링[3][4]
    • 고립 단어 인식에 적합
  • viseme에 대한 모델링[1][2]
    • LVCSR에 대해 적합
  • 최근에는 word 모델을 가지고 LVCSR에 적용해도 좋다는 연구가 있음[7, 8, 9]

Problem

  • DB의 word가 고립되어 있지 않고 발화 내에 있음
  • 그러므로 인식기는 문장 내에서 target word와 무시해야 하는 word를 구분하는 방법을 학습해야 함.
  • 학습 시 인식기에 대해 word boundary를 따로 알려주지는 않음

Proposed

  • 단어 수준 립리딩 state-of-the-art보다 6.8% 높은 성능을 얻음
  • word에 대한 모델이지만 Softmax layer에서 viseme 수준 인식도 가능(How ??)
  • 3 네트워크로 구성
  • front-end
    • frame 시퀀스에 대해 spatiotemporal convolution 수행
  • ResNet
  • Bi-LSTM
  • (마지막 layer) softmax

LRW Database

  • BBC 영상 기반
  • 화자/포즈 매우 다양
  • 타 DB에 비해 target word의 갯수가 매우 많음(500개)
  • 단수/복수(23쌍), 현재/과거(4쌍) 등 viseme
  • DB제작은 전부 자동으로 수행
  • 정답 text는 BBC 자막을 OCR로 얻어냄
  • word가 고립되어 있지 않고 발화 내에 있음
    • 그러므로 인식기는 문장 내에서 target word와 무시해야 하는 word를 구분하는 방법을 학습해야 함.
    • 학습 시 인식기에 대해 word boundary를 따로 알려주지는 않음
  • word 당 clip의 수
  • Training set: 1000
  • Validation, Test set: 50
  • 고정된 duration: 1.28 sec, 25fps frame rate

Deep learning modeling and preprocessing

Facial landmarks and data augmentation

  • [27, 28]에서 사용한 방법의 2D 버전을 사용
  • 66 facial landmark
  • 112 x 112 cropped size
  • 아래는 정확히 어떻게 했다는 것인지 모르겠음.
    • A common cropping is applied to all frames of a given clip, using the median coordinates of each landmark. The frames are transformed to grayscale and are normalized with respect to the overall mean and variance.
  • data augmentation은 training 도중에 수행됨(무슨 뜻인지 모르겠음)
  • 주어진 clip의 모든 프레임에 대해 random cropping(+- 5 pixels) 수평 flip

The block diagram of proposed network

Spatiotemporal front-end

  • Spatiotemporal conv. layer는 RNN 없이도 짧은 duration의 움직임 검출에 대해 좋은 성능을 냄[1]
  • 파라미터의 수: ~16K
  • Fig. 2 참고

Residual Network

  • ImageNet에서 제안된 34-레이어 짜리 사용[31]
  • pretrained model은 ImageNet이나 CIFAR 등의 task에 사용된 것이기 때문에 사용하지 않음.
  • 파라미터의 수: ~21M

Bidirectional LSTM back-end and optimization criterion

  • 파라미터의 수: ~2.4M
  • viseme에 대한 고려 없이, 최적화 criterion 관점에서 몇 가지 접근법이 있음
  • 1. 마지막 LSTM output에 대해 softmax layer를 붙여서 BPTT로 학습 시키는 것
  • 2. 각 time step에 criterion을 적용하는 것.
    • LSTM을 사용한 음성인식과 비슷
    • 음소/viseme label 대신 word label을 각 time step(모든 프레임)에 반복 적용함
    • 이는 word boundary를 모르기 때문임
    • hidden state가 모든 video 시퀀스를 알고 있어야 하기 때문에 bi-LSTM에 적용할 수 있음
  • 2번 방법이 3% 더 좋음
    • 전체 loss는 모든 time step에 대한 aggregated loss
    • word posterior의 negative log의 합

Implementation details

  • Titan X
  • SGD 학습, 0.9 momentum
  • softmax layer를 제외한 모든 conv. layer와 linear layer에 BN 적용
  • dropout은 사용하지 않음(ResNet recipe가 아니기 때문)
  • 초기 lr: 0.0005 / 최종 lr: 0.00005 (log scale로 감소)
  • validation set에 대해 3 epoch 동안 성능이 좋아지지 않으면 학습 중단
  • 15~20 epoch에서 수렴

전체 시스템 Training 방법

  • 1) Bi-LSTM 대신 temporal conv. back-end 사용
  • 2) 1)이 수렴 후 temporal conv. back-end를 없애고 Bi-LSTM을 붙여 학습
  • front-end와 ResNet 부분의 weight를 고정하여 5 epoch 동안 학습
  • 3) 2)를 end-to-end 학습
  • temporal conv. back-end와 Bi-LSTM back-end의 성능 비교 했음

Experiments

Baseline results

  • 현재 state-of-the-art는 multi-tower VGG-M[4]
  • Top-1: best score로 추정한 단어의 정확도
  • Top-N: N best score 중 정답 단어가 있는 것을 맞춘 것으로 쳤을 때 정확도

Results using proposed network

  • N1: 2D conv. ---> ResNet ---> temporal conv.
  • 각 단계 사이에 BN--ReLU--MaxPooling(1/2로 사이즈 축소됨)
  • N2: 3D conv. ---> ResNet ---> temporal conv.
  • N3: 2D conv. ---> DNN ---> temporal conv.
  • ResNet의 성능을 알아보기 위한 실험
  • DNN은 ResNet과 같은 파라미터를 가지도록 세팅함. 결과적으로 파라미터의 수가 같은데도 ResNet이 좋은 성능을 냄.


  • N4: 3D conv. ---> ResNet ---> Bi-LSTM
  • N5: 3D conv. ---> ResNet ---> 2 layers Bi-LSTM

  • N6: 3D conv. ---> ResNet ---> 2 layers Bi-LSTM
  • N5의 weight들을 starting point로 해서 end-to-end 학습
  • Fig.2 부분의 concatenate layer가 addition layer인 형태
  • (그러면 N5는 end-to-end로 학습하지 않고 front-end와 ResNet은 고정하고 Bi-LSTM만 학습했다는 얘기인가?)
    • N7: 3D conv. ---> ResNet ---> 2 layers Bi-LSTM(concatenate layer instead of addition layer)
  • N6과 구조는 거의 같고 학습 방식도 end-to-end임. N6의 addition layer를 concatenate layer로 교체(Fig.2와 같음)

Discussion and error analysis

  • baseline(VGG.M) vs. N1
    • 8.5% 향상
  • N1 vs. N2(3D conv.)
  • 3D conv.가 짧은 구간의 움직임을 강조해주어(왜?) 5.0% 성능 향상
  • 등등 각 요소를 하나씩 붙일 때마다 좋아짐

  • 음소가 많이 들어 있는 단어는 잘 맞춤
  • viseme이 많이 들어있으면 잘 틀림
  • 선행 단어, 후행 단어에 대해 조음 결합 현상이 일어나는 단어들에서 주로 틀림
  • 맨 앞과 맨 끝 부분의 viseme을 인식하는 것은 어려움