美文网首页
Image Caption 的 Encoder - Attent

Image Caption 的 Encoder - Attent

作者: 天然呆_1d5d | 来源:发表于2019-12-12 16:36 被阅读0次

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


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

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

    一、模型输入数据

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

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

    (1)图像 \rightarrow HDF5文件:

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

    (2)词表 \rightarrow  WORDMAP文件:

            所谓的词表文件,格式为:"word":id

    WORDMAP内容展示

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

    WORDMAP内容展示

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

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

    (3)句子表示 \rightarrow  CAPTIONS文件:

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

    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.是为了归一化。

    今天就到这里咯!

    相关文章

      网友评论

          本文标题:Image Caption 的 Encoder - Attent

          本文链接:https://www.haomeiwen.com/subject/pmexvftx.html