pytorch-book icon indicating copy to clipboard operation
pytorch-book copied to clipboard

第十章图像描述中model.py和main.py的问题

Open Canadalynx opened this issue 6 years ago • 17 comments

我跑了main.py之后

可视化原始图片 + 可视化人工的描述语句

            raw_img = _data['ix2id'][indexes[0]]
            img_path = opt.img_path + raw_img
            raw_img = Image.open(img_path).convert('RGB')
            raw_img = tv.transforms.ToTensor()(raw_img)

            raw_caption = captions.data[:, 0]
            raw_caption = ''.join([_data['ix2word'][ii] for ii in raw_caption])
            vis.text(raw_caption, u'raw_caption')
            vis.img('raw', raw_img, caption=raw_caption)

            # 可视化网络生成的描述语句
            results = model.generate(imgs.data[0])
            vis.text('</br>'.join(results), u'caption')

以上部分的下面这两句 raw_caption = captions.data[:, 0] raw_caption = ''.join([_data['ix2word'][ii] for ii in raw_caption])

报错keyerror 我去网上搜了,只有类似问题,不过看起来是数据类型的问题 应该是因为ii想读的是标量,结果读到一个tensor?反正半懂不懂的我把它改成了 raw_caption = t.tensor(captions.data[:, 0],device='cpu').numpy()
然后model.py的以下部分(原文第59,60行)又报错,应该还是同样的问题 sentences, score = cap_gen.beam_search(img) sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences] 我在这两句之间改成了

sentences, score = cap_gen.beam_search(img)
        sentences1=[]
        for i in range(len(sentences)):
                 sentences1.append([])
                 for ii in sentences[i]:
                          a=ii.item()
                          sentences1[i].append(a)
sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences1]

结果跑通了,但是觉得大佬们肯定有更理论的解释和更高明的方法,希望大佬们指点下我这个菜鸡

Canadalynx avatar Sep 14 '18 07:09 Canadalynx

直接把 sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences1] 改为 sentences = [' '.join([self.ix2word[int(idx)] for idx in sent]) for sent in sentences1] 就好了

leejincheng avatar Sep 16 '18 09:09 leejincheng

@Canadalynx 楼主用@chenyuntc的demo跑出其给出的结果了吗?

leejincheng avatar Sep 16 '18 09:09 leejincheng

@Canadalynx 楼主用@chenyuntc的demo跑出其给出的结果了吗?

没有,我在实验室服务器训练了11个epoch 结果 一个 戴着 墨镜 的 女人 和 一个 戴着 墨镜 的 女人 走 在 道路 上 </EOS> 一个 戴着 墨镜 的 女人 和 一个 戴着 帽子 的 男人 走 在 道路 上 </EOS> 一个 戴着 墨镜 的 女人 和 一个 戴着 帽子 的 女人 走 在 道路 上 </EOS>

Canadalynx avatar Sep 17 '18 01:09 Canadalynx

直接把 sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences1] 改为 sentences = [' '.join([self.ix2word[int(idx)] for idx in sent]) for sent in sentences1] 就好了 太感谢了,有用。效果和idx.item()一样,我之前在for循环里头加,提示不行,脑残了。。。应该在前面加,太菜了😓

Canadalynx avatar Sep 17 '18 01:09 Canadalynx

请问一下你们的数据集是怎么搞到的 我好像下载不下来

TJJTJJTJJ avatar Sep 27 '18 08:09 TJJTJJTJJ

请问一下你们的数据集是怎么搞到的 我好像下载不下来

我用mega那个下的

Canadalynx avatar Sep 27 '18 09:09 Canadalynx

我那个链接一直打不开.... 这可咋整,哥们,可以分享一下,最近刚写完。

TJJTJJTJJ avatar Sep 29 '18 16:09 TJJTJJTJJ

我那个链接一直打不开.... 这可咋整,哥们,可以分享一下吗?最近刚写完。

TJJTJJTJJ avatar Sep 29 '18 16:09 TJJTJJTJJ

可以了,哥们,谢谢

TJJTJJTJJ avatar Sep 29 '18 16:09 TJJTJJTJJ

sentences = [' '.join([self.ix2word[idx.item()] for idx in sent]) for sent in sentences1] 也可以,int()我是第一次见

TJJTJJTJJ avatar Oct 02 '18 08:10 TJJTJJTJJ

sentences = [' '.join([self.ix2word[idx.item()] for idx in sent]) for sent in sentences1] 也可以,int()我是第一次见

谢拉,前面那个老哥回答的时候我就想到了

Canadalynx avatar Oct 02 '18 08:10 Canadalynx

@Canadalynx ,我20个epoch的结果是 一个 戴着 墨镜 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 </EOS> 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 </EOS> 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 站 在 道路 上 </EOS> 不知道作者是的结果怎么训练出来的,太神奇了,没有出现过裙子就。 @chenyuntc

TJJTJJTJJ avatar Oct 03 '18 04:10 TJJTJJTJJ

@Canadalynx ,我20个epoch的结果是 一个 戴着 墨镜 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 站 在 道路 上 不知道作者是的结果怎么训练出来的,太神奇了,没有出现过裙子就。 @chenyuntc 我感觉把图像特征放在第一个输入的向量,后面输入全是caption。模型其实根本不知道图里有啥吧。感觉有点类似小学的时候,老师给个开头,让造个句子差不多。但是作者10个epoch训练出的竟然符合图片。我也很好奇我们跑的和作者跑的有啥区别。。。

Canadalynx avatar Oct 03 '18 04:10 Canadalynx

作者给的代码只有一个epoch,所以有点怀疑作者是不是为了简单,删去了什么东西?

TJJTJJTJJ avatar Oct 03 '18 15:10 TJJTJJTJJ

大佬们可以给个完整的代码吗?发个pull request吧

GH1995 avatar Feb 21 '19 09:02 GH1995

python -m visdom.server执行的网页显示结果,有个显示的三句话的窗口,感觉就没怎么变过,这到底是怎么回事呢?

mymuli avatar Apr 20 '19 12:04 mymuli

我直接下的作者训练好的模型:照demo.ipynb里面运行结果 一个 穿着 西装 的 男人 和 一个 穿着 裙子 的 女人 站 在 道路 上 </EOS> 一个 穿着 西装 的 男人 搂 着 一个 穿着 裙子 的 女人 站 在 道路 上 </EOS> 一个 穿着 西装 的 男人 和 一个 穿着 黑色 裤子 的 女人 站 在 道路 上 </EOS>

xu-peng-7 avatar May 07 '19 09:05 xu-peng-7