项目名称:
基于yolov3的目标检测
问题描述
在完成对car和person两个类别目标检测的训练时遇到进程已结束,退出代码为 -1073740791 (0xC0000409)问题,之后用Anaconda prompt 终端运行py文件显示具体错误,错误详情如下:
Traceback (most recent call last):
File "train.py", line 190, in <module>
_main()
File "train.py", line 33, in _main
freeze_body=2, weights_path='./model_data/yolo_weights.h5') # make sure you know what you freeze
File "train.py", line 130, in create_model
[*model_body.output, *y_true])
File "D:\anacoda\anaconda\lib\site-packages\keras\backend\tensorflow_backend.py", line 75, in symbolic_fn_wrapper
return func(*args, **kwargs)
File "D:\anacoda\anaconda\lib\site-packages\keras\engine\base_layer.py", line 489, in __call__
output = self.call(inputs, **kwargs)
File "D:\anacoda\anaconda\lib\site-packages\keras\layers\core.py", line 716, in call
return self.function(inputs, **arguments)
File "D:\PythonSpace\PythonProject\Deeplearning\Test3\keras-yolo3\yolo3\model.py", line 394, in yolo_loss
_, ignore_mask = K.control_flow_ops.while_loop(lambda b,*args: b<m, loop_body, [0, ignore_mask])
AttributeError: module 'keras.backend' has no attribute 'control_flow_ops'
原因分析:
keras.backend里找不到control_flow_ops这个类了
原因在于keras版本和tensorflow不对应
解决方案:
1.Keras本身是在TensorFlow基础上构建的高层API,也就是说我们使用的control_flow_ops本身就是Keras调用TF的函数,现在Keras没办法调用control_flow_ops,就直接用TF调用
原代码如下:
_, ignore_mask = K.control_flow_ops.while_loop(lambda b,*args: b<m, loop_body, [0, ignore_mask])
修改后:
_, ignore_mask = tf.while_loop(lambda b,*args: b<m, loop_body, [0, ignore_mask])
2.在Keras里找到control_flow_ops就可以了
我在Keras源码里没找到control_flow_ops,有兴趣的人可以去找一找
3.关于AttributeError问题,很多都是版本更新导致的,可以通过pip install keras==XXX来修改版本
需要找到相对应的tensorflow和keras的版本