YOLO的全称是You Only Look Once,是最早出现的单阶段目标检测方法,也是第一个实现了实时目标检测的方法。计算机视觉领域主要包括两大方面:图像分类、目标检测。图像分类是指根据图像的语义信息将不同类别的图像区分开来,比如人脸识别,即模型输入一张图片,判断该图片属于某个类别。
YOLO是一个国外开源的目标检测算法,目前流行的YOLO算法分为三个版本,即YOLOv1、YOLOv2、YOLOv3,YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box(边界)的位置及所属类别。
YOLO的整体结构如下:
该网络是根据GoogLeNet改进的,输入图片为448*448大小,输出为7×7×(2×5+20)。将原始图片分为S×S个单元格,之后的输出是以单元格为单位进行的。如果一个object的中心落在某个单元格上,那么这个单元格负责预测这个物体。每个单元格需要预测B个box值(box值包括坐标和宽高),同时为每个box值预测一个置信度(confidence scores)。也就是每个单元格需要预测B×(4+1)个值。每个单元格需要预测C(物体种类个数)个条件概率值。所以,最后网络的输出维度为S×S×(B×5+C),这里虽然每个单元格负责预测一种物体,但是每个单元格可以预测多个box值。
那么如何利用YOLOv3训练自己的模型呢?
首先需要一批图片数据,比如以下数据:
图片包括100张猫狗两种类型的图片。其次需要对这批图片进行label的制作,即某张图片的猫在哪里、狗在哪里、利用Labellmg等工具进行label的制作。
点击save后会生成以xml结尾的label文件,内容如下:
由于该图片中只包含两个关键目标,即只有两个object,并存储相对应的object的坐标,到此已经初步生成了图片的label。
其次,将数据划分为训练集、测试集、验证集,执行以下脚本:
最后,将.xml数据转化为YOLO需要的VOC数据,执行以下脚本:
在数据准备完成后,即可进行模型训练。
操作系统:MacOS 10.15.6
Python:3.7.6
Tensorflow:1.13
Keras:2.15
OpenCV:4.3.0
部分训练代码如下:
在训练完成后,会在logs文件下生产模型的权重文件及神经网络模型结构可视化文件等,部分模型结构如下:
模型测试效果如下: