MAttNet源码攻坚
Training
- Prepare the training and evaluation data by running
tools/prepro.py
:
python tools/prepro.py --dataset refcoco --splitBy unc
prepro.py脚本
- 289行:
if __name__ == '__main__':
,__name__
是Python脚本
的内置属性变量,这行语句的意思是只有当该脚本被直接执行时(区别于被其他脚本import调用)后面的语句才会被执行。 - 291-303行:
argparse是一个Python模块:命令行选项、参数和子命令解析器。 主要有三个步骤:
创建 ArgumentParser() 对象:parser = argparse.ArgumentParser()
调用 add_argument() 方法添加参数:parser.add_argument('--output_json', default='data.json', help='output json file')
使用 parse_args() 解析添加的参数:args = parser.parse_args()
- 第304行:
params = vars(args)
将对象转换成字典
举个例子:
>>> a.__dict__
{}
>>> vars(a)
{}
>>> a.name = 'Kim'
>>> a.__dict__
{'name': 'Kim'}
>>> vars(a)
{'name': 'Kim'}
- 主函数main先是进一步确定了几个参数,新建了存储
cache/prepro/dataset_splitBy
的文件夹
第247行sys.path.insert(0, 'pyutils/refer')
sys.path是python的搜索模块的路径集,是一个list.添加相关的路径,但在退出python环境后自己添加的路径就会自动消失!这样就可以直接importpyutils/refer
下面的模块。
第248行import refer.py中的REFER类模块之后,249行对REFER类进行了一个实例化。
251-254行创建词汇表,使用了build_vocab()
函数;