-
Notifications
You must be signed in to change notification settings - Fork 64
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
大佬,求助,CUDA out of memory #48
Comments
你在cal_iou的输入是什么形状的呢? |
大佬,代码基本没变,就是B,N太大了,目前我写了循环进去,以200为限,求解cal_iou,在concat拼接,另外发现一个bug,cal_iou计算iou时候,iou可能变成非常大的数,查找原因是,输入的box2(预测框)长=501,宽=0.0004,导致iou=4000多,这类框的iou最后直接替换成0。 |
这种循环拼接确实很消耗显存,因为必须保存之前所有梯度。我感觉OOM了是正常的。 |
我其实不熟悉simota。我不知道你的IoU矩阵是不是真的需要梯度信息。如果不需要梯度,可以直接在循环内部计算IoU的地方取消梯度。这样应该就不爆显存了。
如果需要400x5000的IoU矩阵还带梯度,我暂时想不到什么简单的解决方法。 |
谢谢大佬回复,我问问v7的作者需要更新梯度不,不需要我就with torch.no_grad():十分感谢 |
大佬,您在计算riou的具体方法有吗,除了(1.计算预测框与GT框的面积;2.确定两个框交点区域的顶点有两种方法:一种是两个BBox的边的交点,另一种是BBox在另一个BBox内的角。如果顶点不存在,则 IoU 值为零。3.理论上,这些顶点形成一个凸包。为了计算这个凸包的面积,我们需要按逆时针(或顺时针)顺序对顶点进行排序。首先,计算这些顶点的中心点。然后,计算每个顶点与中心形成的旋转角度。最后,可以按旋转角度对顶点进行排序。4. 然后,通过将其划分为小的单个三角形来获得相交区域。5. 根据方程式计算 IoU 值),是否还有更具体一点喃,想引用到论文里 |
你可以引用这一篇:https://arxiv.org/pdf/1908.03851.pdf |
我没试过,你可以自己试试。我感觉是可以的,但是没有必要。PyTorch会自动释放这些中间变量。 |
结果应该是一样的,但是方法不一样。我的代码为了方便并行和反向传播,用的是暴力穷举。opencv使用的是更一般性的,更优雅的算法。 |
大佬,我用cal_iou求解旋转iou时候,进行广播机制,导致B和N就特别大,导致直接爆掉了,A100我降batchsize没用,有没有解决的办法喃。
The text was updated successfully, but these errors were encountered: