acherstyx / CoCap

[ICCV 2023] Accurate and Fast Compressed Video Captioning
https://arxiv.org/abs/2309.12867
MIT License
33 stars 4 forks source link

您好,我想请教下实验设置的问题 #10

Closed myccver closed 6 months ago

myccver commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

acherstyx commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

myccver commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

acherstyx commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

acherstyx commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

@myccver 另外SwinBERT的代码中,也没有看到使用validation set的迹象,我check到这里,在构建数据集的时候只有is_train=True or False两种选项。不知道您上面说的SwinBERT使用了这一划分是基于哪里的说明?

myccver commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

我看了下,https://github.com/microsoft/UniVL 是在MSRVTT_train.9k.csv训练的,没有验证集。我们使用的是标准的MSRVTT_train.7k.csv。 image image 可以参考‘’CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip‘’这篇文章4.1部分对MSR-VTT的介绍

myccver commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

@myccver 另外SwinBERT的代码中,也没有看到使用validation set的迹象,我check到这里,在构建数据集的时候只有is_train=True or False两种选项。不知道您上面说的SwinBERT使用了这一划分是基于哪里的说明?

swinbert的数据是明确了对验证集的划分的,如图 image 我也跑过在MSR-VTT上的训练代码,是在验证集上验证的

acherstyx commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

我看了下,https://github.com/microsoft/UniVL 是在MSRVTT_train.9k.csv训练的,没有验证集。我们使用的是标准的MSRVTT_train.7k.csv。 image image 可以参考‘’CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip‘’这篇文章4.1部分对MSR-VTT的介绍

CLIP4Clip是在video retrieval上的文章,其中的数据集划分是和video caption的历史工作不一样的。UniVL同理,在1k-A测试的的是retrieval任务,caption任务使用的是不一样的划分。在caption任务上并没有先在validation数据上进行测试。

acherstyx commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

@myccver 另外SwinBERT的代码中,也没有看到使用validation set的迹象,我check到这里,在构建数据集的时候只有is_train=True or False两种选项。不知道您上面说的SwinBERT使用了这一划分是基于哪里的说明?

swinbert的数据是明确了对验证集的划分的,如图 image 我也跑过在MSR-VTT上的训练代码,是在验证集上验证的

可以确定的是caption任务上确实存在validation set的划分,我对此并没有疑问。但是从release的代码中,包括其他几个工作,并没有看出会先使用validation set做验证,所以我们认为在比较上并不存在不公平。

myccver commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

我看了下,https://github.com/microsoft/UniVL 是在MSRVTT_train.9k.csv训练的,没有验证集。我们使用的是标准的MSRVTT_train.7k.csv。 image image 可以参考‘’CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip‘’这篇文章4.1部分对MSR-VTT的介绍

CLIP4Clip是在video retrieval上的文章,其中的数据集划分是和video caption的历史工作不一样的。UniVL同理,在1k-A测试的的是retrieval任务,caption任务使用的是不一样的划分。在caption任务上并没有先在validation数据上进行测试。

UniVL也是在9k上进行caption 任务,如图: 1709732885(1) 当然,也在9k上进行了retrieval任务,如图: 1709732963(1)

acherstyx commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

我看了下,https://github.com/microsoft/UniVL 是在MSRVTT_train.9k.csv训练的,没有验证集。我们使用的是标准的MSRVTT_train.7k.csv。 image image 可以参考‘’CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip‘’这篇文章4.1部分对MSR-VTT的介绍

CLIP4Clip是在video retrieval上的文章,其中的数据集划分是和video caption的历史工作不一样的。UniVL同理,在1k-A测试的的是retrieval任务,caption任务使用的是不一样的划分。在caption任务上并没有先在validation数据上进行测试。

UniVL也是在9k上进行caption 任务,如图: 1709732885(1) 当然,也在9k上进行了retrieval任务,如图: 1709732963(1)

Please refer to the code at here.

myccver commented 6 months ago

在您提供的代码中,您似乎没有用验证集验证?例如在您的MSVD_caption.json文件中似乎只有train和test的split划分。如果用测试集挑选最合适的训练权重是否有些不公平?三个数据集上似乎都没有用验证集去验证。期待您的回复

Hello! MSVD似乎并没有validation set的划分。在同等都不使用验证集的情况下我们去比较是没有问题的。如果有工作使用validation的话可以share一下,我们核对下实验设置。

例如SwinBERT,HMN等一系列代码都划分过。可以说,最近的video captioning的代码都是用到了验证集。您的论文里也写了: We adopt the standard split, which involves using 1, 200 videos for training, 100 videos for validation, and 670 videos for testing. 剩余两个数据集MSRVTT和VATEX也是有验证集的。

其他工作还没有确认过是否有先使用validation set做验证,但是例如在UniVL中,就直接在test set上做的评估,code is here

@myccver 另外SwinBERT的代码中,也没有看到使用validation set的迹象,我check到这里,在构建数据集的时候只有is_train=True or False两种选项。不知道您上面说的SwinBERT使用了这一划分是基于哪里的说明?

swinbert的数据是明确了对验证集的划分的,如图 image 我也跑过在MSR-VTT上的训练代码,是在验证集上验证的

可以确定的是caption任务上确实存在validation set的划分,我对此并没有疑问。但是从release的代码中,包括其他几个工作,并没有看出会先使用validation set做验证,所以我们认为在比较上并不存在不公平。

我相信您并不是主观忽略了验证集,但是如果论文里对比方法的模型权重是基于验证集选择并在测试集上测试,我认为客观上直接比较是不公平的,因为没有处于同样的设置。您论文中的表格1里涉及到的开源代码SwinBERT,HMN以及SGN的确都用到了验证集。我认为Univl也使用了验证集,因为valid和test都属于直接在视频上推理,使用同一个方法没问题,mode是可以选择的。请参考这里 https://github.com/microsoft/UniVL/blob/8db88f391cf4247ffab328c201261c8e8bd6cdd6/main_task_caption.py#L637

acherstyx commented 6 months ago

UniVL并没有使用验证集:code is here,请以实际代码为准。另外在SwinBERT的training loop中没有看到有单独先在SwinBERT上测试的痕迹,如果有请指出。但在HMN/SGN的代码中,我们确实看到了现在validation上进行测试,最后在test set上进行验证。这一点上,各个工作之间并没有统一,并且这一问题对最终效果的影响有限,我认为这并不影响最后效果的比较。

myccver commented 6 months ago

在SwinBERT的官方训练日志里有所体现: a5158d742eb026b08249faa75f9cfb2 日志位置在 052fa01a35e31055e840e15f227be49 不管怎么说,我认为直接对着测试集调参确实容易些。在验证集上表现最优的模型不一定在测试集上表现最好。虽然可能如你所说,对最终效果影响有限,但建议还是在验证集上筛选模型规范些。

acherstyx commented 6 months ago

我认为这并不能说明SwinBERT是以validation set上最好的模型在test set上评估的,以log中的信息来推断实验设置很不严谨,请以实际代码中training loop的逻辑为准。

myccver commented 6 months ago

我认为这并不能说明SwinBERT是以validation set上最好的模型在test set上评估的,以log中的信息来推断实验设置很不严谨,请以实际代码中training loop的逻辑为准。

ok,非常感谢您的耐心回复。我将关闭这个issue