python encoder decoder_Image Caption 的 Encoder – Attention – Decoder pytorch实现(一)

本文介绍了使用PyTorch实现的Image Caption模型,包括数据预处理、词表生成以及数据集对象化。通过HDF5文件存储压缩图像,创建WORDMAP词表并过滤低频词汇,使用CAPTIONS文件表示句子,以及在dataset.py中进行数据转换和归一化。模型处理图像和文本,为图像生成描述。
摘要由CSDN通过智能技术生成

https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Image-Captioning

首先要感谢这个在github上公开代码的大佬,很牛~

“站在巨人的肩膀上”,这里记录一下最近一段时间理解这个代码的心得体会。

wAAACwAAAAAAQABAEACAkQBADs=

一、模型输入数据

1、create_input_files.py + utils.py(create_input_files函数)

这两个东西,是用来生成输入模型的数据文件的,不是特别难理解,其中:

(1)图像

wAAACwAAAAAAQABAEACAkQBADs=HDF5文件:

由于直接输入图像会导致占用内存太多而降低效率(一般电脑都接受不了),所以要将图像都压缩存储在hdf5中,并在此过程中图像大小均被resize成(3,256,256),同时它也会记录每个图片有多少个描述句子,这里是5。

(2)词表

wAAACwAAAAAAQABAEACAkQBADs= WORDMAP文件:

所谓的词表文件,格式为:“word”:id。

wAAACwAAAAAAQABAEACAkQBADs=

WORDMAP内容展示

word是数据集文件中,所有描述句子的token,这里去掉了词频低于5的token;id是从1自增的。

wAAACwAAAAAAQABAEACAkQBADs=

WORDMAP内容展示

要注意的是:①这里会将、、、放在最后;②这里会将句子长度超过50的句子丢弃掉。

代表了缺省词,即没在词表中出现过的词;代表了生成句子的开始标识符,这里我的个人理解是:因为在生成第一个词时,需要有一个LSTM输入,为了固定这一个输入,就有了;代表了一个句子的结尾标识符,当LSTM的输出为符时代表句子生成结束;代表了空白填充符,为了使所有输入到LSTM的句子统一长度,我们可以填0的方法,所以在制作词表的时候,对应的id就是0。

(3)句子表示

wAAACwAAAAAAQABAEACAkQBADs= CAPTIONS文件:

我们有了词表,就可以根据当前句子中的词在词表中的id来表示一个句子了:

wAAACwAAAAAAQABAEACAkQBADs=

TEST_CAPTIONS_flickr30k_5_cap_per_img_5_min_word_freq.json

这里要注意的一个操作是,对于一张图片不足5句描述句的图片(假如一张图片只有3个描述句),这里会将随机从3个描述句中任意选择一个句子做填充,且要选择两次。

2、dataset.py

这个文件用来将数据集文件对象化!!

image在这里会经过一系列变化转换,变换为对模型训练更加友好的数据,其中包括一些归一化操作等。

这里有一个操作是 :

“`

img = torch.FloatTensor(self.imgs[i //self.cpi] /255.)

“`

//,是因为每5句话对应一张图片,255.是为了归一化。

今天就到这里咯!

https://www.jianshu.com/p/213b5b2b90c0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值