apple / ml-neuman

Official repository of NeuMan: Neural Human Radiance Field from a Single Video (ECCV 2022)
Other
1.27k stars 142 forks source link

CUDA out of memory error #70

Open V01d666 opened 1 year ago

V01d666 commented 1 year ago

作者你好! 我试着用自定义的视频过一遍pipeline, 在预处理过程的最后一步(smpl优化)提示cuda out of memory(下图一), 起初以为是显存不够(GTX 1080Ti), 但是我又试着用bike citron这两个已有的数据进行实验, 却一切正常, 显存占用4到5G左右(下图二, 三). 请问我是否遗漏了某些细节, 有什么好的建议吗? 第一次发issue, 请多指教! image image image

jiangwei221 commented 1 year ago

图像的分辨率是720P吗? 也许是这个issue?:https://discuss.pytorch.org/t/how-does-reserved-in-total-by-pytorch-work/70172

V01d666 commented 1 year ago

图像的分辨率是720P吗? 也许是这个issue?:https://discuss.pytorch.org/t/how-does-reserved-in-total-by-pytorch-work/70172

感谢作者的快速回复! 我这边目前的情况是这样的:

  1. 昨天发完issue后我又做了一些尝试, 我把主页上citron演示视频左上角的training video单独录屏下来(如有不妥随时可删)命名为citron_test又跑了一遍预处理的pipeline, 结果一切正常. citron_test提取出来的帧数大概是原来的一半, 图片尺寸也更小, 预处理最后一步GPU占用大概在2到3G.
  2. 随后我参考 https://github.com/apple/ml-neuman/issues/33 的内容使用train.py对预处理后的数据进行训练, 然后又出现了cuda out of memory, 我按照 https://github.com/apple/ml-neuman/issues/38 中的设置对batch进行了调整, 目前正在训练中, 暂时没有更多信息. 在最开始遇到显存问题的时候我也考虑过batch size的问题, 不过当时好像没看到预处理代码有能调整batch的参数, 于是作罢.
  3. 关于图像分辨率的问题, 我刚好也做一个补充. 我的自定义视频来源是: https://www.pexels.com/video/a-woman-dancing-while-crossing-the-street-8929388/, 视频的信息和对应的output/images第一张图片的信息如下图, 本来是打算模仿主页的视频自己拍一段, 不过目前是一个人所以暂时还拍不了. 因为citron和citron_test都可以完美运行而自定义视频则会出现显存问题, 所以我感觉不太像是代码或者设备的问题. 除了上面提到的分辨率, 我在想自定义视频会不会对景深或者运镜等条件有隐性的要求, 之后有机会我再自己拍一段视频验证一下. image image
jiangwei221 commented 1 year ago
  1. 预处理最后一步的batch size是1,没法再小了
  2. 这段视频说实话感觉能用Colmap重建出来,唯一的问题是竖屏不是横屏?不知道colmap那有没有问题?如果问题一直出在最后一步的话,可以把图片缩放到1280x720.
V01d666 commented 1 year ago
  1. 预处理最后一步的batch size是1,没法再小了
  2. 这段视频说实话感觉能用Colmap重建出来,唯一的问题是竖屏不是横屏?不知道colmap那有没有问题?如果问题一直出在最后一步的话,可以把图片缩放到1280x720.

colmap的话我记得应该是在第三步sparse scene reconstruction那里, 我用自定义视频跑的时候是没问题的. 哦对了, 我一开始是想单独研究human的nerf, 当时图省事就先用了UBC_fashion的数据集 (竖屏, 白色背景, 模特原地转动)试了下, 图片是按照第一步extract video frames里面默认的1280*720尺寸处理, 结果在colmap mapper那一步报了个failed to create sparse model的错, 情况和 https://github.com/apple/ml-neuman/issues/32 有点像. 后来把图片尺寸换成原始尺寸这一步就没问题了, 然而又在后面的masks for rectified images那一步报错, 不得已才换成了上面那个视频. 前面说的可能跟这次的issue无关, 很多地方没有控制变量也不好下结论, 权当记录一下吧. 上一次拜读neuman也是很久以前了, 最近才开始针对自定义数据进行复现, 文章的细节和用到的第三方库可能还是需要继续了解一下. 等这段时间忙完了我再自己拍一段视频测试一下, 到时候在这里反馈, 如果新视频ok的话这个issue就可以关了, 后面有其他的问题可能会另开issue, 祝作者事业有成 ;-)

jiangwei221 commented 1 year ago

谢谢!也祝你研究顺利! NeuMan其实要求camera最好有一定的运动,这样才能重建出背景,从而decouple人和背景。 所有的预处理跑完了,建议尝试可视化一下预处理结果,确保人的scale和camera轨迹没有太离谱。

V01d666 commented 1 year ago

谢谢!也祝你研究顺利! NeuMan其实要求camera最好有一定的运动,这样才能重建出背景,从而decouple人和背景。 所有的预处理跑完了,建议尝试可视化一下预处理结果,确保人的scale和camera轨迹没有太离谱。

作者你好! 这段时间我试着使用自己的视频数据过了一遍pipeline, 训练过程中没有报错, 但是训练的结果出现了一些问题.

  1. 在训练人体NeRF的时候得到的结果质量不高(下图一), 我在训练前调整了samples_per_ray=64, rays_per_batch维持不变, 不知道这是否会影响到训练的结果? 另外训练速度较慢, 在单卡1080ti上每秒大概只能跑到一轮多一点. 另外我注意到在场景NeRF的训练中使用了DP, 因此可以利用多卡算力, 而在人体NeRF的训练部分我尝试过修改代码, 但是似乎只能用到一张卡, 请问我是否遗漏了某些细节?
  2. 在场景和人体NeRF分别训练完毕之后我尝试使用render_reposing.py进行novel pose的合成, 然而结果中只渲染出了场景, 没有看到人体(下图二), 这是否代表人体NeRF训练失败了? 作者对此有什么好的建议吗?
  3. 之后我尝试使用自定义视频的背景结合bike_human的人体模型进行渲染, 结果图片显示全灰(下图三), 这是否意味着两者之间的某种格式或者是尺寸不匹配? 由于跑出结果的时候已经很晚, 目前寝室已经断电, 因此我无法继续对代码进行分析, 暂且先通过issue反馈一下, 之后我会试着自己去解决问题, 如果作者能给出一些建议的话那将非常感激不尽! human out_0000 out_0000
hrx20000209 commented 1 year ago

谢谢!也祝你研究顺利! NeuMan其实要求camera最好有一定的运动,这样才能重建出背景,从而decouple人和背景。 所有的预处理跑完了,建议尝试可视化一下预处理结果,确保人的scale和camera轨迹没有太离谱。

作者你好! 这段时间我试着使用自己的视频数据过了一遍pipeline, 训练过程中没有报错, 但是训练的结果出现了一些问题.

  1. 在训练人体NeRF的时候得到的结果质量不高(下图一), 我在训练前调整了samples_per_ray=64, rays_per_batch维持不变, 不知道这是否会影响到训练的结果? 另外训练速度较慢, 在单卡1080ti上每秒大概只能跑到一轮多一点. 另外我注意到在场景NeRF的训练中使用了DP, 因此可以利用多卡算力, 而在人体NeRF的训练部分我尝试过修改代码, 但是似乎只能用到一张卡, 请问我是否遗漏了某些细节?
  2. 在场景和人体NeRF分别训练完毕之后我尝试使用render_reposing.py进行novel pose的合成, 然而结果中只渲染出了场景, 没有看到人体(下图二), 这是否代表人体NeRF训练失败了? 作者对此有什么好的建议吗?
  3. 之后我尝试使用自定义视频的背景结合bike_human的人体模型进行渲染, 结果图片显示全灰(下图三), 这是否意味着两者之间的某种格式或者是尺寸不匹配? 由于跑出结果的时候已经很晚, 目前寝室已经断电, 因此我无法继续对代码进行分析, 暂且先通过issue反馈一下, 之后我会试着自己去解决问题, 如果作者能给出一些建议的话那将非常感激不尽! human out_0000 out_0000

您好!请问您解决了多卡训练这个问题吗?我现在跑human NeRF也是很慢,预计训练完成要400多个小时。

V01d666 commented 1 year ago

谢谢!也祝你研究顺利! NeuMan其实要求camera最好有一定的运动,这样才能重建出背景,从而decouple人和背景。 所有的预处理跑完了,建议尝试可视化一下预处理结果,确保人的scale和camera轨迹没有太离谱。

作者你好! 这段时间我试着使用自己的视频数据过了一遍pipeline, 训练过程中没有报错, 但是训练的结果出现了一些问题.

  1. 在训练人体NeRF的时候得到的结果质量不高(下图一), 我在训练前调整了samples_per_ray=64, rays_per_batch维持不变, 不知道这是否会影响到训练的结果? 另外训练速度较慢, 在单卡1080ti上每秒大概只能跑到一轮多一点. 另外我注意到在场景NeRF的训练中使用了DP, 因此可以利用多卡算力, 而在人体NeRF的训练部分我尝试过修改代码, 但是似乎只能用到一张卡, 请问我是否遗漏了某些细节?
  2. 在场景和人体NeRF分别训练完毕之后我尝试使用render_reposing.py进行novel pose的合成, 然而结果中只渲染出了场景, 没有看到人体(下图二), 这是否代表人体NeRF训练失败了? 作者对此有什么好的建议吗?
  3. 之后我尝试使用自定义视频的背景结合bike_human的人体模型进行渲染, 结果图片显示全灰(下图三), 这是否意味着两者之间的某种格式或者是尺寸不匹配? 由于跑出结果的时候已经很晚, 目前寝室已经断电, 因此我无法继续对代码进行分析, 暂且先通过issue反馈一下, 之后我会试着自己去解决问题, 如果作者能给出一些建议的话那将非常感激不尽! human out_0000 out_0000

您好!请问您解决了多卡训练这个问题吗?我现在跑human NeRF也是很慢,预计训练完成要400多个小时。

这个我没在跑了, 我记得作者说过neuman用的是vanilla的nerf, 慢一点也在意料之内. 关于多卡的话这个很大程度上取决于作者的代码结构, 一些简单的网络用DataParallel wrap一下就行, 我记得当时我可以在多卡上跑, 但是负载没跑满, 跟在单卡上跑没什么区别, 要不你换张好一点的卡, 至少不会有oom的问题, 多卡你要是有啥好办法了记得踢我一脚 ;-)

hrx20000209 commented 1 year ago

谢谢!也祝你研究顺利! NeuMan其实要求camera最好有一定的运动,这样才能重建出背景,从而decouple人和背景。 所有的预处理跑完了,建议尝试可视化一下预处理结果,确保人的scale和camera轨迹没有太离谱。

作者你好! 这段时间我试着使用自己的视频数据过了一遍pipeline, 训练过程中没有报错, 但是训练的结果出现了一些问题.

  1. 在训练人体NeRF的时候得到的结果质量不高(下图一), 我在训练前调整了samples_per_ray=64, rays_per_batch维持不变, 不知道这是否会影响到训练的结果? 另外训练速度较慢, 在单卡1080ti上每秒大概只能跑到一轮多一点. 另外我注意到在场景NeRF的训练中使用了DP, 因此可以利用多卡算力, 而在人体NeRF的训练部分我尝试过修改代码, 但是似乎只能用到一张卡, 请问我是否遗漏了某些细节?
  2. 在场景和人体NeRF分别训练完毕之后我尝试使用render_reposing.py进行novel pose的合成, 然而结果中只渲染出了场景, 没有看到人体(下图二), 这是否代表人体NeRF训练失败了? 作者对此有什么好的建议吗?
  3. 之后我尝试使用自定义视频的背景结合bike_human的人体模型进行渲染, 结果图片显示全灰(下图三), 这是否意味着两者之间的某种格式或者是尺寸不匹配? 由于跑出结果的时候已经很晚, 目前寝室已经断电, 因此我无法继续对代码进行分析, 暂且先通过issue反馈一下, 之后我会试着自己去解决问题, 如果作者能给出一些建议的话那将非常感激不尽! human out_0000 out_0000

您好!请问您解决了多卡训练这个问题吗?我现在跑human NeRF也是很慢,预计训练完成要400多个小时。

这个我没在跑了, 我记得作者说过neuman用的是vanilla的nerf, 慢一点也在意料之内. 关于多卡的话这个很大程度上取决于作者的代码结构, 一些简单的网络用DataParallel wrap一下就行, 我记得当时我可以在多卡上跑, 但是负载没跑满, 跟在单卡上跑没什么区别, 要不你换张好一点的卡, 至少不会有oom的问题, 多卡你要是有啥好办法了记得踢我一脚 ;-)

噢噢好的,谢谢你!我目前是手头上有四张3090 24G的,也没法换更好的卡了哈哈哈。