Chainer에서 C3D를 구현해 보았습니다.

Facebook이 논문을 쓰는 C3D라는 모델이 있습니다. 이것은 동영상 분류기입니다. 보통 사진 분류기라면 2차원의 Convolution을 사용하지만 C3D에서는 시간 방향으로 차원을 확장하고 3차원의 Convolution을 하고 있습니다.
  • 원래 코드: htps : // 기주 b. 코 m / 후세 보오 k / C3D
  • 논문: htps : // 아 rぃ v. rg/아bs/1412.0767

  • 이것의 Tensorflow 버전 , Keras 버전 , PyTorch 버전 그리고 오리지널의 Caffe 버전 했다.
  • c3d-chainer: htps : // 기주 b. 코 m / 이케 야스 / c3d 찬 r

  • ※ 일단 움직이고 있습니다만, 원래의 것과 같은 정밀도가 나와 있는지는 확인하고 있지 않습니다.

    Chainer용으로 변환한 학습 완료 모델도 여기에서 배포하고 있습니다.

    Pretrained 모델을 사용해보기



    희귀 D 째. MD 과 같이, 모델을 다운로드해, ​​필요한 것을 인스톨 하면 다음과 같이 실행할 수 있습니다.
    아래는 htps //w w. 요츠베. 이 m/와 tch? v = dM06 A MFLsrc 농구 동영상을 예측합니다.
    $ python predict.py -a c3d --model caffe_model/conv3d_deepnetA_sport1m_iter_1900000_chainer.model --mean caffe_model/train01_16_128_171_mean.npy --video dM06AMFLsrc.mp4 --labels caffe_model/labels.txt
    Loaded 487 labels.
    Loaded caffe_model/conv3d_deepnetA_sport1m_iter_1900000_chainer.model.
    /home/ikeyasu/anaconda3/envs/chainer3/lib/python3.6/site-packages/chainer/utils/experimental.py:104: FutureWarning: chainer.functions.pooling.MaxPoolingND is experimental. The interface can change in the future.
      FutureWarning)
    Position of maximum probability: 367
    Maximum probability: 10.43649
    Corresponding label: basketball
    
    Top 5 probabilities and labels:
    10.43649 basketball
    8.61597 volleyball
    8.46861 streetball
    7.04241 roller derby
    6.63952 freestyle wrestling
    

    변환



    본래 Chainer라면 CaffeFunction 를 사용하여 Caffe 모델을 가져올 수 있습니다. 하지만 C3D는 Caffe 자체를 개조하여 만들어져 있기 때문에 가져올 수 없습니다.
    그 때문에 가중치의 복사를 실시했습니다. 이것은 C3D Model for Keras 를 참고로 하고 있습니다.

    을 보면 알 수 있지만 각 레이어의 가중치를 복사하고 있습니다.

    스크래치 부터 Training



    또, 원논문은, Sports-1M 를 사용하고 있습니다만, 스크래치로부터 학습을 시험하기에는 규모가 컸기 때문에, UCF-11 라고 하는 작은 데이터 세트를 사용하고 있습니다. (개인적으로는 Video classification의 CIFAR-10의 위치로 인식하고 있습니다)

    이것으로 학습하면, 아래와 같이, 8할 정도의 결과가 나왔습니다. 학습 시간은 GTX 1080 탑재 수중 PC 이며 3시간 정도입니다.





    실행 방법은 여기 희귀 D 째. MD

    데이터 준비



    시행착오 시간을 가속화하기 위해 ffmpeg에서 정지영상으로 확장하여 동영상으로 가져오기 위한 Dataset 클래스를 만들었습니다. htps : // 기주 b. 이 m / 이케 야스 / c3d 짱 r / b ぉ b / 마s r / 치고 ts / u CF11. py

    또한 처음에는 CIFAR-10과 함께 32px 크기로 시도했습니다. 하지만, 이마이치 결과가 나오지 않고. 이것은, 인간의 눈으로 봐도, 해상도가 너무 낮아서 뭔가 모르기 때문에, 어쩔 수 없을까라고 생각합니다.

    Data augmentation



    그 외 파라미터를 논문에 맞추어 실행하면, 곧 main/accuracy 가 1이 되어, validation/accuracy 가 좋아지지 않고, 그리고 학습이 진행되면 validation/loss가 늘어나는, 과학습 상태가 되었습니다. 당초는, 거슬러 올라가서 Data augumentation 를 하지 않았기 때문에, 그것이 나빴던 것일 것이라는 것으로, 이하 3개의 Augumentation을 해 보았습니다.
  • Random Fliping (수평 반전)
  • Random Crop (조금 큰 이미지에서 영역을 무작위로 자르기)
  • Random Erase (일부 마스크)

  • 비교를 위해 모든 Data augmentation을 Off로 한 그래프를 아래에 게재합니다.

    과학 학습 그래프(Data augmentation 없음):




    방금 전의 그래프와 비교해, 완전하게 과학습하고 있어, 정밀도가 오르지 않은 것을 알 수 있습니다. 무엇보다 단순히 accuracy(Classification이므로 softmax_cross_entropy)를 비교해도 Data augmentation을 하지 않을 때와 그렇게 변하지 않는 것 같습니다. 다만, Loss 쪽은, 향상하고 있어 과학습이 어느 정도 해소하고 있는 것은 봐 잡을 수 있습니다.

    좋은 웹페이지 즐겨찾기