本文主要包含如下内容:
- 修改qqwweee/keras-yolo3(目标检测算法YOLOv3的一个Keras版本的优秀实现),将其修改为tf.keras为主导的,并修订不兼容的接口和逻辑,使其支持TensorFlow 2.0版本
- 实践修改后的YOLOv3算法
- 对实践结果的简单分析
修改后的项目 GitHub:
tf2-keras-yolo3 (https://github.com/AaronJny/tf2-keras-yolo3)
转载请注明来源:https://blog.csdn.net/aaronjny/article/details/103658254
前言
说到目标检测,YOLO系列算法可以算是颇负盛名。目标检测相关的算法有不少,而YOLO因其识别速度快而出名,常被用于实时目标检测场景中。今天,我们就来实践一下YOLOv3算法。
因为YOLO原理我是清楚的,又觉得实现起来太麻烦了,所以本来想着就不自己造轮子了,直接从GitHub上找一个优秀的开源实现,拜读一下代码,然后调试跑通结束。但没想到,最后还是得动手写(或者说改?)代码……
因为我主要使用的深度学习框架是TensorFlow和Keras,所以直接去找了算法的Keras实现。然后就找了qqwweee/keras-yolo3,GitHub上4928 star。先来读一下它的README文件:
文档上说的很清楚,那就跟着Quick Start
来,首先下载预训练好的权重文件,然后通过convert.py
脚本构建模型,并将权重转成Keras版本的。到这里都没什么问题,然而当尝试执行测试脚本yolo_video.py
时,问题出现了:
为了测试算法,我随便从网上下载了一个视频,然后调用脚本进行测试。根据错误提示来看,是因为我用的是TensorFlow 2.0,而TensorFlow 2.0与1.x版本的差别很大,删减、调整了很多接口,并且由于Eager execution的出现,编码习惯和逻辑也有所变更,故无法兼容。看了一下README后面的内容,能看到作者当时的测试环境如下:
这个项目是很久之前写的了,上一次更新已经是一年前了,所以与新版本的框架无法兼容也在意料之中。我使用了一个和作者相同的虚拟环境进行测试,是没有问题的,正常可用。但大家毕竟要往前走嘛,我也不能换TensorFlow 1.6进行开发,于是就萌生了修改这个项目,让它支持TensorFlow 2.0的想法,顺便也能对YOLOv3的实现有更深的理解。<