ZexinYan / Medical-Report-Generation

A pytorch implementation of On the Automatic Generation of Medical Imaging Reports.
199 stars 65 forks source link

Some question about the code #18

Open Liqq1 opened 1 year ago

Liqq1 commented 1 year ago

尝试复现了一下,发现有几个问题(不确定),如遇到相同问题,欢迎讨论。

1.class JsonReader

对于build_vocab.py中的class JsonReader,在构建vocab的时候是没有问题的,但在dataset.py中,self.caption[image_name],image_name已经是图像名称,而不需要像build_vocab.py中用key[序号]来取。

image

所以我认为在运行trainer.py->dataset.py的时候class JsonReader应该改为如下。实验结束也表明修改之后的 JsonReader才会构造出不是空的target。

class JsonReader(object):
    def __init__(self, json_file):
        self.data = self.__read_json(json_file)

    def __read_json(self, filename):
        with open(filename, 'r') as f:
            data = json.load(f)
        return data

    def __getitem__(self, item):
        return self.data[item]

    def __len__(self):
        return len(self.data)

2.Sentence LSTM

和issue #11 中所说的一样,要加上这句话不然状态没法更新只会输出同样的内容。

image

3.Word LSTM

这里的写法有点不太清楚,只能看到原先被注释掉的。 word_mask).sum() (0.9 ** word_index),这些的含义是什么?

image

4.Class MLC

image

感觉圈起来的那一句,应该返回的torch.topk的[0],[0]才是tensor中的内容,而[1]是序号。不知道这边我有没有理解错。

5.MSEloss

此代码中,在做多标签分类的时候用的是MSEloss(是可行的,但不知道是否和文中对应);而论文原文中所说的是交叉熵分类(感觉应该用sigmoid+BCELoss?)

6.图像的输入

文中提到会把image划分成多个region作为输入,但代码中直接使用的是原image(经过了transform操作中的RandomCrop);是直接讲划分成多个region理解为RandomCrop操作吗?还是有另外的操作方式,这里也不是很清楚。

davidhouse2023 commented 1 year ago

您好,请问您的代码跑通了嘛

Liqq1 commented 1 year ago

可以跑通

davidhouse2023 commented 1 year ago

前辈,想请假一下您这个用的是哪一版本的TensorFlow,我这里TensorFlow老是出问题跑不通

Liqq1 commented 1 year ago

这个代码是基于pytorch的吧😂

davidhouse2023 commented 1 year ago

class Logger(object):

def __init__(self, log_dir):
    """Create a summary writer logging to log_dir."""
    self.writer = tf.summary.FileWriter(log_dir)

def scalar_summary(self, tag, value, step):
    """Log a scalar variable."""
    summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)])
    self.writer.add_summary(summary, step)
    tf.summary.scalar(tag, value.cpu(),step)
    self.writer.flush()

这一块代码用到了TensorFlow,我这里老是出问题,跑不通,呜呜呜

Liqq1 commented 1 year ago

抱歉 我找不到当时跑的环境和文件了; 这个问题应该不大,可以根据报错定位一下哪里出错了。

davidhouse2023 commented 1 year ago

没关系,解决了,是因为版本问题改来改去改乱了(笑哭; 前辈,我想问一下,刚开始loss很大这个是正常的嘛

Liqq1 commented 1 year ago

应该还挺正常的;你可以跑完所有epoch看看结果,但结果应该是不会太好的,可以看看这篇博客; 我觉得可能代码部分存在一些小问题,但我还没有能力去完全修正/复现好😂

davidhouse2023 commented 1 year ago

好嘞明白,感谢感谢!

Liqq1 commented 1 year ago

如果想基于lstm,建议可以看看这个https://github.com/yangyan22/Medical-Report-Generation-TriNet 基于transformer的话,可以参考r2gen/r2gencmn.

davidhouse2023 commented 1 year ago

好的好的,感谢前辈指点

npcZhang commented 2 months ago

没关系,解决了,是因为版本问题改来改去改乱了(笑哭; 前辈,我想问一下,刚开始loss很大这个是正常的嘛

你好,我想请问下跑完之后评价指标在哪里看啊,比如bleu什么的