yolo实现交通信号灯视频流识别调试过程
所用代码:
基于YOLOv3的红绿灯检测识别(Python源码可直接运行) 原作者是tensorflow1,我的环境是tensorflow2,遇到一堆版本导致的问题。现在就是后悔,很后悔,十分后悔。 遇到报错就度娘,好在最终还是在tensorflow2下运行成功了。
报错
1、SystemError: unknown opcode 我的环境是python3.6,代码作者应该是python3.5(作者未说明) 解决:python3.5训练的模型不能直接用3.6跑 其实我没管这个报错,解决下面的报错后就没有这个报错了。
2、RuntimeError: set_session is not available when using TensorFlow 2.0. 作者tensorflow看来是1 解决:self.sess = tf.compat.v1.Session() 前面加上: import tensorflow as tf
3、During handling of the above exception, another exception occurred: ValueError: You are trying to load a weight file containing 45 layers into a model with 147 layers. 作者评论区很多说这个错的,模型不匹配的问题,原贴评论区有解决办法。 解决: (1)“去官网下载个yolo.h5就可以了” yolov3.h5下载 (2)“这个网盘里的yolo.h5不匹配,需要下载yolov3.weights,使用本项目中的yolov3.cfg,手动转换yolo.h5,亲测管用” YOLOv3:将yolov3的.weights文件转换为keras、tensorflow等模型所需的.h5文件的图文教程,以及常见错误解决思路 在等方法(1)下载h5文件的时候试了方法(2),成功。
把“keras-yolo3-master\model_data”里新生成的yolo.h5文件复制到“YOLO-TrafficDetection-master\trafficlight\model_data”中。
4、TypeError: Tensor is unhashable if Tensor equality is enabled. Instead, use tensor.experimental_ref() as the key. 填坑!TypeError: Tensor is unhashable if Tensor equality is enabled. Instead, use tensor.experimental_r
5、解决上个报错后出现: python调用cv2.findContours时报错:ValueError: not enough values to unpack (expected 3, got 2) 又是版本问题,这次是opencv版本过高,我的是opencv4.4,cv2.findContours()返回两个参数,旧版返回三个。 万幸返回的第一个参数没啥用,直接删掉就好。 将
img, cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
改为:
cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
至此程序调通,测试效果如图
|