在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数量即可。