前言
这篇文章呢,论文本身只看懂一点点,再加上网上对这篇文章做解析的比较少,所以匆匆看完以后,就先来尝试复现代码了,我也不知道算不算复现成功,有机会用其他的视频试试。
提示:以下是本篇文章正文内容
一、论文
二、步骤
1.准备工作
首先搭建一个新的虚拟环境,Ubuntu 18.04.3 LTS, CUDA 10.0, Python 3.7.3, PyTorch 1.0.1(好像我安装的版本高一点,也没有影响),进入GitHub下载代码
2.读入数据
挨个运行:
wget http://dl.fbaipublicfiles.com/rhgao/ListenToLook/image_features.tar.gz
wget http://dl.fbaipublicfiles.com/rhgao/ListenToLook/audio_features.tar.gz
wget http://dl.fbaipublicfiles.com/rhgao/ListenToLook/imageAudio_features.tar.gz
解压上面三个文件,然后进入这个网址:地址下载一个.pth和两个.pkl文件(其实,这个三个文件和上面三个连接是一起的,不过我当时用电脑访问的时候,不知道为什么打不开页面,后来用手机去外面的网,才发现还有这几个文件,下载就行了)
3.修改pkl文件中的路径
这儿其实有点麻烦,因为我查了很久好像没有直接修改pkl文件的方法,读取出来的数据也是元组,python里元组好像不能直接修改,幸好是由两个列表构成的元组,我们需要修改的是第一个列表的元素: 我用的方法比较笨,虽然可以把列表里的元素遍历搜索地址前缀
‘private/home/rhgao/datasets/activitynet/imageAudio_features’
然后替换成自己的路径,但是数量比较多,最开始试了,没成功,可能是实验室电脑太老了。
所以就先把读出来的这些路径保存在记事本里,然后记事本直接替换,最后再读出来,放在一个新的列表里,并上之前的元组的第二个列表组成新的元组,然后重新写一个pkl。(方法比较老,如果有新颖的方法,麻烦告知,毕竟我也是小白),先把第一个列表读出来,复制粘贴记事本,替换,然后放进下面代码的list1里面:
import pickle
'''读'''
f = open('train.pkl','rb')
data = pickle.load(f)
list1 = []'''这儿写入新的路径就行,只有第一个列表,而且只修改路径前缀,即记事本里面的东西'''
temptuple = (list1,data[1])
f = open('newtrain.pkl', 'wb',0)
#对象写入文件
pickle.dump(temptuple,f)
f.close()
这儿文件成了newval.pkl和newtrain.pkl,记得改回原来的名字
4.修改命令中的路径
修改train_dataset_file、test_dataset_file和weights_audioImageModel的路径前缀,直接运行:
python main.py \
--train_dataset_file '/your_pickle_file_root_path/train.pkl' \
--test_dataset_file '/your_pickle_file_root_path/val.pkl' \
--batch_size 256 \
--warmup_epochs 0 \
--epochs 25 \
--lr 0.01 \
--milestones 15 20 \
--momentum 0.9 \
--decode_threads 10 \
--scheduler \
--num_classes 200 \
--weights_audioImageModel '/your_model_root_path/ImageAudioNet_ActivityNet.pth' \
--checkpoint_freq 10 \
--episode_length 10 \
--checkpoint_path './checkpoints/exp' \
--freeze_imageAudioNet \
--with_avgpool_ce_loss \
--compute_mAP \
--mean_feature_as_start \
--subsample_factor 1 \
--with_replacement |& tee -a logs/exp.log
训练结果,应该是训练成功了哒、、、、哒、、、、???
5.运行测试
老规矩,先修改test_dataset_file路径:
python validate.py \
--test_dataset_file '/your_pickle_file_root_path/val.pkl' \
--batch_size 256 \
--decode_threads 10 \
--scheduler \
--num_classes 200 \
--episode_length 10 \
--pretrained_model './checkpoints/exp/model_final.pth' \
--with_replacement \
--mean_feature_as_start \
--feature_interpolate \
--subsample_factor 1 \
--compute_mAP
运行结果:
总结
文章没咋看懂,复现倒是挺简单的,就是修改pkl文件路径的时候有点麻烦,奈何太菜,不会好的方法。我也不知道是不是运行成功了,最近重新看看文章和代码。