Accel is a fast, high accuracy video segmentation system, initially described in a CVPR 2019 paper. Accel is implemented as an extension of Deep Feature Flow, a video recognition framework released by MSR Asia in 2017.
Some notes:
Example visualizations
Deep Feature Flow DeepLab-18 Accel-18
This is an official implementation for Accel in MXNet. It is worth noting that:
© UC Berkeley and Microsoft, 2019. Licensed under the MIT License.
If you find Accel useful in your research, please consider citing:
@inproceedings{jain19,
Author = {Samvit Jain, Xin Wang, Joseph E. Gonzalez},
Title = {Accel: A Corrective Fusion Network for Efficient Semantic Segmentation on Video},
Conference = {CVPR},
Year = {2019}
}
@inproceedings{zhu17dff,
Author = {Xizhou Zhu, Yuwen Xiong, Jifeng Dai, Lu Yuan, Yichen Wei},
Title = {Deep Feature Flow for Video Recognition},
Conference = {CVPR},
Year = {2017}
}
training data | testing data | mIoU | time/image (Tesla K80) | |
---|---|---|---|---|
Deep Feature Flow(DeepLab, ResNet-v1-101, FlowNet) | Cityscapes train | Cityscapes val | 68.7 | 0.25s |
Accel-18(DeepLab, ResNet-v1-18, FlowNet) | Cityscapes train | Cityscapes val | 72.1 | 0.44s |
Accel-34(DeepLab, ResNet-v1-34, FlowNet) | Cityscapes train | Cityscapes val | 72.4 | 0.53s |
Accel-50(DeepLab, ResNet-v1-50, FlowNet) | Cityscapes train | Cityscapes val | 74.2 | 0.67s |
Frame-by-frame baseline(DeepLab, ResNet-v1-101) | Cityscapes train | Cityscapes val | 75.2 | 0.74s |
Accel-101(DeepLab, ResNet-v1-101, FlowNet) | Cityscapes train | Cityscapes val | 75.5 | 0.87s |
Running time is benchmarked on a single GPU (mini-batch size 1, key-frame duration length 5).
MXNet from the offical repository. We tested our code on MXNet@(commit 62ecb60). Due to the rapid development of MXNet, it is recommended to checkout this version if you encounter any issues. We may maintain this repository periodically if MXNet adds important feature in future release.
Python 2.7. We recommend using Anaconda2 as it already includes many common packages. We do not suppoort Python 3 yet, if you want to use Python 3 you need to modify the code to make it work.
Python packages might missing: cython, opencv-python >= 3.2.0, easydict. If pip
is set up on your system, those packages should be able to be fetched and installed by running
pip install Cython
pip install opencv-python==3.2.0.6
pip install easydict==1.6
For Windows users, Visual Studio 2015 is needed to compile cython module.
Any NVIDIA GPUs with at least 6GB memory should be OK
git clone https://github.com/SamvitJ/Accel.git
For Windows users, run cmd .\init.bat
. For Linux user, run sh ./init.sh
. The scripts will build cython module automatically and create some folders.
Install MXNet:
3.1 Clone MXNet and checkout to MXNet@(commit 62ecb60) by
git clone --recursive https://github.com/dmlc/mxnet.git
git checkout 62ecb60
git submodule update
3.2 Copy operators in $(ACCEL_ROOT)/dff_rfcn/operator_cxx
or $(ACCEL_ROOT)/rfcn/operator_cxx
to $(YOUR_MXNET_FOLDER)/src/operator/contrib
by
cp -r $(ACCEL_ROOT)/dff_rfcn/operator_cxx/* $(MXNET_ROOT)/src/operator/contrib/
3.3 Compile MXNet
cd ${MXNET_ROOT}
make -j4
3.4 Install the MXNet Python binding by
Note: If you will actively switch between different versions of MXNet, please follow 3.5 instead of 3.4
cd python
sudo python setup.py install
3.5 For advanced users, you may put your Python packge into ./external/mxnet/$(YOUR_MXNET_PACKAGE)
, and modify MXNET_VERSION
in ./experiments/dff_deeplab/cfgs/*.yaml
to $(YOUR_MXNET_PACKAGE)
. Thus you can switch among different versions of MXNet quickly.
Please download the Cityscapes dataset. Specifically, make sure to download the leftImg8bit_sequence_trainvaltest.zip package (324GB), which contains 30-frame snippets for each Cityscapes train / val / test example. This is a requirement for testing at keyframe intervals > 1.
In addition, download gtFine_trainvaltest.zip (241MB), which contains ground truth annotations.
Place the data in the data
folder under the root directory:
./data/cityscapes
./data/cityscapes/leftImg8bit_sequence/train
./data/cityscapes/leftImg8bit_sequence/val
./data/cityscapes/leftImg8bit_sequence/test
./data/cityscapes/gtFine/train
./data/cityscapes/gtFine/val
./data/cityscapes/gtFine/test
To evaluate Accel using our models, please download the following models, and place them under folder model/
:
Make sure the directory looks like this:
./model/rfcn_dff_flownet_vid-0000.params
./model/accel-18-0000.params
./model/accel-34-0000.params
./model/accel-50-0000.params
./model/accel-101-0000.params
Edit dff_deeplab/demo.py
to set path_demo_data
and path_demo_labels
. These should specify the path to the parent directories housing the Cityscapes sequence data and labels on your disk. For example:
path_demo_data = '/ebs/Accel/data/cityscapes/'
path_demo_labels = '/ebs/Accel/data/cityscapes/'
Run one of the following commands to evaluate Accel-x on the Cityscapes val data.
Default setting (Accel version 18, keyframe interval 1, num examples 10):
python ./dff_deeplab/demo.py
Custom setting (Accel version X, keyframe interval Y, num examples Z):
python ./dff_deeplab/demo.py --version 50 --interval 5 --num_ex 100
See dff_deeplab/demo.py
for other configurable runtime settings.
Please download the following models, and place them under folder ./model
:
Make sure the directory looks like this:
./model/rfcn_dff_flownet_vid-0000.params
./model/pretrained/deeplab-18-0000.params
./model/pretrained/deeplab-34-0000.params
./model/pretrained/deeplab-50-0000.params
./model/pretrained/deeplab-101-0000.params
Identify the config file for the model you wish to train. The config files are located under the directory experiments/dff_deeplab/cfgs/
, and contain the experiment blueprints for training particular models (e.g. Accel-18) on particular datasets (e.g. Cityscapes).
Edit the appropriate config file (e.g. accel_18_cityscapes_end2end_ohem.yaml
) to specify the GPU ids available for training on your machine. For example, if you are training on p2.8xlarge (an Amazon EC2 instance with 8 GPUs), set:
gpus: '0,1,2,3,4,5,6,7'
To train Accel, use the following command. For example, to train Accel-18 on Cityscapes, run:
python experiments/dff_deeplab/dff_deeplab_end2end_train_test.py \
--cfg experiments/dff_deeplab/cfgs/accel_18_cityscapes_end2end_ohem.yaml
The training log and model checkpoints will be saved under output/dff_deeplab/cityscapes/
.
All of our experiment settings (GPU ids, dataset config, training config, etc.) are specified in yaml config files at folder ./experiments/{deeplab,dff_deeplab}/cfgs
.
Please refer to our code and config files for more details.
Accel was tested on:
Deep Feature Flow was tested on:
For common errors, please see the Deep Feature Flow FAQ.