TensorFlow的Object Detection API集成了众多用于物体检测的神经网络模型。该API目前仍处于活跃的开发中,从实际情况来看对Python3的支持还不是很好。

填过的坑列在这里,方便以后回顾。

RuntimeError: main thread is not in main loop

原因是指定matplotlib的backend要在import之前。使用正确顺序导入matplotlib即可。

修改文件 /research/object_detection/eval_util.py,将 visualization_utils的import放在最前边。修改后如下:

from object_detection.utils import visualization_utils as vis_utils
from object_detection.core import box_list
from object_detection.core import box_list_opsfrom object_detection.core 
import keypoint_ops

参考:https://github.com/tensorflow/models/issues/4777

SyntaxError: invalid syntax

print 'Scores and tpfp per class label: {}'.format(class_index)

原因是使用了Python2的 print 方法。

修改文件 /research/object_detection/utils/object_detection_evaluation.py,给 print 函数加上括号即可。

参考:https://github.com/tensorflow/models/issues/4776

AttributeError: 'dict' object has no attribute 'itervalues'

Python2与Python3的差异。

修改文件 /research/object_detection/model_lib.py,将 itervalues() 修改为 values().

参考:https://github.com/tensorflow/models/issues/4860

TypeError: can't pickle dict_values objects

Python2与Python3的差异。

修改文件 /research/object_detection/model_lib.py,显式转换为 list

category_index.values() -> list(category_index.values())

参考:https://github.com/tensorflow/models/issues/4780

Paddings must be non-negative

这个不是Python的问题,是TensorFlow的一个BUG。

作者已经修正了BUG,等待PR通过更新就好。临时的解决方案是使用 legacy 目录下的 train.py 文件。

参考:https://github.com/tensorflow/models/issues/4798