在Windows10和Ubuntu16.4下均成功配置运行
FGFA-github上的源码:https://github.com/msracver/Flow-Guided-Feature-Aggregation DFF-github上的源码:https://github.com/msracver/Deep-Feature-Flow 本文权重文件均为Flow-Guided-Feature-Aggregation的,如需复现Deep Feature Flow,去GitHub下载相对应的权重文件。

一、 配置mxnet环境

首先创建名为mxnet的环境,注意本文使用的为Python2.7.

conda create -n mxnet python=2.7

然后根据GitHub上配置环境。

pip install Cython
pip install opencv-python==3.2.0.6
pip install easydict==1.6

GitHub上有这么一句话For Windows users, Visual Studio 2015 is needed to compile cython module,但是我下载的最新版本也可正常工作。

接下来git 一下论文源码,如出现下载太慢或没有Git的情况,百度解决有很多回答。

git clone https://github.com/msracver/Flow-Guided-Feature-Aggregation.git

然后cd进入文件夹目录下,对于Windows环境下运行 cmd .\init.bat. 对于Linux环境下运行 sh ./init.sh. 他会自动建立cython模型和一些文件夹。
我进行这步操作时报了这个错误:

“error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft
  Visual C++ Build Tools":

在下面这个网址找到了解决办法:error1

安装mxnet,安装官方文档中安装mxnet,需要的操作太过于繁琐,我直接利用了pip安装,最后也可以成功使用,其中mxnet的版本与cuda的版本相对应,我的为cuda10.0则在后面加上-100.

pip install mxnet-cu100

基本的环境已经配置完成。

二、 运行demo

首先我们下载需要的权重:
权重文件
提取码vhy9
将下载下来的权重文件按下面的目录存放

./model/rfcn_fgfa_flownet_vid-0000.params

然后在终端运行下述代码即可运行demo

python ./fgfa_rfcn/demo.py

运行时demo时出现的错误:

第一个错误:

mxnet.base.NotImplementedForSymbol: Function iadd (namely operator "+=")

我们找到发生错误的代码片段

aggregated_conv_feat += tiled_weight * warp_list[i]

把上述代码修改为下面形式即可

aggregated_conv_feat = aggregated_conv_feat + tiled_weight * warp_list[i]

第二个错误:

from bbox import bbox_overlaps_cython
ImportError: cannot import name bbox_overlaps_cython

网上的解决方法是运行一下sh init.sh,我当时试了试没有效果,然后说的是不能再anaconda3的环境下使用,我下载了anaconda2同样没能解决问题,最后发现是我在第一步时运行 cmd .\init.bat.出现了那个错误,把那个错误解决掉,这个错误也消失了,事实证明anaconda3,只要为Python2.7同样可以正常运行。

三、进行训练

首先要下载相应的数据集,官方代码上是利用 ILSVRC2015 DET 和 ILSVRC2015 VID两个数据集进行训练的,我只下载了ILSVRC2015 VID数据集。将下载好的VID数据集,按下面的目录排列。

./data/ILSVRC2015/
./data/ILSVRC2015/Annotations/VID
./data/ILSVRC2015/Data/VID
./data/ILSVRC2015/ImageSets

然后把预训练的ResNet-v1-101模型和模型下载下来,同样可以从第二步的百度云中下载,放到对应的位置。

./model/pretrained_model/resnet_v1_101-0000.params
./model/pretrained_model/flownet-0000.params

由于我们只下载了VID文件,所以需要修改Flow-Guided-Feature-Aggregation\experiments\fgfa_rfcn\cfgs下的fgfa_rfcn_vid_demo.yaml文件和resnet_v1_101_flownet_imagenet_vid_rfcn_end2end_ohem.yaml文件,找到dataset下的image_set,将对应的det删除只保留VID部分。

image_set: VID_train_15frames

下面在终端输入以下代码即可顺利进行训练:

python experiments/fgfa_rfcn/fgfa_rfcn_end2end_train_test.py --cfg experiments/fgfa_rfcn/cfgs/resnet_v1_101_flownet_imagenet_vid_rfcn_end2end_ohem.yaml

训练时出现的错误

第一个错误:

mxnet.base.MXNetError: [15:13:33]fail to open fgfa_rfcn_vid-0002.params

错误有点长,没有全部复制上去,这个错误需要修改experiments/fgfa_rfcn/fgfa_rfcn_end2end_train_test中的代码,取消掉注释,改成下列形式:

if __name__ == "__main__":
    train_end2end.main()
    test.main()

第二个错误:

TypeError: init_params() got an unexpected keyword argument 'allow_extra

这个是mxnet中的一个错误,我是训练了好久,突然中断出现了这个错误,打开这个文件/home/tsn/software/incubator-mxnet/python/mxnet/module/base_module.py, see the line 679,删去最后一行allow_extra=allow_extra修改为:

self.init_params(initializer=None,
 arg_params=arg_params, 
 aux_params=aux_params,
 allow_missing=allow_missing, force_init=force_init)

第三个错误:GPU的错误,因为服务器上只有两块,官方代码用了四块,因此修改一下Aggregation\experiments\fgfa_rfcn\cfgs下resnet_v1_101_flownet_imagenet_vid_rfcn_end2end_ohem.yaml文件中GPU数量即可。