使用TensorFlow Object Detection API重训MobileNet V1 SSD时遇跨平台错误求助
解决TensorFlow Object Detection API训练MobileNet V1 SSD时的
pred类型错误 我之前在TensorFlow 1.x版本训练SSD系列模型时,也踩过这个pred类型错误的坑,结合你的环境和问题,整理几个实用的排查和解决方向:
1. 先从数据集标注找问题
这个错误90%的概率是自有数据集的标注没有被正确转换成TensorFlow可处理的格式,你可以这么检查:
- 确认标注文件(不管是Pascal VOC XML还是生成的TFRecord)里没有异常数据:比如空的 bounding box、类别ID超出配置文件里
num_classes的范围、标注值是NaN或者字符串类型(正常应该是0-1之间的浮点数或者整数类别ID) - 写个小脚本读取你的TFRecord文件,打印3-5条样本的完整标注信息,重点看
image/object/bbox/*和image/object/class/label这些字段,有没有不符合要求的数据。
2. 核对模型配置文件的关键参数
MobileNet V1 SSD的.config文件很容易出现参数不匹配的问题,重点检查这几点:
num_classes必须和你的自有数据集类别数完全一致(注意:这里是你实际的目标类别数,比如你要检测猫和狗,就填2,不需要加背景类)fine_tune_checkpoint的路径要指向和TensorFlow 1.5兼容的MobileNet V1 SSD预训练模型,别用高版本的预训练权重,不然会出现张量不匹配的问题- 检查
train_config里的batch_size是不是过大?虽然这个错误不是内存问题,但如果batch里混入异常样本,也可能触发类型错误。
3. 确保API和TensorFlow版本兼容
你用的TensorFlow 1.5是比较老的版本,Object Detection API的代码迭代很快,新代码可能用到了TF1.5没有的API:
- 建议切换到Object Detection API的
r1.5分支(对应TF1.5的版本),不要用最新的master分支代码 - 再确认一遍protobuf编译是否完全:执行
protoc object_detection/protos/*.proto --python_out=.的时候,有没有报错?如果有遗漏的.proto文件没编译,也会导致后续的类型错误。
关于训练时的截断警告
你提到的那个截断警告,应该是TF1.5对旧API的弃用提示(比如tf.contrib下的某些函数)。如果不影响训练进程,可以暂时忽略;要是想消除警告,你可以:
- 找到警告里提到的那个文件,定位到对应的代码行,把弃用的函数替换成TF1.5推荐的写法
- 或者直接用对应版本的API代码,这样大部分版本兼容的警告都会消失。
内容的提问来源于stack exchange,提问作者BarakB
相关产品推荐
相关产品推荐

