1、对象定位 - 在构建对象检测之前我们先了解一下

首先看看他的定义。图片分类任务我们已经熟悉了。就是算法遍历图片,判断其中的对象是不是汽车。如果你想定位图片中的汽车的位置,该怎么做呢?

我们可以让神经网络多输出几个单元,输出一个边界框。具体说就是让神经网络再多输出四个数字。标记为bxbybh和bw,
这四个数字是被检测对象的边界框的参数化表示。要想确定边界框的具体位置,需要指定红色方框的中心点。

这次我们要学习构建神经网络的另一个问题,即定位分类问题。这意味着我们不仅要用算法判断图片中是不是一辆汽车。还要在图片中标记出他的位置,用红色方框把汽车圈起来。就是定位分类问题。定位的意思就是判断汽车在图片中的具体位置。图片中有多个对象时,应该如何检测他们并确定出位置?比如你在做自动驾驶程序。检测对象比如行人,摩托车,汽车等多个。
例如输入一张图片到多层卷积神经网络。他会输出一个特征向量并反馈给softmax单元来预测图片类型。如果构建自动驾驶系统,那么对象可能包括以下几类,行人,汽车,摩托车和背景。也就是说如果图片中没有行人汽车,那么就只会输出背景。这四个分类就是soft max函数可能输出的结果。
这就是标准的分类pipeline。

因此训练级不仅包含神经网络预测的对象分类标签,还包括表示边界框的四个数字。

接着采用监督学习算法。输出一个分类标签,还有这四个参数值。从而给出被检测对象的边界框位置。
接下我们讲一讲如何为监督学习任务定义目标标签y?
向量第一个值py表示是否有对象? 他表示被检测对象处于某一分类的概率。如果检测到有对象就输出边界框参数bx by bh bw,所以标签训练机需要标签的边界框。如果没有对象,那么边界框参数则毫无意义。
实际应用中可以不用对c1,C2C3和softmax激活函数应用对数损失函数,通常做法是对边界框坐标值bx,by,bh,bw应用平方误差。对PC应用逻辑回归函数,甚至采用平方误差也是可以的。

2、 特征点检测

神经网络可以通过输出图片上特征点的xy坐标。实现对目标特征的识别。


假设你正在构建一个人脸识别应用。你希望算法给出眼角的具体位置。眼角坐标为xy,所以你可以让神经网络的最后一层多输出两个数字lx,ly来作为眼角的坐标,你也可以提取嘴的关键特征点,也可以提取鼻子周围的关键特征点。可以设定特征点的个数,假设两部有64个特征点。这点甚至可以帮助你定义脸部轮廓和下轮廓。生成包括这些特征点的标签训练集,利用神经网络输出脸部关键特征点的位置。

具体做法是,准备一个卷积网络和一些特征集。将人脸图片输入卷积网络,输出1或0,1表示有人脸,0表示没有人脸。

批量添加输出单元,用以输出要识别的各个特征点的坐标值。要明确一点特征点1的特性在所有图片中必须保持一致。就好比特征点1始终是右眼的外眼角,特征点2是右眼的内眼角。特征点3是左眼内眼角,特征点4是左眼外眼角等等。

所以标签在所有图片中必须保持一致。假如你拥有足够大的数据集,那么神经网络便可以输出上述所有特征点。还可以判断人物的动作姿态,识别图片中的人物表情。

3、目标检测

首先创建标签训练集。会采用适当剪切过的汽车图片样本。就是整张图片几乎都被汽车站位于中心。这些训练集就可以开始训练卷积网络了。

训练完这个卷积网络,就可以用它来实现滑动窗口目标检测。

不论汽车在图片的什么位置,总有一个窗口可以检测到的。比如将这个窗口输入卷积网络。希望卷积网络对该输入区域的输出结果为1, 说明网络检测到图上有辆车,这种算法叫做滑动窗口目标检测。因为我们以某个步幅滑动这些方框窗口,把遍历整张图片,对这些方形区域进行分类,判断里面有没有汽车。
滑动窗口很明显的缺点,计算成本太高。因为你在图片中剪切出太多小方块。卷积网络要一个一个处理。
如果你增加窗口大小,显然可以减少计算成本,但是可能会影响性能。反之亦然。
神经网络兴起之前,人们都通常采用简单的线性分类器,来进行对象检测。
不过幸好计算成本问题已经有了很好的解决方案。接下来我们会讲讲他具体实现。

4、卷积的滑动窗口实现

首先我们要知道如何把神经网络的全连接层转化为卷积层,

假设对象检测算法输入一个14×14×3的图像。 这里过滤器大小为5×5,数量是16。14×14×3的图像在过滤器处理之后映射为10×10×16。然后通过参数为2×2的最大池化操作图像缩减到5×5×16。然后添加一个连接400个单元的全连接层。接着在添加一个全连接层。最终通过soft max单元输出y,把y改成四个分类,这四个分类可以是行人,汽车,摩托车和背景或其他对象。

接下来就是要演示如何把这些全连接层转化为卷积层

前面三层相同,而对于这个全连接层我们可以用5×5的过滤器来实现。数量是400。因为在卷积过程中,过滤器会便利这16个信道。所以这两处的信道数量必须保持一致。

我说应用400个这样的5×5×16过滤器。输出维度就是1×1×400。我们不再把它看做一个含有400个节点的集合。是一个1×1×400的输出层。然后我们再假设有400个1×1的过滤器。他其实就是上一个层的全连接。要经过1×1过滤器的处理,得到一个激活值。通过卷积网络,我们最终得到这1×1×4的输出层。而不是这四个数字的。以上就是用卷积层代替全连接层的过程。最终这几个单元级变成了1×1×400和1×1×4的维度。

再看看如何通过卷积实现滑动窗口对象检测算法。

假如向滑动窗口卷积网络输入14×14×3的图片,和前面一样,神经网络最后的输出层及softmax单元的输出1×1×4。为了方便只画了正面。假设训练集图片是14×14×3。我测试集图片是16×16×3。正常情况下,会对该蓝色区域输出0或1分类,接着滑动窗口,步幅为两个像素。将这个绿框区域输入给卷积网了,继续将黄色区域输入给卷机网络。最终得到四个标签。
结果发现这四次很多计算都是重复。跟上方运用同样的操作。最终得到这四个子方块中蓝色的图像是左上部分14×14的输出。

所以卷机操作的原理,我们不需把输入图片分割成四个子集,分别执行向前传播,而是把他们作为一张图片输入给卷机网络进行计算,其中的公有区域可以共享很多计算。
再来看28×28×23更大的图片样本, 你同样操作向前传播,最终得到8×8×4的结果。

总结一下  滑动窗口的实现过程,在图片上剪切出一块区域,假设他的大小是14×14,把它输入到卷积网络,直到某个区域识别到汽车。我们不用依靠连续的卷积操作来识别图片中的气。我们可以对大小为28×28的整张图片进行卷积操作。一次得到所有预测值,
该算法仍然有缺陷。边界框的位置可能不够准确。

5、Bounding Box预测

如何编码这些参数?

6、交并比

如何判断对象检测算法良好?-- 交并比函数。

红色为预测对象边界框,紫色为你编写的函数的边界框,

 交并比函数做的是两个边界框的交集和并集之比,只要交并比值大于0.5,结果是可以接受的。

一般把0.5设为阀值,大于0.5的结果都是可以接受。或者可以把阈值定的更高,要求就更高。定义这个概念是为了评价你的对象定位算法是否精准?

7、非极大值抑制

非极大值抑制这个工具可以让YOLO算法输出效果更好。

你的算法可能对同一个对象做出多次检测。所以算法不是对某个对象检测出一次,而是检测出多次。 非极大值抑制可以保证你的算法对每个对象只检测一次

假如你需要在这张图里检测行人和汽车

将一张图片划分19×19个格子。这样会有很多个格子都报告自己的格子有对象。最后可能会对同一个对象做出多次检测。所以非最大值抑制做的就是清理这些检测结果,这样一辆车只检测一次。

  首先看Pc也就是检测到对象的概率最大的那个,然后标记出来。
  然后再逐一审视剩下的矩形,所有和这个最大的边界框有很高的交并比的其他边界框。这些的输出就会被抑制。最后只得到Pc值最高的边界框。

非极大值抑制意味着你只输出概率最大的分类结果。

如果尝试同时检测三个对象,比如行人,汽车,摩托,那么输出向量就会有三个额外的分量。正确的做法是独立进行三次非最大值抑制。对每个输出类别都做一次。

8、Anchor Box

如果你想让一个格子检测出多个对象,你可以使用anchor box概念。

现在每个对象都和之前一样,分配到同一个格子中。分配到对象中点所在的格子中。但是他还分配一个anchorbox。

分配到一个格子和对象形状交并比最高的anchor box。

最后你应该怎么选择anchor box?人们一般手工指定anchor box形状。你可以选择五个到十个anchor box形状覆盖到多种不同的形状。涵盖你想要检测的对象的各种形状。

还有一个更高级的方法就是k-平均算法。可以将两类对象形状聚类。如果我们用它来选择一组anchor box,选择最具代表性的一组anchor box。可以代表你试图检测的十几个对象类别。这可以自动选择anchor box。

9、 YOLO算法

首先我们先看看如何构造你的训练集。

要构造训练集你需要遍历9个格子,然后构成对应的目标向量y。
 这里的Pc代表格子中是否有对象?

假设你要训练一个算法去检测三种对象,行人,汽车和摩托。你还需要显示指定完整的背景类别。
这有三个类别标签。

C1 C2 C3维度代表某种类别,3代表类别数量。

根据边界框形状确定放在第几个anchor box。

接下来看你的算法是如何做出预测的。

最后你要跑非极大值抑制。

10、候选区域

可以先找出色块,然后在这众多的色块上放置边界框。

然后在这众多的色块上跑一下分类器,这样需要处理的位置可能要少的多。以减少卷积网络分类器运行时间。

比在图像所有位置跑一遍分类器要快。特别是这种情况。不仅在方形区域中运行卷积网络,还在高高瘦瘦的区域运行,尝试检测出行人。同时在各种尺度运行分类器。


有一系列的研究工作去改进这个算法。基本的rn算法是使用某种算法求出候选区域。然后对每个候选区域跑一下分类器,每个区域会输出一个标签,这个标签表示有没有车子,行人或摩托车?并输出一个边界框。在确实存在对象的区域得到一个精确的边界框。

吴恩达-目标检测讲解笔记相关推荐

  1. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  2. 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究

    吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 2.1 为什么要进行实例探究 2.2 经典网络 LeNet-5 AlexNet VGG- ...

  3. 机器学习-吴恩达网易云课堂笔记

    机器学习-吴恩达网易云课堂笔记 Machine Learning: A computer program is said to learn from experience E with respect ...

  4. coursera-斯坦福-机器学习-吴恩达-第9周笔记(下)-推荐系统

    coursera-斯坦福-机器学习-吴恩达-第9周笔记(下)-推荐系统 coursera-斯坦福-机器学习-吴恩达-第9周笔记下-推荐系统 1预测电影等级 1任务设想 2基于内容的推荐 2协同过滤 1 ...

  5. 吴恩达深度学习课程笔记(初步认识神经网络)

    吴恩达深度学习课程笔记1 课程主要内容 1.神经网络与深度学习介绍 2.Improving Deep Neural Networks:超参数调整,正则化,优化方法 3.结构化机器学习工程:比如如何分割 ...

  6. 吴恩达ChatGPT网课笔记Prompt Engineering——训练ChatGPT前请先训练自己

    吴恩达ChatGPT网课笔记Prompt Engineering--训练ChatGPT前请先训练自己 主要是吴恩达的网课,还有部分github的prompt-engineering-for-devel ...

  7. 737 页《吴恩达深度学习核心笔记》发布,黄海广博士整理!

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课.该专项课程最大的特色就是内容 ...

  8. 吴恩达机器学习MATLAB代码笔记(1)梯度下降

    吴恩达机器学习MATLAB代码笔记(1)梯度下降 单变量线性回归 1.标记数据点(Plotting the Date) fprintf('Plotting Data') data = load('D: ...

  9. 免费分享全套吴恩达深度学习课程笔记以及编程作业集合

    分享吴恩达深度学习全套 笔记 笔记来源于吴恩达老师课程中口述翻译,并包含板书.可以取代看视频,做到更快速学习. (部分目录) (部分目录) (板书) 编程作业 扫描二维码后台回复"0&quo ...

最新文章

  1. 连续三天说一个事情 : 信号转换
  2. Go 语言编程 — net 库
  3. 浅析影响网站建设的因素有哪些?
  4. iOS中EXC_BAD_ACCESS解决办法
  5. 8.Struts2类型转换器
  6. Redis数据结构详解之Set(三)
  7. 系统架构师学习笔记-系统开发基础知识(二)
  8. mac flutter 开发环境配置 从0到1 流程
  9. 最适合程序员的画图工具?
  10. matlab统计像元灰度值的函数,matlab像素值及统计
  11. 编写myqq即时聊天脚本,实现相互通信(tcp协议)
  12. cv个人计算机SCI英文简历模板,个人英文简历模板
  13. PaddleOCR整体了解
  14. 微信公众号排版学习之图片篇
  15. linux qt lgl,Linux下QT、cannot find -lGL、
  16. delta和gamma中性_趣谈希腊字母(Delta和Gamma)
  17. ModelState.IsValid忽略型别的检查错误
  18. 使用EEGLAB函数处理自己的脑电数据流程及代码
  19. Kafka推送数据方法
  20. #203-[DFS]狼和羊

热门文章

  1. 【Matlab】多元线性回归(Excel可直接替换数据)
  2. 论文邮箱不是导师的_为什么你迟迟收不到研究生导师的回复邮件?
  3. 微信小程序中苹果iOS手机显示时间格式NaN不正确的问题
  4. Nginx配之负载均衡、缓存、黑名单和灰度发布
  5. tzc 1345 推箱子
  6. Premiere Pro教程
  7. 毕业论文里面的各种公式该如何编辑
  8. Arduino使用雨滴模块
  9. 接口测试 - 从0不到1的心路历程 (二)
  10. 【论文 | 复现】YOLO-landmark detection