Pytorch MMF 多模态框架介绍及问题汇总

MMF 多模态框架介绍及问题汇总

跨模态推理对人工智能至关重要。越来越需要对模态之间的交互进行建模(例如,视觉,语言),这样不仅能够改进AI对现有任务的预测能力,同时也能够发现新的应用点。

多模态AI问题包括视觉问答(visual question answering, VQA), 图像描述(image captioning)、 视觉对话(visual dialogue)、embodied AI、虚拟助手( virtual assistants)以及在社交媒体上检测不良内容(detecting hateful content on social media)。

更好的工具(对于研究人员提出新颖的想法以及对从业人员生产用例而言)都有可能加速多模式AI的发展。为此,Facebook AI Research(FAIR)新近开源了MMF(MultiModal Framework多模态框架) 这样一个视觉和语言多模态模块化框架。

这些内容出自Pytorch 团队在Medium上面对MMF的介绍,链接: 点这里.有兴趣的可以去看看MMF的官网,下面的安装也可以在官网中看到,碍于国内如果不翻Q可能进不去官网,在这里我就简要将官网内容进行翻译、整理,如有不当之处,以官网为准。

1.安装

官网要求提前安装好Python 3.7+ 和PyTorch 1.5.0,并推荐了两种安装方式,但是后面还是以source的方式为主

1.1 第一种方式 Install using pip

pip install --upgrade --pre mmf

这种方式主要是针对用户想要简单的安装完MMF,不关心后续MMF的新特性,同时这种方式适合只是将MMF作为库,不会在MMF中进行进一步开发的用户。

1.2 第二种方式 Install from source

从源代码安装的步骤如下:

git clone https://github.com/facebookresearch/mmf.git
cd mmf
pip install --editable .

在进行第三步前,最好看看MMF的Github资源中的requirements.txt,把里面需要提前安装好。需要特别强调的是torch一定要安装1.5.0版本的,具体是GPU还是CPU版都无所谓,但一定要是1.5.0,高一点的1.5.1不行哦。

1.3 Windows版本的Pytorch 1.5+

如果通过

pip install torch==1.5.0

会发现找不到对应的windows版,原因是pytorch并没有放出1.5+的windows版本给Pypi,当然如果是在Linux或是Mac上安装,是不存在这个问题的。
解决方法是通过官网提供的方式进行安装,直接进Pytorch官网,可以看到如图所示:
Pytoch官网截图
对于我们的需求,直接在conda Powershell中输入

pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html

当然这也要看你的CUDA装的是哪个版本的,更改相应的+cu10x就行,torchvision最好也换成0.6.0版本的,最新0.6.1好像是会报错。
如果想省点事,可以直接点击这里下载相应的windows版1.5.0 torch和0.6.0 torchvision
CUDA10.1 + torch1.5.0CUDA10.2 +torch1.5.0CPU + torch1.5.0
CUDA10.1 + torchvision 0.6.0CUDA10.2+ torchvision 0.6.0CPU + torchvision 0.6.0

2.MMF 多模态框架使用过程中问题汇总

这里的问题主要是在windows10下载安装、使用MMF时出现的问题。我在Ubuntu 18.04 LTS下面安装时没有出现这些问题。

2.1 AttributeError: module ‘enum’ has no attribute ‘IntFlag’

参考https://blog.csdn.net/weixin_41010198/article/details/87255393 ,直接通过

// 卸载掉enum34
pip uninstall enum34

卸载掉enum34就不会出现这个问题
但是在

pip install --editable .

缺出现ERROR: pysc2 3.0.0 requires enum34, which is not installed.
原因还是我们卸载掉了enum34,我还不知道会有什么后续影响以及解决办法,如果有知道的,还请告知。

2.2 OSError: [WinError 127] 找不到指定的程序。

在使用

mmf_run config=projects/m4c/configs/textvqa/defaults.yaml  datasets=textvqa  model=m4c  run_type=train_val

进行训练时出现了下面这个问题:

Traceback (most recent call last):
  File "X:\Anaconda3\envs\XXEnv\Scripts\mmf_run-script.py", line 33, in <module>
    sys.exit(load_entry_point('mmf', 'console_scripts', 'mmf_run')())
  File "X:\Anaconda3\envs\XXEnv\Scripts\mmf_run-script.py", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "X:\Anaconda3\envs\XXEnv\lib\site-packages\importlib_metadata\__init__.py", line 96, in load
    module = import_module(match.group('module'))
  File "X:\Anaconda3\envs\XXEnv\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "X:\mmf\mmf\mmf_cli\run.py", line 7, in <module>
    import torch
  File "X:\Anaconda3\envs\XXEnv\lib\site-packages\torch\__init__.py", line 81, in <module>
    ctypes.CDLL(dll)
  File "X:\Anaconda3\envs\XXEnv\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
  OSError: [WinError 127] 找不到指定的程序。

2.2.1问题分析

从MMF的源文件的代码中的setup.py中可以看到

if __name__ == "__main__":
    setuptools.setup(
       ///省略...
        entry_points={
            "console_scripts": [
                "mmf_run = mmf_cli.run:run",
                "mmf_predict = mmf_cli.predict:predict",
                "mmf_convert_hm = mmf_cli.hm_convert:main",
            ]
        },
    )

mmf_run 实际上使用的是mmf_cli.run:run,如果我们打断点跟进去会发下其实是在

from mmf.common.registry import registry

出现错误,那也就是MMF的库没有导入成功

根据报错可以看到最后是在

X:\Anaconda3\envs\XXEnv\lib\ctypes\__init__.py

的 self._handle = _dlopen(self._name, mode)卡住的。

这个错误一般是_dlopen没有找到需要的动态库,断点跟进去发现是加载’X:\Anaconda3\envs\XXEnv\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll’时出现错误,但电脑该目录下是有这个库的,那也就是说明caffe2_detectron_ops_gpu.dll库的版本不对,但这个目录中的文件是torch自己配置的,虽然官方也有可能出错,但毕竟概率比较小。然而搜了一圈,没想到还真是官方出了问题

import torch

提示

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "X:\Anaconda3\envs\XXEnv\lib\site-packages\torch\__init__.py", line 81, in <module>
    ctypes.CDLL(dll)
  File "X:\Anaconda3\envs\XXEnv\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 127] 找不到指定的程序。

2.2.2 Pytorch 1.4+升级到1.5+出现的问题

这个问题的解答可以从Pytorch Issue里面看到,参考peterjc123的回答,将

X:\Anaconda3\envs\XXEnv\Lib\site-packages\torch\__init__.py

替换为init.py
同时将conda进行更新,有可能是conda做虚拟化环境没有处理好的原因,参见Pytorch Issue,办法是:

conda update conda
conda update anaconda

替换之后可以看到import torch 成功
但是我这里有出现了scipy.parse无法识别,解决方法为

pip uninstall scipy
conda install scipy

可能的原因是scipy需要升级。
最后可以测试

from mmf.common.registry import registry
from mmf.utils.build import build_config, build_trainer
from mmf.utils.configuration import Configuration
from mmf.utils.distributed import distributed_init, infer_init_method
from mmf.utils.env import set_seed, setup_imports
from mmf.utils.flags import flags
from mmf.utils.logger import Logger

都可以成功

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值