基于Keras-YOLO实现目标检测


Keras-YOLO 3 项目使用Python 语言实现了YOLO v3 网络模型,并且可以导入Darknet 网络预先训练好的权重文件信息直接使用网络进行目标识别。

1. 下载Keras-YOLO 3 项目

执行如下命令下载Keras-YOLO 3 项目代码:

git clone https://github.com/qqwweee/keras-yolo3.git

2. 转换Darknet weights 文件格式为Keras 支持的格式

将上一小节中从Darknet 官方网站下载的权重文件yolov3.weights 放到Keras-YOLO 3 项目根目录下,执行如下命令将Darknet 的权重文件转换为Keras-YOLO 3 支持的.h5 格式:

python3 convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

执行成功会输出类似如图7.19 所示的信息和结果。

7.19  输出结果

执行完成后,Keras-YOLO 3 项目的目录结构如图7.20 所示。

7.20  Keras-YOLO 3 项目的目录和文件结构

其中,各选项说明如下:

l   yolo.py 实现了主要的使用功能。

l   yolo_video.py 是整个项目的入口文件,调用了yolo.py 文件。

l   model.py 实现了YOLO v3 算法框架。

l   utils.py 封装了实现过程中需要的应用功能。

l   kmeans.py 用于获取数据集的全部锚点边界框(Anchor Box ),通过K-Means 算法将这些边界框的宽和高聚类为9 类,获取9 个聚类中心,面积从大到小排列,作为9 个锚点边界框(Anchor Box )。

l   train.py 用于训练自己的数据集。

l   coco_annotation.py voc_annotation.py 用于在训练COCO 以及VOC 数据集时生成对应的Annotation 文件。

l   convert.py 用于将Darknet YOLO v3 .cfg 模型文件和.weights 权重文件转换为Keras 支持的.h5 文件,并存放于model_data 子目录下。

l   font 子目录中包含一些字体,model_data 子目录中包含COCO 数据集和VOC 数据集的类别及相关的Anchors 文件。

l   yolov3.weights 文件是从Darknet 下载的预先训练好的权重文件。

l   model_data/yolo.h5 是根据yolov3.weight 文件转换生成的Keras 格式的权重文件。

3. 执行YOLO 目标检测任务

将待检测的输入文件提前准备在Keras-YOLO 3 项目根目录下,本案例中我们依然使用了上一小节使用的person.jpg 输入文件,然后在Keras-Yolo 3 项目根目录下执行如命令启动YOLO v3 模型的目标检测任务:

python3 yolo_video.py --image

yolo_video.py 更详细的使用说明如下:

usage: yolo_video.py [-h] [--model MODEL] [--anchors ANCHORS]
                     [--classes CLASSES] [--gpu_num GPU_NUM] [--image]
                     [--input] [--output]
positional arguments:
  --input        Video input path
  --output       Video output path
optional arguments:
  -h, --help         show this help message and exit
  --model MODEL      path to model weight file, default model_data/yolo.h5
  --anchors ANCHORS  path to anchor definitions, default
                     model_data/yolo_anchors.txt
  --classes CLASSES  path to class definitions, default
                     model_data/coco_classes.txt
  --gpu_num GPU_NUM  Number of GPU to use, default 1
  --image            Image detection mode, will ignore all positional arguments

输入待检测的图像文件名后,输出结果如图7.21 所示。

7.21  Keras-YOLO 3 的输入和输出结果

输出结果显示已经成功检测出的目标数量、置信度、预测框的位置等信息,与Darknet 网络一样,也会同时以可视化的图形方式显示检测结果,如图7.22 所示。

7.22  Keras-YOLO 3 生成的检测结果

本文节选自《 Python 深度学习原理、算法与案例》,内容发布获得作者和出版社授权。

 


请使用浏览器的分享功能分享到微信等