目标检测 YOLO 篇(1)

machine_learning.jpg
faster_rcnn_001.png

目标

通过分享内容,可以自己用 keras 实现 yolov3 ,官网是使用 darknet 来实现 yolov3 的主体网络。我们用 keras 或是 pytorch 来实现 yolov3。

我也在学习,如果分享内容中有不正确的地方请指正。我会及时更新内容通过大家指正提高分享精准性。

基本要求

  • 熟悉深度学习以及卷积神经网
  • 熟悉掌握 python
  • 熟悉 tensorflow, keras 和 numpy 等库

内容

  • 目标检测的发展历史
  • YOLO 目标检测的原理
  • 数据收集
  • 自己动手写 YOLO 源码(keras 版本)
  • 还有实践

最近在学习目标检测,其实目标检测是一个已经落地但是还是有很大空间的课题,说他落地是因为目标检测早深度学习出现之前大家就用计算机视觉一些算法来实现了目标检测,并取得了不错的效果,例如 HOG 结合 SVM 实现行人检测。但是为什么说还有很大空间呢? 因为现在目标检测无论速度还是精准度还是无法达到我们人类水平,虽然在某些方面已经超过我们,但是综合还是和我们人类有一定距离。

目标检测

概述目标检测

我们都知道可以将目标检测(Object Detection)任务拆分为。

  • 表示目标
    我们用 w, h 和中心点 4 参数来在图像中表示。
  • 图像识别
    接下来就是分类问题

目标检测理论并不是复杂,那么也就是说目标检测并不是理论上难题而是一个工程上的难题。

目标检测的历史

我们知道目标检测早在机器学习出现之前,就使用特征提取和 SVM 实现一些目标检测,例如行人检测。其实在深度学习出现之前,目标检测中人为干涉部分较多,也就是说那时目标检测而不是学出来,而是说动做出来。而在深度学习出现之后,目标检测变成了由机器学习来完成的。深度学习出现之后,主要有两个分支

  • two stage detection: 代表就是 RCNN 系列,目标检测分为两个阶段,第一个阶段是候选框,第二个阶段是识别物体。

  • one stage detection: 代表就是 SSD 和今天我们的主角 YOLO。在 YOLO 中就是将上面两个件事一次性完成了。

  • 滑动窗口方式目标识别(Sliding Window)
    通过使用不同尺寸的窗口在图像滑动来获取一系列不同大小的图像,然后将这些图像输入主要由卷积构成神经网络来完成识别的工作。比较好理解易懂,因为滑窗位置就是最终识别物体位置,所以这种算法是很难精准定位物体位置。仔细一想这种算法实质就是将图像识别问题转为图像检测问题。还有就是因为滑窗之间有面积交叉所以这样带有大量冗余的数据输入到卷积进行计算势必会带来大量冗余。

  • 候选区域(Region Proposal)
    有点类似图像分割的技术,将图像,是通过聚类的方法(select search),在 RCNN 中使用候选区域的方法。???最大外接矩形。随后也引入卷积来生成候选区域

YOLO 出现让我们向实时目标检测更迈进了一步。YOLO 相对其他目标检测,在可以接受响应速度前提下给出良好表现(精准度)。当 YOLOv3 出现除了 mAP(Mean Average Precision) 输给了 RetinaNet 而速度是 RetinaNet 的 3 倍。

其实我们工作也大致分为两个阶段一个数据收集训练模型,其实不要小瞧数据收集的工作,数据收集虽然看起来没有构建模型和训练模型那么高大尚但是他是我们是否能够训练出好的模型基础,所以也是至关重要一个环节,不容忽视。

YOLO 目标检测原理

YOLO 是 You Only Look Once 缩写,其主要作者就是 Joseph Redmon。我们知道在模型设计上通常会主要分几个步骤来,设计函数集合,然后定义目标函数,通过减少目标函数来更新模型参数,这就是训练模型过程。

卷积

分类问题

我们知道图片经过一层一层卷积提取特征图,宽度和高度不断减少,而特征图深度(通道)不断增加,可以将图片宽度(w)和高度(h)来表示图片某一个点位置信息,而图片深度(c)就是该位置特征信息。

在开始介绍 YOLOv3 之前我们简单介绍一下 YOLOv1 和 YOLOv2, 有了对 YOLOv1 和 YOLOv2 的基础有助于大家更好地了解 YOLOv3

YOLOv1

yolov3

不断经过卷积过程就是将空间信息逐渐压缩融合到深度(通道)上,最终的一维特征信息的向量,然后经过全连接进行分类。

yolov1_001.jpeg

一张图片切分7 \times 7 网格,每一个网格负责检测是否存在物体,如果存在物体也就是说不是背景,每一个网格具有两个候选框,而且还具有属于某一个类别的概率。经过筛选找到拟合目标最好的网格以及其候选框。

我们网络输入一个张图,输出这样一个矩阵(如下图) 7 \times 7 \times 30 的矩阵。

yolov1
  • 7 \times 7 表示我们将图片划分为网格数量,网格是我们检测的目标基础
  • Condifence(置信度) 是 0 到 1 之间数值,这个数值表示该网格是物体还是背景的置信度
  • X , Y 表示物体中心点位置
  • Width 和 Hight 表示物体的检测框大小
    (confidence + X + Y + Width + Hight) = 5 为一个边界框,这样边界框有两个 ,然后还剩 20 维度,20 维度是根据目标可能概率而定,也就是如果我们目标可能属于 20 个类别中某一个类的概率。这就不做过多解释了。

IOU

yolov1_011.png

损失函数

yolov1_002.jpeg

预测

yolov1_006.jpg
yolov1_007.jpg
yolov1_010.jpeg
yolov1_008.jpeg
yolov1_009.jpeg
  • 将小于 0.2 设置为 0
  • 排序
  • nms 极大值抑制


    yolov1_012.jpeg

YOLOv2

在 YOLOv2 参见 SSD 和 faster-RCNN 引入了锚框,在 YOLOv2 现对于 YOLOv1 提出先验框,每一个网格都给出 5 先验框,这样增加一些确定性,而从减少了训练时间。

anchor(锚框)

yolov2.jpeg

我们标注目标主体,我们每一个网格点(grid)都有 5 个候选框,这些候选框也是通过无监督最近邻算法计算的,这些框具有不同形态如图,然后我们真实目标的边框还和这些候选框通过计算 IOU 来得到最佳的候选框。这就是将原来 V1 候选框替换为 5 候选框,候选框不是真实的 x y w h,而是一种偏移量。

这样我们通过偏置来表示候选框(检测框)的位置,而不是像 YOLOv1 通过真实 y x 和宽和高来表检测框,c_xc_y 表示网格位置,然后该网格检测物体通过相对网格坐标c_xc_y偏差值来表示物体中心点b_x = \sigma(t_x) + c_xb_y = \sigma(t_y) + c_y 检测的边框用b_wb_n来表示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343