MEGA视频目标检测

MEGA视频目标检测,第1张

MEGA作为视频目标检测的优秀model,其采用的多帧特征融合以及长时记忆模块都是比较经典的,首先贴张对比图:

可以看出,MEGA在视频目标检测中的mAP还是不错的(当然跟单帧目标检测无法比较)。
本文旨在研究一些MEGA项目中的细节以及记录一些遇到的问题。

编译跑通MEGA

原作者用的是pytorch1.3+cuda10来实现的MEGA,但本文用的却是30系显卡,编译时是会出现一些问题,接下来会一边讲解过程一边解决遇到的一些问题。(若有20系显卡则不需要担心这些问题)
原项目代码:MEGA
编者用的是pycharm专业版来管理项目,在github上下载好项目解压后使用pycharm打开,接下来的 *** 作命令都是在终端中进行。
首先我们先按照原作者INSTALL.md上的教程建立一个虚拟环境,并安装需要的包:

conda create --name MEGA -y python=3.7#
source activate MEGA
conda install ipython pip

# mega and coco api dependencies
pip install ninja yacs cython matplotlib tqdm opencv-python scipy

在安装pytorch的时候,原作者是这样的:

conda install pytorch=1.3.0 torchvision cudatoolkit=10.0 -c pytorch

但实际上使用cuda11.0+pytorch1.7也可以编译跑通,所以在这一步我们将其替换成:

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch

然后就是作者使用到的coco数据集和cityperson数据集的安装:

# install pycocotools
cd $INSTALL_DIR
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build_ext install

# install cityscapesScripts
cd $INSTALL_DIR
git clone https://github.com/mcordts/cityscapesScripts.git
cd cityscapesScripts/
python setup.py build_ext install

但编者没有使用到这些数据集,所以这一步跳过,将使用到这些数据集的代码处注释掉即可。
安装apex:(可省略)

git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext

实际上原作者并没有使用到apex来进行混合精度训练,这一步也可省略,若省略的话在代码中需要修改几处地方:
首先是mega_core\engine\trainer.py中的109行开始:

        # with amp.scale_loss(losses, optimizer) as scaled_losses:
        # scaled_losses.backward()
        losses.backward()

以及开头导入apex包注释掉:

# from apex import amp

还有tools/train_net.py中33行-36行:

# try:#33行-36行注释掉
#     from apex import amp
# except ImportError:
#     raise ImportError('Use APEX for multi-precision via apex.amp')

50行:

    use_mixed_precision = cfg.DTYPE == "float16"
    amp_opt_level = 'O1' if use_mixed_precision else 'O0'
    # model, optimizer = amp.initialize(model, optimizer, opt_level=amp_opt_level)

这样应该就可以了。
MEGA中还涉及到C++的编译,所以需要下载VS2019,打开其安装器,只安装单个组件即可,例如我安装的是:
最新的Windows 10 SDK
MSVC v142 - VS2019 C++ x64/x86 Spectre - 缓解库(v14.29)
MSVC v142 - VS2019 C++ x64/x86 生成工具(v14.29)
然后在控制台中输入以下四行(每输入一行回车一下):

 set "VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual
 Studio19\Community\VC\Auxiliary\Build"#请指向自己VS2019的路径
 set CMAKE_GENERATOR=Visual Studio 16 2019 Win64
 set DISTUTILS_USE_SDK=1
 call "%VS150COMNTOOLS%\vcvarsall.bat" x64 -vcvars_ver=14.29#请输出自己生成工具的版本号

然后在终端中编译项目:

python setup.py build develop

这时应该就可以编译成功了。(编译成功后才可以run项目)
下篇会讲讲如何用MEGA训练自己的方法以及数据集,数据集类别可以是原作者中的30个类别其中之一也可以不在30个类别之中。

遇到的问题:

1.cpp_extension.py:237: UserWarning: Error checking compiler version for cl: ‘utf-8’ codec can’t decode byte 0xd3 in position 0: invalid continuation byte
解决:修改cpp_extension.py文件。ctrl+左键点击终端中的文件,会跳转打开其文件,将其中 compiler_info.decode() 改为 compiler_info.decode(‘gbk’)。
deform_pool_cuda.cu(42): error: identifier “AT_CHECK” is undefined
解决:
在mega_core/csrc/cuda/deform_conv_cuda.cu 和 mega_core/csrc/cuda/deform_pool_cuda.cu文件的开头加上如下代码:

#ifndef AT_CHECK
#define AT_CHECK TORCH_CHECK 
#endif

如图所示:

3.nvcc fatal : Unsupported gpu architecture ‘compute_86‘
cuda与pytorch不匹配的问题,若是算力低了则降低pytorch和cuda的版本,若像编者一样30系显卡无法用cuda10系列这种情况,可以先降低算力,在终端中输入:export TORCH_CUDA_ARCH_LIST="7.5"

若大家还遇到其他的问题欢迎在评论区留言,我有时间会一一解答;若问题较多人遇到我会将其更新在本文末。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/723591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存