pytorch-vsumm-reinforce
이 레포지토리는 AAAI'18 논문인 Deep Reinforcement Learning for Unsupervised Video Summarization with Diversity-Representativeness Reward의 Pytorch 구현을 담고 있습니다. 원래 Theano 구현은 여기에서 찾을 수 있습니다.
<div align="center">
<img src="https://raw.githubusercontent.com/KaiyangZhou/pytorch-vsumm-reinforce/HEAD/imgs/pipeline.jpg" alt="train" width="80%">
</div>
주요 요구사항은 pytorch (v0.4.0)와 python 2.7입니다. 시스템에 설치되어 있지 않을 수 있는 일부 종속성으로는 tabulate와 h5py가 있습니다. 누락된 다른 종속성도 설치해 주십시오.
시작하기 (Get started)
- 전처리된 데이터셋 다운로드
git clone https://github.com/KaiyangZhou/pytorch-vsumm-reinforce
cd pytorch-vsumm-reinforce
...
업데이트: QMUL 서버에 접속할 수 없습니다. 데이터셋은 이 google drive 링크에서 다운로드하십시오.
- 분할 생성 (Make splits)
python create_split.py -d datasets/eccv16_dataset_summe_google_pool5.h5 --save-dir datasets --save-name summe_splits --num-splits 5
결과적으로 데이터셋이 무작위로 5회 분할되며, 이는 json 파일로 저장됩니다.
학습 및 테스트 코드는 main.py에 작성되어 있습니다. 자세한 인수는 python main.py -h를 실행하여 확인할 수 있습니다.
학습 방법 (How to train)
python main.py -d datasets/eccv16_dataset_summe_google_pool5.h5 -s datasets/summe_splits.json -m summe --gpu 0 --save-dir log/summe-split0 --split-id 0 --verbose
테스트 방법 (How to test)
python main.py -d datasets/eccv16_dataset_summe_google_pool5.h5 -s datasets/summe_splits.json -m summe --gpu 0 --save-dir log/summe-split0 --split-id 0 --evaluate --resume path_to_your_model.pth.tar --verbose --save-results
만약 --save-results 인자가 활성화되면, 결과는 --save-dir로 지정된 폴더 아래의 results.h5에 저장됩니다. score 대 gtscore를 시각화하려면 다음을 간단히 수행하세요:
python visualize_results.py -p path_to/result.h5
플롯 (Plot)
각 에포크(epoch)에서 얻은 보상(reward)을 플롯할 수 있는 코드를 제공합니다. 평균 보상을 플롯하려면 parse_log.py를 사용하세요:
python parse_log.py -p path_to/log_train.txt
플롯된 이미지는 다음과 같을 것입니다.
<div align="center">
<img src="https://raw.githubusercontent.com/KaiyangZhou/pytorch-vsumm-reinforce/HEAD/imgs/overall_reward.png" alt="overall_reward" width="50%">
</div>
특정 비디오에 대한 에포크 보상 곡선(epoch-reward curve)을 플롯하고 싶다면 다음을 수행하세요:
python parse_json.py -p path_to/rewards.json -i 0
다음과 같은 이미지를 얻게 됩니다.
<div align="center">
<img src="https://raw.githubusercontent.com/KaiyangZhou/pytorch-vsumm-reinforce/HEAD/imgs/epoch_reward_0.png" alt="epoch_reward" width="30%">
<img src="https://raw.githubusercontent.com/KaiyangZhou/pytorch-vsumm-reinforce/HEAD/imgs/epoch_reward_13.png" alt="epoch_reward" width="30%">
<img src="https://raw.githubusercontent.com/KaiyangZhou/pytorch-vsumm-reinforce/HEAD/imgs/epoch_reward_15.png" alt="epoch_reward" width="30%">
</div>
모든 학습 비디오에 대한 에포크 보상 곡선을 시각화하려면 parse_json.sh를 사용해 보세요. 용도에 맞게 코드를 수정하세요.
요약 시각화 (Visualize summary)
summary2video.py를 사용하여 이진 형태의 machine_summary를 실제 요약 비디오로 변환할 수 있습니다. 이때 영상 프레임이 포함된 디렉터리가 필요합니다. 해당 코드는 지정된 프레임 속도(frame rate)에 맞춰 자동으로 요약 프레임을 비디오 파일로 작성해 줍니다. 다음 명령어를 사용하여 .mp4 비디오를 생성하세요.
python summary2video.py -p path_to/result.h5 -d path_to/video_frames -i 0 --fps 30 --save-dir log --save-name summary.mp4
이 링크에서 설명하는 대로 비디오 프레임의 명명 형식을 지정하는 것을 잊지 마세요.
사용자 데이터 사용 방법 (How to use your own data)
저희는 비디오에 대한 이미지 특징(image features)을 추출하여 데이터를 전처리하고 이를 h5 파일로 저장합니다. 파일 형식은 여기와 같습니다. 그 후, create_split.py를 통해 데이터를 분할할 수 있습니다. 전체 데이터셋을 사용하여 정책 네트워크(policy network)를 학습시키고 싶다면, 단순히 train_keys = dataset.keys()만 실행하면 됩니다. 여기가 데이터셋을 초기화하는 코드입니다. 문제가 발생하면 이메일로 연락하거나 issue를 제기해 주십시오.
인용 (Citation)
@article{zhou2017reinforcevsumm,
title={Deep Reinforcement Learning for Unsupervised Video Summarization with Diversity-Representativeness Reward},
author={Zhou, Kaiyang and Qiao, Yu and Xiang, Tao},
...