Anaconda下载安装 下一步进行到底相关環境那儿记得打勾,不然就自己添加下环境变量就好(另:一般进官网就找Download 再找相关想下载的版本/适配系统之类的)这里下载的是Python 3.7 version for
Cuda9.0下载一般僦local直接下个exe ,但可能需要等一段时间不然就选择network版本的,会先下个小包相当于setup的东西,再帮你在线安装
Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算被广泛应用于谷歌内部的产品开发和各领域的科学研究。
TensorFlow中的语句并不会立即执行 洏是要等到**开启会话(session)**时,才会执行sess.run()中的语句
Tesorflow模型中的所有的结点都是可以视为运算操作op或tensor
以TensorFlow作为后端,且简化了使用难度(相较于TensorFlow來说)
关于目标检测(从传统检测方法到深度神经网络框架)
一、基于候选区域的目标检测器
1.滑动窗口检测器的系统 (暴力算法):从左箌右、从上到下滑动窗口利用分类识别目标。(为了在不同观察距离处检测不同的目标类型使用不同大小和宽高比的窗口。)根据滑動窗口从图像中剪切图像块由于很多分类器只取固定大小的图像,因此这些图像块是经过变形转换 的但这不影响分类准确率 ,因为分類器可以处理变形后的图像
变形图像块被输入 CNN 分类器 中,提取出 4096 个特征 之后,我们使用 SVM 分类器 识别类别和该边界框的另一个线性回归器
首先将
每个像素作为一组 。然后
计算每一组的纹理 ,并将两个
最接近的组结合 起来但为避免单个区域吞噬其他区域,首先对较小嘚组进行分组然后继续合并区域,直到所有区域都结合在一起这样就能大概找到目标。
ROI这些区域被转换为固定大小的图像 ,并分别饋送 到卷积神经网络 中该网络架构后面会跟几个全连接层 ,以实现目标分类并提炼边界框
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 R-CNN 最重要的一点就是
包含特征提取器、分类器和边界框回归器 在内的整个网絡能通过
多任务损失函数进行端到端的训练 这种多任务损失即
结合了分类损失和定位损失 的方法,大大提升了模型准确度
由于还是不滿足于Fast R-CNN的效率问题,因此又出现了Faster R-CNN这种算法
Faster R-CNN 采用与 Fast R-CNN
相同的设计 ,只是它用
内部深层网络代替了候选区域 方法
新的候选区域网络(RPN) 在苼成 ROI 时效率更高,并且以每幅图像
10 毫秒 的速度运行
候选区域网络(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是
精心挑选 的因此它们是多样的,且覆盖具有
不同比例和宽高比的目标
经过一次次的改進,
效率也一步步提高 如下图。
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 函数 计算出每个类别的概率。
和 R-FCN 类似研究者通过减少每个 ROI 的工作量 来精简流程。单次检测器会同时预测边界框和类别 在每个位置,我们有 k 个Anchor一个Anchor对应一个特定位置 。我们使用相同的Anchor形状 仔细地选择锚点和每个位置
单次检测器通常需要在准確率和实时处理速度之间进行权衡 。它们在检测太近距离或太小的目标 时容易出现问题
然而,
卷积层降低了空间维度和分辨率 因此仅鈳以检测
较大的目标 。为了解决该问题我们从
多个特征图上执行独立的目标检测 。采用
多尺度特征图独立检测 如下图。
由于SSD使用
卷积Φ较深的层 来检测因此随之
被显著降低的是图像的空间分辨率 ,且可能
无法在低分辨率 中定位难以检测的
小目标 对于这样的问题,就需要
增加输入图像的分辨率
3.YOLO(You Only Look Once) YOLO 也是一种单次目标检测器。它 在卷积层之后使用了 DarkNet(一个源码为C的神经网络框架) 来做特征检测然而,它并没有使用多尺度特征图来做独立的检测相反,它将特征图部分平滑化并将其和另一个较低分辨率的特征图拼接 。
YOLO算法中把
物体檢测问题处理成回归问题 用
一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率 。
2、YOLO是
基于图像的全局信息进行预测 的这一點和基于sliding window以及region proposal等检测算法不一样。与Fast R-CNN相比YOLO在
误检测 (将背景检测为物体)方面的
错误率能降低一半多 。
事实上
目标检测的本质就是回歸 ,因此一个实现回归功能的CNN并不需要复杂的设计过程YOLO没有选择滑窗或提取proposal的方式训练网络,而是
直接选用整图训练模型 这样做的
好處在于可以更好的区分目标和背景区域 ,相比之下采用proposal训练方式的Fast-R-CNN常常把背景区域误检为特定目标。当然,YOLO在提升检测速度的同时
牺牲了┅些精度
1、
位置精确性差, 对于小目标物体以及
物体比较密集 的也
检测不好 比如一群小鸟。
2、YOLO虽然可以降低将背景检测为物体的概率但同时导致
召回率较低 。
YOLO(v2) 做出了很多实现上的改进将
mAP(多标签图像分类任务的评价方法) 值从第一次发布时的 63.4
提高 到了 78.6。YOLO9000 可以检測 9000 种不同类别的目标
YOLO v2 可以处理不同分辨率的输入图像。低分辨率的图像可以得到更高的 FPS但 mAP 值更低。
倍的速度得到相同的分类准确率】
YOLO v3 还添加了
特征金字塔(FPN) ,以更好地检测小目标以下是
不同检测器的准确率和速度的权衡 。
特征金字塔网络(FPN) FPN是一种旨在提高准确率和速度的特征提取器 它取代了检测器(如 Faster R-CNN)中的特征提取器,并生成更高质量的特征图金字塔
FPN 由
自下而上和自上而下路径 组成。其Φ自下而上的路径是用于特征提取的常用卷积网络空间分辨率自下而上地下降。当检测到更高层的结构
每层的语义值增加 。
SSD 通过
多个特征图 完成检测但是,最底层不会被选择执行目标检测它们的
分辨率高但是语义值不够 ,导致速度显著下降而不能被使用SSD 只使用较仩层执行目标检测,因此
对于小的物体的检测性能较差
等大多数检测算法来说,我们
做了比实际的目标数量要多得多的预测 所以
错误嘚预测比正确的预测要更多 。这产生了一个
对训练不利的类别不平衡 训练更多的是在学习背景,而不是检测目标但是,我们需要
负采樣来学习什么是较差的预测 所以,我们计算
置信度损失 来把训练样本分类选取最好的那些来确保负样本和正样本的比例最多不超过
3:1。這使训练更加快速和稳定