本文是根据Andrew Ng的深度学习视频学习,自己总结的。这一系列先只学习关键技术和设计,具体的实例等下一期进行。

一:多object的识别与检测
现在我们来个复杂一些的,在一副图像中我们存在多个不同的检测目标体,比如在自动驾驶中,在一幅图像中存在行人,汽车,摩托车各个若干,如下图所示。

这时候,单object检测的算法就失去了作用,必须得做出一些改变出来。

二:基于滑动窗口的检测技术
一个比较朴素的思路就是,我们上一文章中,既然已经训练好了单个图像识别的模型,何不充分利用整个思路呢。

思路如下:我们通过一大堆的的样本训练出一个分类模型ConvNet,这些样本都是仅仅包含单个物体的图像,且都是紧密裁剪的图像,也就是整个图像都尽量是物体的轮廓,用此数据集训练出对物体分类的模型出来,假设我们需要预测N个类别的数据,模型只会输出一个1X1XN的张量,代表各个分类的softmax值。

然后利用一个固定长度的滑动窗口,在图像上从上到下,从左到右,不断地滑动(注意这里涉及步长),每次滑动都取整个窗口内的像素进行ConvNet前向计算,每次都会得到一个结果,然后直到所有图像遍历结束。再换一个大一些窗口(记住要resize)继续检测,重复这一步,再换一个继续检测。

看样子似乎想法很简单,将多目标识别的问题直接转换为了多次的分类问题。
但是这算法最大的缺陷就是太慢了,每次都是盲目的滑动多次探测多次计算,同时存在很多重复的计算,而且对边界框的精确度不是很高,因为边界依赖于于滑动窗口的滑动,因此窗口滑动的精细程度决定了输出的边框范围。计算量大,运行慢,一直是滑动窗口的缺点。

有一个加速的办法就是将模型中的FC层全部换成是卷积层,也就是卷计划改造的滑动窗口。
具体的方式我们可以学习下,用一个例子举个例子:
Turning FC layers into Convolutional layers.
如下图举例:

这幅图展示了可以利用合适的卷积或者是1X1的卷积,将FC层全部代替,这样代替有什么作用呢?
截图来自吴恩达的深度学习视频,

假设我们有4个分类,输入给模型的是14X14X3的图像,测试图像是16X16X3的图像,我们利用步长是2的滑动窗口,可以得到四个结果,但是这四次计算很多都是重复计算,大大的降低了效率,因此卷积化改造的模型,直接将整个图像输入到模型,最后输出一个2X2XN大小的张量,只关注2X2,恰好是4个。四次计算合并到一次计算,每一个输出的位置恰好对应于前面的一个滑动窗口位置,因此,一整个图像一次性计算,可以做到计算共享,大大提升效率。

假设测试图像是28X28X3的图像,最后输出了8X8XN的张量也是将81次滑动窗口的计算合并成了一次的卷积操作。大大提升计算效率。

因此卷积化的滑动窗口可以提升一些计算效率。

最后提一下有一个候选区域的概念,在滑动窗口运行之前先对图像做一定的处理,找到可能存在物体的潜在区域,仅仅对潜在的区域进行滑动探测,这样也能大大减少图片中一些不必要区域的计算,也是提高运算效率的方式,这种思路称为R-CNN,后续又发展出了Fast R-CNN,以及Faster R-CNN。

对于很多区域的检测都是在浪费时间,比如图中的1和2 区域。
R-CNN 的算法是带区域的卷积网络,或者说带区域的 CNN。这个算法尝试选出一些区域,在这些区域上运行卷积网络分类器是有意义的,所以这里不再针对每个滑动窗运行检测算法,而是只选择一些窗口,在少数窗口上运行卷积网络分类器。篇幅有限,不展开讨论。

但是滑动窗口也有优点,就是精度要高一些,毕竟是采用了密集的遍历,每一步骤都是,准确度要比通过end-to-end一次性训练的算法YOLO精确一些,虽然时间上慢一些。

三:YOLO算法(you only look once)
第二小节讲解的基于滑动窗口的方法,存在运行慢,一般无法运行于高实时性要求的系统,且边界的精确度不高的问题,虽然有很多的优化算法,但是总归呢,还是相比于YOLO还是慢一些的,但是滑动窗口的话,精度上确实要高一些。

YOLO就是一个 end-to-end的算法,希望图像只被模型计算一次,不需要什么滑动窗口多次探测,只看一次,正如名字所示,只看一次,就得出图像中所有的分类的所有物体,以及每个物体的坐标和轮廓信息,这个边框要比滑动窗口要精确,且大大带来了时间上的提升,适合于实时检测系统的应用,下面我们来看看如何实现的。

我们先来给出一些数据和标签的定义,借鉴于但物体识别的内容。
将图像划分为M X M个区域,每个区域内都是一个一个1X1X(1+4+N)的张量,所以整个图像的标签为M X M X (1+4+N)的张量,(1+4+N)这里不再展开解释(就是一个置信概率度,4个跟坐标位置和边框大小有关的量,其他的都是N分类的one-shot向量)。

对于每一个区域,给一个想对应位置的张量,张量的内容和单体检测的一致。这么一来,一个图像最多能检测出M X M个物体,因为划分区域的目的就是希望每个区域最多有一个物体,这样就能做到多个物体的检测了。所以,如果希望能检测的物体越多,M就稍微设置大一些。

如上图,图像被划分了四个区域,最多能检测到四个物体,输出到2X2X(1+4+N)的张量上,分别对应于前面划分的某个区域。

也就是说,每一个区域内只能检测有一个物体,起码我留了一个检测到物体后的输出信息的位置,即便是没有物体,那么这个区域输出的也是输出pc=0,其他维度忽略。在每一个区域,只能包含一个物体的中心点Bx与By,这俩值小于1大于0,不管轮廓跨越了几个区域,物体的中心点始终是落在某一个区域内,只关心物体的中心点的位置,至于轮廓Bh和Bw,这俩值可能大于1,因为轮廓可能跨越区域。

因此我们要对每一个样本数据的图片,进行子区域划分,对每个子区域进行检查,中心点落在哪个区域就归属哪个区域,至于轮廓的高度和宽度,也是人为打上标签,此时是按照子区域的长度和宽度进行归一化的,不是整个图像的长度和宽度进行归一化,最后形成M X M X (1+4+N)的张量标签,也是整个模型的输出张量。

说到这里,突然发现之前说的那个单物体检测的,其实也是最简单的多物体检测了,因为它可以看做是把整个图像当成了区域,去检测一个物体,划分的区域就是1X1。

至此这个问题在YOLO下又转变成了一个监督学习的问题。
损失函数可以参考单物体检测的损失函数,只不多多了一些区域罢了,要求所有子区域的代价函数求和。

最后,如果多个物体的中点点落在一个区域怎么处理?两种办法,一种就是增大区域划分,降低这种事情的概率,实在无法避免的话,下一篇文章会学到一个Anchor box的办法来解决。最好是希望不要发生这样的情况,我们最好是希望物体比较分散。

数据怎么来,又是认为训练打标签得来的。

CV《物体识别与检测2 - 多目标识别基本算法》相关推荐

  1. CV《神经风格转换》

    本文是根据Andrew Ng的深度学习视频学习,自己总结的.这一系列先只学习关键技术和设计,具体的实例等下一期进行. 一:神经风格转换处相识 这个是个非常激动人心的小领域,也是一个生成模型,能把一个图 ...

  2. 吴恩达深度学习笔记13-Course4-Week4【人脸识别和神经风格转换】

    人脸识别(Face Recognition) 一.人脸识别简介(What is face recognition?) 人脸验证:输入一张带人名/ID的人脸图片,验证是不是那个人.一对一问题. 人脸识别 ...

  3. 深度学习笔记 第四门课 卷积神经网络 第四周 特殊应用:人脸识别和神经风格转换...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  4. 4.4)深度卷积网络:人脸识别和神经风格转换

    目录 1)What is face recognition? 2)One-shot learning 3)Siamese network 4)Triplet Loss(重点) 5)Face Verif ...

  5. 04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换(作业:快乐屋人脸识别+图片风格转换)

    文章目录 作业1:快乐房子 - 人脸识别 0. 朴素人脸验证 1. 编码人脸图片 1.1 使用卷积网络编码 1.2 Triplet 损失 2. 加载训练过的模型 3. 使用模型 3.1 人脸验证 3. ...

  6. 吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(2)神经风格转换...

    该笔记介绍的是<卷积神经网络>系列第四周:特殊应用(2)神经风格转换 主要内容有: 1.神经风格转换 2.卷积网络隐藏单元可视化显示 3.神经风格转换代价函数 4.内容代价函数 5.风格代 ...

  7. 《Pytorch - 神经风格转换》

    上一篇我们学习了神经风格转换的详细内容,现在我们找了个网上的例子,一起运行分析下,具体实现过程是如何操作的. 一:代码细节步骤解析 第一步:获取当前可用的设备信息,CPU还是GPU # 获得当前的设备 ...

  8. 吴恩达Coursera深度学习课程 deeplearning.ai (4-4) 神经风格转换--编程作业

    吴恩达Coursera深度学习课程 deeplearning.ai (4-4) 神经风格转换–编程作业 注:由于这个作业目前未找到完整的中文版的,所以楼主综合了几篇不完整的,自己完整运行了一遍(pyt ...

  9. 【吴恩达深度学习编程作业】4.4特殊应用——人脸识别和神经风格转换(问题未解决)

    参考文章:1.人脸识别与神经风格转换 2.神经风格转换编程作业 神经网络风格中遇到的问题已经解决了并将解决方案写在了备注里面,但是人脸识别那里运行到database就出错了,目前仍没有找到解决方案.我 ...

  10. 人脸识别与神经风格转换

    文章参考参考,在此基础上对人脸识别和神经风格转换的内容做一个简述. 人生苦短,我学torch 人脸识别 模型构建 人脸识别仅仅用的表层特征做对比是远远不够的,这里用到的就是FaceNet的特征提取.由 ...

最新文章

  1. 基于supersocket、C#对JT808协议进行解析构建gps监控平台服务端
  2. 用 Parser Combinator 解析 Cirru 的缩进语法
  3. none是不是python的保留字_Python主要保留字
  4. wav2midi 音乐旋律提取算法 附可执行demo
  5. tcp报文格式_34.TCP取样器
  6. homestead安装swoole扩展
  7. XCODE中,修改苹果APP支持哪些设备
  8. feynman1999_AI Feynman 2.0:从数据中学习回归方程
  9. BeanFactory和FactoryBean区别
  10. ChIPseeker包对ChIP-seq peaks可视化
  11. 软件工程各阶段的评审内容
  12. 2019-2021 文本生成图片 Text To Image(T2I) Synthesis 论文整理
  13. /oa/web应用程序中的服务器错误修复,如何处理OA系统在线阅读或编辑文档时weboffice控件提示“文件存取错误”的问题?...
  14. 华为meto40 pro怎么升级鸿蒙,我有一台mate40pro,何时可以升级鸿蒙系统?
  15. 大津二值化算法(Otsu)
  16. 卢松松博客2018年年度推荐阅读文章
  17. 神奇的 Excel 插件:Azure DevOps 插件
  18. 十只小猪称体重(判断第几只为最重)
  19. linux查看内存是否是ecc reg,内存 – 如何检查RAM是否在ECC模式下运行?
  20. 智能音箱音频信号质量评价标准

热门文章

  1. slim框架中防止crsf攻击时,用到的函数hash_equals
  2. thinkphp 内部函数 D()、F()、S()、C()、L()、A()、I()
  3. TypeScript入门教程 之 为什么使用TypeScript
  4. NGINX配置邮件代理服务器
  5. Royal TS 一款非常好用的SSH客户端,XShell的完美代替品
  6. STP安全特性——bpduguard特性、 bpdufilter特性、guard root 特性、loopguard技术总结与案列(附图,建议PC观看)
  7. ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
  8. 【静态站点(二)】之 Gridsome 基础
  9. 【Java】四种方法复制视频文件比较
  10. 【Pyhton】随机漫步散点图