YOLOv3+TensorFlow目标检测加载权重出现形状不兼容错误如何解决
问题解决方法
这个报错和numpy版本无关,核心原因是模型结构与加载的权重不匹配:你当前实例化的是标准YOLOv3模型,要加载的是YOLOv3-Tiny的权重,二者第一层卷积输出通道数不同(标准YOLOv3为32,Tiny版本为16),因此触发形状不兼容报错,可按以下步骤修复:
- 第一步:调整模型导入与实例化代码
你使用的yolov3_tf2库内置了Tiny版本的模型类,修改对应代码即可:
原导入代码:
改为:from yolov3_tf2.models import YoloV3
原模型实例化代码:from yolov3_tf2.models import YoloV3, YoloV3Tiny
改为:yolo = YoloV3(classes=len(class_names))yolo = YoloV3Tiny(classes=len(class_names)) - 第二步:确认权重正确性
确保你存放在./weights/路径下的yolov3-tiny.tf是适配TensorFlow 2.x版本的转换后权重,不要直接使用Darknet原生的.weights格式文件重命名使用。 - 第三步:修复代码中其他语法错误
你的代码还有两处缩进问题会导致后续运行报错:img_in = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)及后续到if cv2.waitKey(1) == ord('q')之前的代码,全部要缩进一层,放到while True循环内部,否则只会读取第一帧后就停止处理。- 按下q退出后的资源释放代码位置错误,原代码中
vid.release()等语句写在break之后永远不会执行,调整为:
if cv2.waitKey(1) == ord('q'): vid.release() out.release() cv2.destroyAllWindows() break
内容的提问来源于stack exchange,提问作者azarath
相关产品推荐
相关产品推荐

