目标检测从零开始的学习之路--原理篇

2023-11-17

安装相关

  • Anaconda官网下载安装下一步进行到底,相关环境那儿记得打勾,不然就自己添加下环境变量就好(另:一般进官网就找Download,再找相关想下载的版本/适配系统之类的)这里下载的是Python 3.7 version for Windows,下完后Ctrl+R,在cmd里输入python,输出>>>,且有备注Anaconda,Inc就没错了
  • Cuda9.0(NVIDIA官网)&cudnn v7.0.4 for CUDA9.0(cudnn需要注册一下,简单QQ邮箱注册下就行)【地址在这
    Cuda9.0下载一般就local直接下个exe,但可能需要等一段时间,不然就选择network版本的,会先下个小包,相当于setup的东西,再帮你在线安装。
  • TensorFlow-gpu
    由于Anaconda的Python相关环境已帮你自动配置完好,所以直接在cmd中pip安装即可。
pip install tensorflow-gpu==1.12.0 #pip提供了对Python包的查找、下载、安装、卸载等,功能强大

关于TensorFlow

(详尽函数可参见TensorFlow基本概念及函数系列
Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。
简单一个例子

import tensorflow as tf		#导入模块
#占位符定义符号类型
a = tf.placeholder("float")		
b = tf.placeholder("float")
#进行乘法,注意是multiply而不是mul(新版本中移除了mul,而使用multiply)
y = tf.multiply(a,b)
#新建一个会话
sess=tf.Session()
#或with tf.Session() as sess: 
    print(sess.run(...))
#通过feed_dict输入placeholders等待的确定的值
#如果直接print(y),输出Tensor("Mul:0", dtype=float32)[维度和类型]
print(sess.run(y,feed_dict={a:3.8,b:7.9}))
#关闭会话
sess.close()

TensorFlow中的语句并不会立即执行,而是要等到**开启会话(session)**时,才会执行sess.run()中的语句。
Tesorflow模型中的所有的结点都是可以视为运算操作op或tensor
低阶API
张量(tf.Tensor)
变量(tf.Variable)【赋初值】
占位符(placeholder)【定义类型】
数据流图(tf.Graph)和会话(tf.Session)
模型保存和恢复(tf.train.Saver)
高阶API
Estimators
数据导入(tf.data.Dataset)
特征列(tf.feature_column)
层函数(tf.layer)
Keras
以TensorFlow作为后端,且简化了使用难度(相较于TensorFlow来说)
Keras与TensorFlow比较

Keras TensorFlow
学习难易度
使用弹性
开发生产力
执行性能
适合用户 初学 高级开发者
矩阵运算 无需自行设计 需自行设计

模型优化工具
可视化工具
神经网络(Neural Network)中相关函数
激活
在这里插入图片描述
卷积
池化
标准化
分类

  • 保存及恢复

在这里插入图片描述

关于目标检测(从传统检测方法到深度神经网络框架)

一、基于候选区域的目标检测器

目前主流深度学习之目标检测算法:Faster R-CNN、R-FCN、SSD、YOLO v3
1.滑动窗口检测器的系统(暴力算法):从左到右、从上到下滑动窗口,利用分类识别目标。(为了在不同观察距离处检测不同的目标类型,使用不同大小和宽高比的窗口。)根据滑动窗口从图像中剪切图像块,由于很多分类器只取固定大小的图像,因此这些图像块是经过变形转换的。但这不影响分类准确率,因为分类器可以处理变形后的图像。

变形图像块被输入 CNN 分类器中,提取出 4096 个特征。之后,我们使用 SVM 分类器识别类别和该边界框的另一个线性回归器。
滑动窗口检测器的系统
2.选择性搜索(selective search,SS)
用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)
首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但为避免单个区域吞噬其他区域,首先对较小的组进行分组,然后继续合并区域,直到所有区域都结合在一起。这样就能大概找到目标。
3.R-CNN
利用候选区域方法创建了约 2000 个 ROI。这些区域被转换为固定大小的图像,并分别馈送卷积神经网络中。该网络架构后面会跟几个全连接层,以实现目标分类并提炼边界框
RCNN
R-CNN 整个系统的流程图:
R-CNN
从R-CNN与滑动窗口的图中明显看出:R-CNN利用候选区法,减少了ROI的数量,从而提高了算法的效率,而且效果也更加准确。
4.边界框回归器
这是为了减少候选区方法选取出更少ROI区域而耗费过高的时间复杂度而使用的一种线性回归器(全连接层)。
5.Fast R-CNN
由于R-CNN还是需要很多的ROI来提升精确度,但实际上有许多区域是彼此重叠的,所以 R-CNN的训练和推断速度还是非常慢。(CNN 中的特征图以一种密集的方式表征空间特征)
因此,为了提升该模型的效率,Faster R-CNN出现了,它使用特征提取器(CNN)先提取整个图像的特征,而不是从头开始对每个图像块提取多次(耗时费力)。然后,将创建候选区域的方法直接应用到提取到的特征图上。【例如,Fast R-CNN 选择了 VGG16 中的卷积层 conv5 来生成 ROI,这些ROI随后会结合对应的特征图以裁剪为特征图块,并用于目标检测任务中。我们使用 ROI 池化将特征图块转换为固定的大小,并馈送到全连接层进行分类和定位。】
这样做的好处就是:Fast R-CNN不像R-CNN要重复提取特征,所以能显著提升效率。(Fast R-CNN 的训练速度是 R-CNN 的 10 倍,但推断速度是后者的 150 倍。)
Fast
Fast R-CNN 最重要的一点就是包含特征提取器、分类器和边界框回归器在内的整个网络能通过多任务损失函数进行端到端的训练,这种多任务损失即结合了分类损失和定位损失的方法,大大提升了模型准确度。
6.Faster R-CNN
Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。
由于还是不满足于Fast R-CNN的效率问题,因此又出现了Faster R-CNN这种算法。
Faster R-CNN 采用与 Fast R-CNN 相同的设计,只是它用内部深层网络代替了候选区域方法。新的候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像 10 毫秒的速度运行。
Faster
候选区域网络(RPN)
第一个卷积网络的输出特征图
作为输入。它在特征图上滑动卷积核,以使用卷积网络构建与类别无关的候选区域。其他深度网络(如 VGG 或 ResNet)可用于更全面的特征提取,但这需要以速度为代价。卷积网络最后会输出 256 个值,它们将馈送到两个独立的全连接层,以预测边界框两个 objectness 分数,这两个 objectness 分数度量了边界框是否包含目标。其实还可以使用回归器计算单个 objectness 分数,但为了简洁,Faster R-CNN 使用只有两个类别的分类器:即带有目标的类别和不带有目标的类别
对于特征图中的每一个位置,RPN 会做 k 次预测。因此,RPN 将输出 4×k 个坐标和每个位置上 2×k 个得分。
Faster R-CNN 不会创建随机边界框。相反,它会预测一些与左上角名为「Anchor」的参考框相关的偏移量(如x、y)。我们会限制这些偏移量的值以达到更好的效果
偏移量
要对每个位置进行 k 个预测,需要以每个位置为中心的 k 个Anchor每个预测与特定Anchor相关联,但不同位置共享相同形状的Anchor
由于Anchor是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的目标
Anchor
Faster R-CNN 使用更多的Anchor。它部署 9 个Anchor框3 个不同宽高比的 3 个不同大小的Anchor框每一个位置使用 9 个Anchor,每个位置会生成 2×9 个 objectness 分数和 4×9 个坐标。
Anchor
经过一次次的改进,效率也一步步提高,如下图。
比较
7.基于区域的全卷积神经网络(R-FCN)
但是,由于人类是无法被轻易满足的,所以,R-FCN诞生了。
Faster R-CNN 中,检测器使用了多个全连接层进行预测。如果有 2000 个 ROI,那么成本还是非常高
R-FCN 通过减少每个 ROI 所需的工作量实现加速(去掉了全连接层)。基于区域的特征图与 ROI 是独立的,可以在每个 ROI 之外单独计算。因此 R-FCN 的速度比 Faster R-CNN更快。
假如我们有 C 个类别要检测。我们将其扩展为 C + 1 个类别,这样就为背景(非目标)增加了一个新的类别。每个类别有 3 × 3 个得分图,因此一共有 (C+1) × 3 × 3 个得分图。使用每个类别的得分图可以预测出该类别的类别得分。然后我们对这些得分应用 softmax 函数,计算出每个类别的概率。
在这里插入图片描述

二、单次目标检测器

1.单次检测器
和 R-FCN 类似,研究者通过减少每个 ROI 的工作量来精简流程。单次检测器会同时预测边界框和类别。在每个位置,我们有 k 个Anchor,一个Anchor对应一个特定位置。我们使用相同的Anchor形状仔细地选择锚点和每个位置。
单次检测器通常需要在准确率和实时处理速度之间进行权衡。它们在检测太近距离或太小的目标时容易出现问题
2.SSD(Single Shot MultiBox Detector)
SSD 是使用 VGG19 网络作为特征提取器(和 Faster R-CNN 中使用的 CNN 一样)的单次检测器。它同时对类别和位置执行单次预测。
同时
然而,卷积层降低了空间维度和分辨率。因此仅可以检测较大的目标。为了解决该问题,我们从多个特征图上执行独立的目标检测。采用多尺度特征图独立检测,如下图。
多尺度特征图独立检测
由于SSD使用卷积中较深的层来检测,因此随之被显著降低的是图像的空间分辨率,且可能无法在低分辨率中定位难以检测的小目标。对于这样的问题,就需要增加输入图像的分辨率
3.YOLO(You Only Look Once)
YOLO 也是一种单次目标检测器。它 在卷积层之后使用了 DarkNet(一个源码为C的神经网络框架) 来做特征检测。然而,它并没有使用多尺度特征图来做独立的检测。相反,它将特征图部分平滑化,并将其和另一个较低分辨率的特征图拼接
YOLO算法中把物体检测问题处理成回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率
YOLO算法的优点
1、YOLO的速度非常快。在Titan X GPU上的速度是45 fps(frames per second),加速版的YOLO差不多是150fps。
2、YOLO是基于图像的全局信息进行预测的。这一点和基于sliding window以及region proposal等检测算法不一样。与Fast R-CNN相比,YOLO在误检测(将背景检测为物体)方面的错误率能降低一半多
3、可以学到物体的generalizable-representations。可以理解为泛化能力强
4、准确率高
事实上,目标检测的本质就是回归,因此一个实现回归功能的CNN并不需要复杂的设计过程。YOLO没有选择滑窗或提取proposal的方式训练网络,而是直接选用整图训练模型。这样做的好处在于可以更好的区分目标和背景区域,相比之下,采用proposal训练方式的Fast-R-CNN常常把背景区域误检为特定目标。当然,YOLO在提升检测速度的同时牺牲了一些精度
YOLO算法的缺点
1、位置精确性差,对于小目标物体以及物体比较密集的也检测不好,比如一群小鸟。
2、YOLO虽然可以降低将背景检测为物体的概率,但同时导致召回率较低
YOLO(v2)做出了很多实现上的改进,将 mAP(多标签图像分类任务的评价方法) 值从第一次发布时的 63.4 提高到了 78.6。YOLO9000 可以检测 9000 种不同类别的目标。
YOLO v2 可以
处理不同分辨率的输入图像
。低分辨率的图像可以得到更高的 FPS,但 mAP 值更低。
YOLO (v3) 使用了更加复杂的骨干网络来提取特征。【DarkNet-53 主要由 3 × 3 和 1× 1 的卷积核以及类似 ResNet 中的跳过连接构成。相比 ResNet-152,DarkNet 有更低的 BFLOP(十亿次浮点数运算),但能以 2 倍的速度得到相同的分类准确率。】
YOLO v3 还添加了特征金字塔(FPN),以更好地检测小目标。以下是不同检测器的准确率和速度的权衡
比较
特征金字塔网络(FPN)
FPN是一种旨在提高准确率和速度的特征提取器。它取代了检测器(如 Faster R-CNN)中的特征提取器,并生成更高质量的特征图金字塔。
金字塔
FPN 由自下而上和自上而下路径组成。其中自下而上的路径是用于特征提取的常用卷积网络。空间分辨率自下而上地下降。当检测到更高层的结构,每层的语义值增加
SSD 通过多个特征图完成检测。但是,最底层不会被选择执行目标检测。它们的分辨率高但是语义值不够,导致速度显著下降而不能被使用。SSD 只使用较上层执行目标检测,因此对于小的物体的检测性能较差
对于如 SSD 和 YOLO 等大多数检测算法来说,我们做了比实际的目标数量要多得多的预测。所以错误的预测比正确的预测要更多。这产生了一个对训练不利的类别不平衡。训练更多的是在学习背景,而不是检测目标。但是,我们需要负采样来学习什么是较差的预测。所以,我们计算置信度损失来把训练样本分类。选取最好的那些来确保负样本和正样本的比例最多不超过 3:1。这使训练更加快速和稳定。

相关链接

多标签图像分类任务的评价方法——mAP - liubo187的博客 - CSDN博客
https://blog.csdn.net/liubo187/article/details/77406654)
【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet) - 郭耀华 - 博客园
https://www.cnblogs.com/guoyaohua/p/8994246.html)
介绍一个相对小众的深度学习框架Darknet,其YOLO神经网络算法对目标检测效果显著 - 云+社区 - 腾讯云
https://cloud.tencent.com/developer/news/76803)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测从零开始的学习之路--原理篇 的相关文章

随机推荐

  • 快手抖音怎么引流?抖音和快手哪个引流效果好?

    短视频作为一种立体信息的承载方式 内容丰富多样 能够直观的展现出产品及服务的细节 被广大用户所青睐 再加上 随着互联网5G时代的普及 抖音和快手两大短视频的出现 到目前为止已更是拥有超过亿万用户的群体平台 短视频也被推上了风口浪尖处 掀起了
  • PieCloudDB Database 云上商业智能的最佳实践

    商业智能 Business Intelligence BI 这个概念最早是 Gartner 在上个世纪九十年代提出的 它认为从功能上来说 商业智能是一种解决方案 其关键是处理企业来自多个来源的各种数据 提取有用的数据并清理 然后经过抽取 E
  • HashSet(使用方法详解)

    HashSet 使用方法详解 1 HashSet 基于 HashMap 来实现的 是一个不允许有重复元素的集合 2 HashSet 允许有 null 值 3 HashSet 是无序的 即不会记录插入的顺序 4 HashSet 不是线程安全的
  • 在同一个Tomcat下部署多个同名系统

    有多个同名war要部署在同一台服务器上 除了部署多个Tomcat 还可以在同一个Tomcat下设置多个Service 流程 打开Tomcat conf server xml 选中已有的整个
  • [Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解

    欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编程经验分享给大家 希望对您有所帮助
  • 【开发环境搭建】3.Anaconda安装包和channels管理

    文章目录 1 conda 管理包 2 conda channel管理 2 1 指定安装包的channel 2 2 default中找不到合适包时的包安装方法 2 3 environment yml中指定pip安装的包 本文内容对linux系
  • 项目实战04_构建企业级maven私服

    注意 在一个互联网企业中 都是采用分模块的开发模式 每个团队维护自己的模块 是无法看到另外项目团队的模块代码的 需要实现业务的通讯就会使用到rpc远程调用技术 Maven私服作用 1 构建一个企业级Maven私服 缓存微服务团队中jar包
  • 乐高wedo搭建图纸_乐高课程 wedo2.0编程

    乐高wedo2 0编程套装 编号45300 乐高教育 WeDo 2 0 通过乐高模型和简单的程序编写 鼓励和激发 2 到 6 年级小学生对科学 工程以及相关课程的学习兴趣 WeDo 2 0强调孩子通过动手体验来树立信心 敢于发现 提出和思考
  • Java使用POI导出Word文档

    POI是Apache组织的一套关于文档操作的api 可以实现word文档和excel文档的读取和写出的功能 所需jar包点击下载 生成word文档 public class WordStudy Test public void test1
  • 已解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tostart. Verify that you have su

    成功解决 MongoDB安装报错 Service MongoDB Server MongoDB MongoDB failed tostart Verify that you have sufficient privileges to sta
  • [命令技巧]alias

    转自 http www dutor net index php 2011 03 commands alias alias 假名 别名 bash的一个内建命令 用来给常用的较长的命令定义个简短的名称 alias命令的基本格式为alias wo
  • Tomcat环境搭建部署

    目录 Tomcat 环境搭建 Win10 Tomcat部署 Tomcat是常见的免费的web服务器 Tomcat 环境搭建 Win10 自己在搭建的过程中出现了一些问题 网上找了找解决方法 发现还是有一些问题 记录一下 Tomcat下载 h
  • overflow相关面试题

    overflow 是 CSS 属性 用于控制元素的溢出内容的处理方式 当元素中的内容超出其容器时 可以通过该属性进行控制 overflow 属性通常与容器元素 如 div 或 一起使用 overflow 属性可以取以下几个值 visible
  • osgEarth的Rex引擎原理分析(五十七)osgEarth中多个着色器的源代码的编译链接过程

    目标 五十四 中的问题129 osgEarth中多个着色器的源代码的编译链接过程 1 先一个一个编译 void Shader PerContextShader compileShader osg State state extensions
  • 在Ubuntu 20.04上成功安装 rtx 3060 notebook Nvidia cuda 和基本图形驱动

    cuda Toolkits中包含了对应的图形驱动 所以只需要安装CUDA 顺便就安装了基本的显卡驱动 最好在新笔记本上安装 经常会失败 重装Ubuntu也不怕丢失重要数据 为了保存用户数据 至少把硬盘分为3个区 1 swap 32GB 2
  • 阿里云发布首台云电脑“无影”,传统 PC 已“末路”?

    作者 硬核云顶宫来源 硬核编辑部 在9月17日的云栖大会上 阿里云智能总裁 达摩院院长发布阿里云第一台云电脑 无影 这是一台长在云上的 超级电脑 只需将一张名片夹大小的 C Key 上连接一块屏幕 就可以进入专属云电脑桌面 访问各种应用和文
  • 整数规划的分支定界法

    分支定界法 把全部可行解空间进行恰当地进行系统搜索 这就是分支定界法的基本内容 我们通常把全部可行解空间反复分割为越来越小的子集 这就称为分支 并对每个子集内的解集计算出一个目标下界 针对最小值问题 这称为定界 在每次分支后 凡是界限超过已
  • 轻轨服务器一般用什么系统,原来轨道交通集成平台的优势是因为这个啊......

    原标题 原来轨道交通集成平台的优势是因为这个啊 轨道交通的重要性就不多说了 火车 高铁 地铁都是大多数人的出行首选 也因此带来铁路交通管理的困难 仅靠人力是远远不够的 必须依靠现代安防科技 但是各个安防系统无法兼容 会造成后台管理的困难 飞
  • 【registries】registrie rest-service idea 无法引入

    1 概述 因为需要 我在外网mac环境尝试本地运行registry 经过一番折腾后 运行主类报错com hortonworks registries webservice RegistryApplication java lang Clas
  • 目标检测从零开始的学习之路--原理篇

    安装相关 Anaconda官网下载安装下一步进行到底 相关环境那儿记得打勾 不然就自己添加下环境变量就好 另 一般进官网就找Download 再找相关想下载的版本 适配系统之类的 这里下载的是Python 3 7 version for W