情况:计算 FVD 时,使用 dataset-1 时运行成功,使用数据量(data size)更大的 dataset-2 时运行失败。报错OOM:显存溢出。
查找问题:比较两次计算时的 input video 的 data shape,发现成功的那个是:[2, 64, 224, 224, 3],失败的那个是:[2, 180, 224, 224, 3]。
注:shape各dim的含义是:[batch_size, num_frames, height, weight, depth]
发现不对劲:input 的 num_frame 的大小应该相同,都是 16。此处的 64 和 180 是 input vid 在 resize 前的 weight 大小。
找到原因:resize 时的 vid shape 没有调整好。要求 热size 的 input shape 是 [bs, t, h, w, c],而我的是 [bs, c, t, h, w]。例如,错误输入:[2, 3, 16, 144, 180] 的 resize 结果为 [2, 180, 224, 224, 3],而不是期待的 [2, 16, 224, 224, 3]。
解决方案:将 resize 前的 vid shape 用 tensor.permuter() 调好后,问题解决。
小结:所以,bs大小可能会造成显存溢出(OOM),而使用的数据量(data size)大小不会。起码此处不会。