DETR人脸检测模型运行出现generalized_box_iou断言错误求助
解决DETR人脸检测训练时的Box边界断言错误及NaN问题
- 核对数据集标注
即便用了同款JSON,也手动抽查几个样本的bbox标注:必须保证每个标注的x2 >= x1且y2 >= y1。有些时候JSON会有隐性格式问题(比如标注工具导出的精度误差、坐标顺序搞反),可以写个小脚本遍历数据集,找出不符合要求的标注并修正。 - 检查数据加载逻辑
排查自定义数据集类的代码,确认读取bbox后没有错误的坐标转换操作。比如把[xywh]转[xyxy]时,是不是误算成x2 = x1 - w这类反逻辑,或者归一化时除以了0导致NaN。 - 临时修复模型输出的异常框
DETR的预测框由模型头输出后转换而来,在box_ops.py的generalized_box_iou函数断言前,加几行代码修正异常坐标:
这只是临时 workaround,核心还是要找到数值异常的根源。# 假设坐标是归一化到[0,1]区间的,先 clamp 再修正边界 boxes1 = torch.clamp(boxes1, min=0, max=1) boxes1[:, 2:] = torch.max(boxes1[:, 2:], boxes1[:, :2]) - 核对训练参数初始化
确保模型初始化、学习率、优化器参数和教程完全一致。如果学习率过高,模型会出现梯度爆炸,直接导致输出NaN或异常框坐标。可以先把学习率调低(比如从1e-4降到1e-5),跑几个epoch试试是否还出问题。 - 排查数据增强操作
如果用了自定义数据增强,检查是否有操作会搞乱bbox坐标(比如随机裁剪时没正确调整bbox,导致裁剪后x2 < x1)。可以先关掉所有数据增强,跑验证集看是否还触发断言错误,再逐个恢复增强操作定位问题。
内容的提问来源于stack exchange,提问作者Aleena Rayamajhi
相关产品推荐
相关产品推荐

