232525 / PureT

Implementation of 'End-to-End Transformer Based Model for Image Captioning' [AAAI 2022]
63 stars 12 forks source link

具体的加速方法 #26

Open ImaginationCreater opened 2 months ago

ImaginationCreater commented 2 months ago

你好啊,谢谢您的工作。由于运算资源有限。我想要将图片特征先提取出来,生成.npz文件。我有个疑问关于您在readMe里提到的如何获得.npz文件,并加速模型运行?请问您可以详细解释一下么,不胜感激。

232525 commented 2 months ago

简单来说就是预先把图像特征提取出来,对于原本模型,每张输入图像的大小为3*W*H。如果预先提取特征,此时每个图像被表示为1*L*D(L是特征的数量,D为特征维度),并且此时模型不需要backbone encoder部分,直接将图像特征送入到后续的模块中。这个时候模型训练相当于少了一整个SwinTransformer模型的forward,训练速度会快些。至于怎么提特征,可以参考repo里面的ICC分词预处理.ipynb,里面有相关的代码。提了特征之后需要对模型结构定义的代码和Dataset、DataLoader部分的代码进行修改,模型结构部分就是把SwinTransformer模型的定义部分去掉,数据读取部分的修改可以参考datasets路径下的coco_dataset_raw.pydata_loader_raw.py

ImaginationCreater commented 2 months ago

你好,感谢你的回复。我刚刚尝试了一下,但发现JSON_PATHS会报错,我目前没有代码中相应路径的json文件。我需要将相应路径改变为coco数据集相应的json文件吗?不知道哪里出了问题。期待您的回复,万分感谢。 image

232525 commented 2 months ago

是的,ICC分词预处理.ipynb是针对另一个数据集写的,你需要提取MSCOCO的特征的话得更换为COCO的json文件,json文件其实只是用来提供数据集里面图像的文件名和图像ID的,构造了dataset拿到文件名读取图像然后去提取特征。你如果用别的办法获取数据集所有图像的存储路径的话,也是可以的,遍历读取图像然后调用特征提取保存。

ImaginationCreater commented 2 months ago

好的,我明白了,万分感谢您的回复。我将根据您给的提示完成特征提取。再次感谢。