You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

训练目标检测模型出现_dummy_computation_fn调用栈报错如何解决?

错误信息:
错误可能源自某一输入操作。与节点ResNet101V1_FPN/model/conv1_conv/Conv2D关联的输入源操作:ResNet101V1_FPN/model/lambda/Pad(定义于 /local/lib/python3.7/dist-packages/object_detection/models/keras_models/resnet_v1.py:51)
函数调用栈:_dummy_computation_fn

报错原因排查
  • 输入图像尺寸不符合下采样约束:ResNet101V1 backbone 共包含5次步长为2的下采样,要求输入图像的长宽必须是32的整数倍,否则Pad层的补零逻辑和后续Conv2D的步长计算不匹配,触发计算图校验阶段的dummy函数报错。
  • 输入通道数不匹配:ResNet101V1默认接收3通道RGB输入,若传入单通道灰度图、4通道RGBA图像,Pad操作输出的张量通道数和Conv2D层预设的输入通道数不一致,会触发维度校验失败。
  • 预处理逻辑异常:自定义预处理步骤中如果误将默认的HWC(通道在后)张量格式转为CHW(通道在前),或者缩放、裁剪操作后没有对齐维度,也会导致Pad层输出维度不符合后续卷积层的要求。
解决方案
  • 调整输入图像尺寸为32的整数倍:在数据预处理阶段添加尺寸对齐逻辑,参考代码如下:
import tensorflow as tf
def align_image_size(image, target_short_side=640):
    h, w = tf.shape(image)[0], tf.shape(image)[1]
    scale = target_short_side / tf.cast(tf.minimum(h, w), tf.float32)
    # 对齐到32的整数倍
    new_h = tf.cast(tf.round(h * scale / 32) * 32, tf.int32)
    new_w = tf.cast(tf.round(w * scale / 32) * 32, tf.int32)
    return tf.image.resize(image, (new_h, new_w))
  • 统一输入通道数:在数据加载阶段添加通道校验,单通道图像复制为3通道,4通道图像提取前3通道,确保输入张量最后一维固定为3。
  • 校验张量格式:检查自定义预处理逻辑,不要将HWC格式的张量转为CHW格式,保持和TF Object Detection API的默认格式一致。
  • 调整训练配置文件:如果使用官方预置配置训练,检查image_resizer模块参数,使用fixed_shape_resizer时直接设置尺寸为32的整数倍(如640x640、800x800);使用keep_aspect_ratio_resizer时确保pad_to_max_dimension参数值为32的整数倍。

内容的提问来源于stack exchange,提问作者Ahmad Abubakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:15:08