ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MMF的初步介绍:一个规范化的视觉-语言多模态任务框架

2021-06-07 11:35:07  阅读:398  来源: 互联网

标签:模态 mmf 训练 python 模型 yaml 参数 规范化 MMF


  在VQA, Image Caption等任务中,构建模型是一件工作量较大的工作。有没有什么能减少这些重复的工作量呢?与此同时,Pytorch,tensorflow等开源的深度学习工具包发布,大大减少了研究人员在构建模型上的重复工作。于是,有机构开始着手以Pytorch为基础,构建了VQA的框架。由Facebook AI Research实验室使用python语言,以pytorch为基础,编写的框架MMF解决了这个问题。同时,MMF不仅包括了VQA,还有其它的很多VL多模态任务,如Image Caption等。

  如何运行MMF框架

  MMF的官方代码在Github上可以看到,而且附带了大量的说明。同时,其官方网站https://mmf.sh/上也有较为详细的介绍。但是初学者很容易”乱花渐欲迷人眼“,所以我就根据自己以前运行MMF的一些经验教训,介绍几个重点的内容,方便小白入门理解。

 

 

 

  1. MMF框架是用python语言写成的,使用了大量Pytorch工具包中的代码。所以要顺利运行代码,需要一些python的基础知识。python是脚本语言,和C++、Java等语言有所不同,python是边解释边执行的。其本身并没有严格的一个”主程序入口“,也就是每一个文件理论上都可以执行。当然,为了规范,python还是会用一些语法规则模拟出一个主程序入口。如果工程中一个.py文件中有类似的如下语句,那么这个文件很大几率就是要运行的程序的入口,执行这个文件一般就可以运行程序。
    if __name__=="__main__":
        function()  #do something
  1. 深度学习模型是千变万化的,仅各种参数就有很多种组合,如果仅仅依靠执行一个文件不能灵活地满足实验中参数修改的需求。python提供了一种方便调整参数的方法,使用如下格式。当然,可修改的参数arg1,arg2,…,argn要在文件的代码中定义。
    python executeFile.py --arg1 arg2 ...
  2. 以上的方法还是有些不太灵活,python中还支持这样的方式:将参数配置,编写成能够被读取的.yaml格式的文件,例如default.yaml,dataset.yaml等。调用yaml配置文件的代码需要在文件中定义好。当训练时,执行程序通过调用存储在具体位置的yaml配置文件,从中获取参数配置,例如使用哪一种方式训练,使用哪一种数据集,迭代次数,batch_size等信息。这样,当训练计划有变时,我们只需要改变相应的yaml配置文件中的参数,执行同样的指令仍然可以实现程序的调整运行。该类型的指令如下:
    python configs/default.yaml  dataset=XXX train_val   '''类似的格式,不是完全符合'''
  3. 在mmf/setup.py中,对这种命令格式进行了进一步的打包,3中的指令,变为以下类型。在该更改中,会涉及到setuptools工具包,具体的使用说明请查阅该python工具包的文档。

    mmf_run configs/default.yaml  dataset=XXX train_val   '''类似的格式,不是完全符合'''

  如果你已经学习了python的一些基本的语法知识,同时了解以上几种python程序运行方式,那么你离成功运行程序成功前进了一大步。因为你知道了程序的入口,也就把握住了整体。

  下一步。就是为程序配置各种文件环境了。因为python程序的一大特点是有很多种封装好可下载的工具包,一些程序的编写离不开这些包的支持,所以你需要确认一下requirement.txt中的各种要求有没有满足,没有的要下载到正确的位置。这方面的知识,包括pytorch的安装使用,其它包的安装,如果包下载速度慢如何使用镜像网站资源进行快速下载,anaconda、cuda等的安装。这些问题各种网站上已经有详细的说明解答,我就不多说了。
  安装、配置好各种文件后,我们继续按照mmf的说明一步一步进行。

  下一步,就是mmf的直接运行,相关步骤在mmf的官方网站上写的已经比较清楚了:

 

  

  在Quickstart中,以运行VQA中经典的M4C模型为样例,通过在Linux的终端输入training下方的命令行,进行运行。

  注意,训练时会使用到很多参数,但以上的命令行中出现的config,dataset,model,run_type这些都是不可或缺的参数,而其它没有输入指明的,都是采用已经配置好的默认参数,这些参数可以在配置文件如 mmf/configs/defaults.yaml , mmf/configs/models/ 等位置中找到,并且可以通过修改这些数值更改默认选项。

 

   当然,你也可以在命令行中添加这些参数,让这一次的运行参数改变:

mmf_run config=projects/m4c/configs/textvqa/defaults.yaml \
    datasets=textvqa \
    model=m4c \
    run_type=train_val \
    training.batch_size=32 \
    training.max_updates=44000 \
    training.log_interval=10 \
    training.checkpoint_interval=100 \
    training.evaluation_interval=1000 \
   env.save_dir = /xxx/path_for_save_checkpoint_file \
checkpoint.resume_file = /xxx/path_for_load_specific_checkpoint_file
  

  运行前,最好把requirements.txt 文件中记录的python程序所需要的各种包一次下载好。

  输入Quickstart命令后,程序开始运行,首先要载入各种准备数据,评价结果的工具包,以及其它训练参数等。

  注意,模型训练需要的数据很大!(约64GB),虽然这个程序会在指定路径检测不到数据集的情况下自动下载数据,但是由于网络等问题,经常会下了半天中断又重新开始,所以建议最好先在本地找个可靠的网络,使用mmf/configs/zoo里面的配置文件中记录的数据集链接,进行下载,然后将压缩文件上传到配置文件configs/dataset中的指定路径下。

 

   后面是模型的载入,模型结构的输出,可以看出模型层数还是非常多的:

 

   打印模型的参数结构后,如果没有问题,模型就开始训练了。在当前调整后的参数下,程序总共迭代44000次,每100次打印结果,训练使用的m4c_decoding_bce_with_mask损失,即BCE二元交叉熵损失,每1000次保存checkpoints文件作为记录,同时计算当前训练参数下,模型在val验证集上的指标得分。一般来说,随着迭代次数的增加,损失loss整体下降。准确率等指标逐渐上升,就说明当前模型训练整体是正确的。

 

 

   我是在服务器上训练的模型,使用一块GTX2080的显卡,训练结果大约花费了11个小时。尾声阶段,可以看出训练的结果在验证集上的准确率39%左右,这个和M4C的论文Iterative Answer Prediction with Pointer-Augmented,CVPR2020 中提到的结果是基本一样的,这说明我们成功地复现了该模型的代码。

 

 

 

  该论文中,还有一个M4C(ours, w/ST-VQA)的情况,这个取得了更高的得分,需要在数据集中添加额外的ST-VQA作为辅助的训练数据集,具体的操作请查阅mmf文档,以及M4C模型多个更改好的配置文件。

 

标签:模态,mmf,训练,python,模型,yaml,参数,规范化,MMF
来源: https://www.cnblogs.com/townwilliam/p/14510471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有