YOLO算法之YAD2K配置教程

时间:2024-02-20 16:23:02

YOLO算法之YAD2K配置教程

**总结:遇到缺少文件的问题,通常是因为库之间的版本更新问题,解决办法通常是阅读错误原因,修改源代码(增删改缺失的函数/属性)。
配置yad2k是个坑,一定要注意版本兼容问题!!!**
注:在使用预训练的YOLOv2模型时,一定要注意变量的形状

YOLO算法
YOLO是一种高准确性、实时的目标检测算法。核心思想是取对象的中点,将对象分配给包含中点的格子。优点是神经网络可以输出精确的边界框。只要网格取得够精细,那么多个对象的中点落在同一个格子的概率就会很小。
优点:
(1) 显式地精确输出边界框坐标,边界框可以具有任意宽高比,不会受到滑动窗口分类器的步长限制。
(2) 单次卷积实现,有大量可以共享的计算步骤,因此算法效率很高,运行速度非常快,可以达到实时识别。
(3)目标检测(非极大值抑制)和分类(借助于anchor box)可以在一个模型中实现

缺点:
需要大量的训练样本,计算量巨大,因此常常在预训练的模型上进行微调。

算法细节:
(1) only look once指的是,只需要对图片执行一次前向传播,就能预测。通过非极大值抑制,YOLO算法对每个对象只检测一次,输出识别到的对象及其边界框。
(2) non-max suppression 确保算法对每个对象只检测一次。如果同时检测多个对象,那么就对每个输出类别分别执行non-max suppression。
(3) anchor box 是为了处理两个对象出现在同一个格子的情况,实际上这种情况很少发生。人们一般手动指定 anchor box的形状和个数(~5-10个)。后期的YOLO算法采取更高级的方法———k-means对不同对象进行聚类,来自动选择anchor box。

YOLO需要在一大堆已经标记号边界框的大型数据集上训练,因此训练时间非常长。这里用的是一个预训练的YOLO模型,从YOLO官网下载的 YOLO v2。
在学习吴恩达老师的深度学习-车辆检测的课程中遇到了yolo.h5 load失败的问题,需要手动下载权重和配置,然后用 yad2k 手动将模型转换为 yolo.h5。
YOLO模型转换成 yolo.h5 的方式有两种:[https://www.jianshu.com/p/3e77cefeb49b]
(1) 利用pjreddie的Darknet框架:“Darknet is an open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.” [https://github.com/pjreddie/darknet]
(2) 利用Allan Zelener 基于TensorFlow和Keras编写的 yad2k文件。这个文件实现的是 YOLOv2,即 YOLO9000。
本文使用第二种方式,因为懒得搭建新的框架。

YAD2K: Yet Another Darknet 2 Keras
YAD2K author: Allan Zelener
You only look once, but you reimplement neural nets over and over again.
YAD2K is a 90% Keras/10% Tensorflow implementation of YOLO_v2.
Original paper: YOLO9000: Better, Faster, Stronger by Joseph Redmond and Ali Farhadi.

YAD2K搭建过程
具体操作如下:
1. prepare the environment:先下载好 numpy、h5py、pillow,配置好 tensorflow 和 keras。因为YAD2K是基于 tensorflow 和 keras的 YOLO_v2实现。
pip install numpy h5py pillow
pip install tensorflow-gpu # CPU-only: conda install -c conda-forge tensorflow
pip install keras # Possibly older release: conda install keras
2. 打开Anaconda prompt download yad2k.git by https://github.com/allanzelener/YAD2K 在目标文件夹空白处,右键选择 “Git Bash Here”,打开 Bash 命令行,然后输入以下指令: git clone https://github.com/allanzelener/yad2k.git
3. 下载cfg文件 在 darknet 的 github[https://github.com/pjreddie/darknet ]下载darknet代码,获得cfg文件
然后将 darknet/cfg/yolov2.cfg 复制到目录yad2k下
4. 在YOLO官网下载YOLOv2的 weights 文件: https://pjreddie.com/darknet/yolov2/ 。其实已经有 YOLOv3,但是v3转换有问题,所以这里用了v2。将weight文件拷贝到目录yad2k下。
5. 转换文件遇到文件缺失问题:
AttributeError: module ‘tensorflow.python.ops.nn’ has no attribute ‘leaky_relu’

这里写图片描述

这里写图片描述

6.暴力解决tf缺少LeakyReLU的问题 (https://blog.csdn.net/qq_35978947/article/details/79908091)
这里写图片描述

7.最后安装成功

这里写图片描述

**总结:遇到缺少文件的问题,通常是因为库之间的版本更新问题,解决办法通常是阅读错误原因,修改源代码(增删改缺失的函数/属性)。
配置yad2k是个坑,一定要注意版本兼容问题!!!**

注:在使用预训练的YOLOv2模型时,一定要注意变量的形状,例如:

由于求出的 yolo_outputs 的形状与 yolo_eval 方法中要求的 yolo_outputs 不一致,因此需要将 yolo_outputs 转换成合适的形状,再传入 yolo_eval 方法中。

这里写图片描述