反向传播;神经网络; 卷积神经网络处理流程;递归神经网络/各种RNN,
2024-06-18 11:48:54 1 举报
深度学习基础知识汇总
作者其他创作
大纲/内容
fast rcnn 比rcnn快的原因
Fast R-CNN \"比R-CNN快是因为你不必每次都向卷积神经网络提交2000个区域的建议。相反,每幅图像只进行一次卷积运算,并从中生成一个特征图
根据误差函数得到误差,误差是正数,便于利用微分曲线,一般误差函数是绝对值,还可以取平方,放大误差
迭代直到收敛
cnn
cornernet
传统 regression 分支一般由全连接层来预测 4 个边界框相关的调整量,Grid R-CNN 中采用几个卷积层去预测几个 grid point 的 heat map,使用了像 CornerNet 这样基于角点的检测器
去除IOU函数估计值小于0.3的锚点
convolution layer
different types of filters (Kernels) can do the different thingfont color=\"#ff3333\
架构说明
整个 Grid R-CNN 的框架如上,pipeline 的前半部分相比于 R-CNN detector 没有变动,我们关注怎么做 multi-point 预测的训练和前向推理。重点分为三个部分:
ROI层的使用
使用一个RoI池层对预测的区域建议进行重新整形,该RoI池层用于对建议区域内的图像进行分类,并预测边界框的偏移值。速度甚至可以进行实时分析
h1作为0时刻的记忆参与下次运算
展开递归神经隐藏层,按时间点排序
求解各个权重的梯度问题
现在问题就是如何求解各个权重的梯度,其它的所有东西都在之前介绍中谈到了,所有的trick都可以复用。那么对于每一时刻tt,网络的输出ot都会产生一定误差et,误差的选择任君喜欢,可以是cross entropy也可以是平方误差等等。那么总的误差为E=∑tet,我们的目标就是要求取
提交给RNN
单个神经元的输入和输出
第一单元添加权重系数和输入信号的乘积 第二个单元实现非线性函数,称为神经元激活函数。 信号e是加法器输出信号,y = f(e)是非线性元件的输出信号,信号y也是神经元的输出信号
根据微分估算损失函数的变化率,正负,表示增大还是减少
we flattened our matrix into vector feed it into a fully connected layer like a neural network.
内部神经元的误差计算
不可能直接计算内部神经元的误差信号,因为这些神经元的输出值是未知的多层网络训练的有效方法一直未知。只有在八十年代中期,反向传播算法才被制定出来。 这个想法是将误差信号delta(在单个教学步骤中计算)传播回所有神经元,为所讨论的神经元输入输出信号。
使用排名前N的锚点进行提案
activation function such as softmax or sigmoid to classify the outputs
输出到ROI层进行池化,规范每一个进入RCNN的输入到特定数值
why use the Leaky ReLU.
感受野
feature map上的一个点对应输入图上的区域。注意这里是输入图,不是原始图。好多博客写的都是原图上的区域,经过一番的资料查找,发现并不是原图。
识别提案区域
我们识别提案的区域,并将它们扭曲成正方形,通过使用RoI池层,我们将它们重塑成固定的大小,这样就可以将它们输入到一个完全连接的层中。
1、给出框的偏移的回归2、给出分类的对象
RPN模块告诉快速R-CNN模块去哪里看共享的意思是整个图的内容共享还是卷积核的共享
全卷积网络FCN
详情参见 onenote相关模块
SSD 方式
。。。。。
信号输出
通过输出层传播信号
误差求权值过程
每个神经元误差信号的计算
当计算每个神经元的误差信号时,可以修改每个神经元输入节点的加权系数。 在下面的公式中,df(e)/de表示神经元激活函数的导数(其权重被修改)。这里表示加权系数的值 w`(x1)1 = 可以计算出神经元的加权系数改动值
计算误差到上一个单元的偏微,传递给上一个对应神经单元
查看实现细节点解决这个问题
If you want to get a deeper understanding on how it works you should check Luminoth’s implementation.(https://github.com/tryolabs/luminoth/tree/master/luminoth/models/fasterrcnn)
整个发展历程
是这样的,如果都用一句话来描述RCNN 解决的是,“为什么不用CNN做classification呢?”(但是这个方法相当于过一遍network出bounding box,再过另一个出label,原文写的很不“elegant”Fast-RCNN 解决的是,“为什么不一起输出bounding box和label呢?”(但是这个时候用selective search generate regional proposal的时间实在太长了Faster-RCNN 解决的是,“为什么还要用selective search呢?”于是就达到了real-time。开山之作确实是开山之作,但是也是顺应了“Deep learning 搞一切vision”这一潮流吧。
ROI
gridrcnn
大模型
训练数据集
训练神经网络,我们需要训练数据集。 训练数据集由分配有相应目标(期望输出)z的输入信号(x1和x2)组成 网络训练是一个迭代过程。 在每次迭代中,使用来自训练数据集的新数据修改节点的权重系数。 在这个阶段之后,我们可以确定每个网络层中每个神经元的输出信号值下面的图片说明信号如何通过网络传播,符号w(xm)n表示输入层网络输入xm和神经元n之间的连接权重。 符号yn表示神经元n的输出信号。
ROI 输出之后处理?不是RCNN?
每个ROI输出、前向通过输出类后验概率分布p和一组预测的相对于roi的包围盒偏移(K类中的每类都得到其自己的精化包围盒预测)
点的获取思路
特征图上每个像素都是用 logistic regression 来训练的。在测试的时候,每个 heat map 上选最高概率的点,按照比例关系映射回原图,然后每条边上有三个点,做一个这个样子的概率平均来得到四条边
几种权重值说明
输入层到隐藏层直接的权重由UU表示,它将我们的原始输入进行抽象作为隐藏层的输入隐藏层到隐藏层的权重WW,它是网络的记忆控制者,负责调度记忆。隐藏层到输出层的权重VV,从隐藏层学习到的表示将通过它再一次抽象,并作为最终输出。
全卷积网络学习
fasterRCNN
消除选择性搜索算法,让网络学习区域建议的目标检测算法。
共享计算结果
faster rcnn的输入当然是原图,经过卷积网络后得到特征图,这份特征图被rpn和后续的分类回归网络共享计算结果。
mask r cnn
faster r cnn技术扩展 就是进一步应用定位每个对象的精确像素,而不仅仅是包围框? 可以估计人体姿态
Image matrix multiplies kernel or filter matrix get the Feature Map
RNN的Backward阶段
Max PoolingAverage PoolingSum Pooling
Max pooling takes the largest element from the rectified feature map.
反向传播
convolution layers
grid rcnn思路和corner的不同点
首先 CornerNet 只预测边框的左上和右下角两个点,而 Grid R-CNN 中采用了 multi-point 的形式,作者认为两个点的预测较难,因为某点落在的区域可能根本旁边都是背景,这个点与周围的局部特征相似而难以辨别,就像上面那只喵的右上角那个点。此外,对于预测不准的点可以由其他点做一个矫正,因而可以减少它们所带来的偏移。
LSTM学习
速度效率和限制
YOLO比其他对象检测算法要快几个数量级(每秒45帧)只能处理小物体,因为空间性,很难发现一群鸟
求出每一时刻误差之后下边计算就简单了
非线性 relU
the real world data would want our ConvNet to learn would be non-negative linear values.
剩余6000框
反向传播全过程
机器学习反向传播全过程
设框大小9个锚点大小
从RoI特征向量中,我们使用一个softmax层来预测所建议区域的类别和边界框的偏移值。
和fastRCNN的区别
该方法使用一个独立的网络来预测区域建议,而不是在特征图上使用选择性搜索算法来识别区域建议RPN是一个全卷积网络
架构说明 FCN的应用
Grid points 之间存在内在关联,考虑充分利用不同 map 间的关系。看上图的 (a),对于左上角点,可以考虑距离为 1 的 point 的 map 去完成 feature fusion,做法就是把这个 map 经过 5×5 的卷积(理解为提取需要的信息变换)后加到目标点的 map 上去。(b) 中展示了距离为 2 的 fusion 方法,紫色的箭头就理解成距离为 1 的 fusion,红色的箭头表示在这之后的 fusion。
reduces the dimensionality of each map but retains important information.
最后输出
对象框和对象框label?另解:给出框的偏移回归、给出框的标签分类分别先输出给定对象框的标签预测,然后再加神经网络做回归框位置的调整,两步神经网络完成。难道是同时进行,参数不一样的参数调整,参数作为特征输入一起调整,为什么不进行分开调整。不是更精确?或者做并行调整速度更快更精确?
对点预测的所属类别不同
它们对点预测的所述类别不同。在关键点检测中分为两种思路: Bottom-Up 和 Top-Down,Bottom-Up 这种方法先图片中所有类别的所有关键点全部检测出来,然后对这些关键点进行聚类处理,将不同人的不同关键点连接在一块,从而聚类产生不同的个体;而 Top-Down 这种方法先行人检测,而后再对每个人体子图再使用关键点检测。CornerNet 是基于 Bottom-Up 的,而 Grid R-CNN 是基于 Top-Down 的。Bottom-Up 的缺点很显而易见,分组容易搞错,弄到别的目标上去。
xt,ht,ot说明
每一个xt将代表一个词向量,一整个序列就代表一句话htht 代表时刻tt的隐藏状态otot 代表时刻tt的输出
Pooling Layer
误差比较
下一个算法步骤中,将网络y的输出信号与在训练数据集中发现的期望输出值(目标)进行比较。 差异称为输出层神经元的误差信号delta。
一次对象提案区域选取
最原始的是贪婪算法这里的图是fastrcnn是基于一次特征提取而fasterrcnn是基于一个网络的不是一层
调整提案大小
Fully Connected Layer
实现细节
主要包括、backbone/rpn/roi/Segmentation Masks
问题
R-CNN问题基于贪婪选择算法 它仍然需要大量的时间来训练网络,因为你将不得不分类2000个地区的建议,每个图像不能实时,每个测试时间需要40多秒产生糟糕的选择
初始计算
误差求权重
去除框的位置包含非图像区域的锚点
该区域一次卷积
正向的时候,改变权值,引起 的损失值增大
RCNN
生成卷积特征图
序列化网络结构,记忆功能
ROI 池化层
每个RoI被汇集成一个固定大小的特征图,然后由全连接层(FCs)映射到一个特征向量。该网络每个ROI有两个输出向量:软最大概率和每类包围盒回归偏移量。池化层做偏移量吗RoI池输出的维度实际上并不取决于输入功能图的大小,也不取决于区域建议的大小。它完全取决于我们把提案分成多少个部分
误差导数传递过来值
如果导数是正的,这意味着重量的增加会增加误差,因此新的重量应该更小。如果导数率是负的,这意味着增加权重会减少误差,因此我们需要增加权重。如果导数是0,这意味着我们处于一个稳定的最小值。因此,不需要更新权值—>已经达到稳定状态。
cornernet的思路来源
作者的思路其实来源于一篇多人姿态估计的论文基于CNN的2D多人姿态估计方法,通常有2个思路(Bottom-Up Approaches和Top-Down Approaches)1、Top-Down framework,就是先进行行人检测,得到边界框,然后在每一个边界框中检测人体关键点,连接成每个人的姿态,缺点是受人体检测框影响较大,代表算法有RMPE。2、Bottom-Up framework,就是先对整个图片进行每个人体关键点部件的检测,再将检测到的人体部位拼接成每个人的姿态,缺点就是可能将,代表方法就是openpose。创新点:基于多人姿态估计的Bottom-Up思想,首先同时预测定位框的顶点对(左上角和右下角)热点图和embedding vector,根据embedding vector对顶点进行分组。论文第二个创新是提出了corner pooling用于定位顶点。自然界的大部分目标是没有边界框也不会有矩形的顶点,依top-left corner pooling 为例,对每个channel,分别提取特征图的水平和垂直方向的最大值,然后求和。
cornernet的思路
论文提出one-stage的检测方法,舍弃传统的 anchor boxes思路,提出CornerNet模型预测目标边界框的左上角和右下角一对顶点,既使用单一卷积模型生成热点图和连接矢量:所有目标的左上角和所有目标的右下角热点图,每个顶点的连接矢量(embedding vector)。
△V求解简单
the strides is one
h2再带入相当于迭代公式
架构说明 FCN的应用 以及点的获取思路
RPN 得到的 proposal 在 RoI Align resampling 一下后,通过一些空洞卷积扩大感受野(eight 3×3 dilated convolutional layers),然后通过两个反卷积把尺寸扩大,再通过一个卷积生成与 multi-point 相关的 heat maps(9 个点就是 9 张图)。(选点逻辑说明)我们为每一个点提供一个交叉十字形状的 ground truth (5 pixels)
隐藏层传播信号
隐藏层传播信号。 符号wmn表示神经元m的输出与下一层神经元n的输入之间的连接权重
It is the practice of fine-tuning the weights of a neural net based on the error rate (i.e. loss)
私有化
1
图像输入
computer
过程描述
所示的具有两个输入和一个输出的三层神经网络
faster rcnn RPN 下一步操作提交给fast rcnn 进行
传统的缺陷
CornerNet认为Two-stage目标检测最明显的缺点是 Region Proposal 阶段需要提取的anchor boxes。(1)、提取的anchor boxes数量较多,比如DSSD使用40k, RetinaNet使用100k,anchor boxes众多造成anchor boxes征服样本均衡。(2)、anchor boxes需要调整很多超参数,比如anchor boxes数量、尺寸、比率,影响模型的训练和推断速率。
fastRNN
分割候选区使用贪心算法递归地将相似的区域合并成较大的区域使用生成的区域生成最终的候选区域建议R是region的缩写,意为对图像进行局部区域的处理。 该文的主要亮点在于:,一是利用的region proposals对物体探测中位置信息的精确处理,二是利用监督式预训练和主域特殊化的微调方法,代替了传统的非监督式预训练和监督式微调,使得MAP(mean average precision )得到大幅提升。现在来介绍原理图的具体实现。
正向传播
神经网络
.......
神经元计算分流
用于传播错误的权重系数Wmn等于在计算输出值期间使用的系数。 只有数据流的方向发生改变(信号从一个接一个地传输到输入端)。 该技术用于所有网络层。 如果传播的错误来自它们添加的少数神经元
根据每个位置锚点大小确定整个锚点域框个数
每一时刻输出误差的计算
ROI搜索问题--如何搜索
一个是label分类,一个是位置的非线性回归
we’ll notice that it converts all negative inputs to zero and the neuron does not get activatedfont color=\"#ff3333\
Non Linearity (ReLU)
对非均匀大小的输入进行最大池处理,以获得固定大小的特征图(如7×7)。满足输出的特殊要求
RCNN功能
分类:区域块是否有目标值提供偏置值:该算法会预测到一个人的存在,但该区域建议中那个人的脸可能会被切成两半。因此,偏移值有助于调整区域建议的边界框
递归神经网络
权重的反向计算非常麻烦
剩余2000框
回归问题主要解决方案是cnn,rcnn详细历程
CNN流行之后,Szegedy做过将detection问题作为回归问题的尝试(Deep Neural Networks for Object Detection),但是效果差强人意,在VOC2007上mAP只有30.5%。既然回归方法效果不好,而CNN在分类问题上效果很好,那么为什么不把detection问题转化为分类问题呢?RBG的RCNN使用region proposal(具体用的是Selective Search Koen van de Sande: Segmentation as Selective Search for Object Recognition)来得到有可能得到是object的若干(大概10^3量级)图像局部区域,然后把这些区域分别输入到CNN中,得到区域的feature,再在feature上加上分类器,判断feature对应的区域是属于具体某类object还是背景。当然,RBG还用了区域对应的feature做了针对boundingbox的回归,用来修正预测的boundingbox的位置。RCNN在VOC2007上的mAP是58%左右。RCNN存在着重复计算的问题(proposal的region有几千个,多数都是互相重叠,重叠部分会被多次重复提取feature),于是RBG借鉴Kaiming He的SPP-net的思路单枪匹马搞出了Fast-RCNN,跟RCNN最大区别就是Fast-RCNN将proposal的region映射到CNN的最后一层conv layer的feature map上,这样一张图片只需要提取一次feature,大大提高了速度,也由于流程的整合以及其他原因,在VOC2007上的mAP也提高到了68%。探索是无止境的。Fast-RCNN的速度瓶颈在Region proposal上,于是RBG和Kaiming He一帮人将Region proposal也交给CNN来做,提出了Faster-RCNN。Fater-RCNN中的region proposal netwrok实质是一个Fast-RCNN,这个Fast-RCNN输入的region proposal的是固定的(把一张图片划分成n*n个区域,每个区域给出9个不同ratio和scale的proposal),输出的是对输入的固定proposal是属于背景还是前景的判断和对齐位置的修正(regression)。Region proposal network的输出再输入第二个Fast-RCNN做更精细的分类和Boundingbox的位置修正。Fater-RCNN速度更快了,而且用VGG net作为feature extractor时在VOC2007上mAP能到73%。个人觉得制约RCNN框架内的方法精度提升的瓶颈是将dectection问题转化成了对图片局部区域的分类问题后,不能充分利用图片局部object在整个图片中的context信息。可能RBG也意识到了这一点,所以他最新的一篇文章YOLO(http://arxiv.org/abs/1506.02640)又回到了regression的方法下,这个方法效果很好,在VOC2007上mAP能到63.4%,而且速度非常快,能达到对视频的实时处理(油管视频:https://www.youtube.com/channel/UC7ev3hNVkx4DzZ3LO19oebg),虽然不如Fast-RCNN,但是比传统的实时方法精度提升了太多,而且我觉得还有提升空间。感谢有RGB这样的牛人们不断推动detection的进步&期待YOLO代码的公布
corner pooling为什么有效
1)目标定位框的中心难以确定,和边界框的4条边相关,但是每个顶点只与边界框的两条边相关,所以corner 更容易提取。(2)顶点更有效提供离散的边界空间,实用O(wh)顶点可以表示O(w2h2) anchor boxes。论文的第三个创新是模型基于hourglass架构,使用focal loss[5]的变体训练神经网络。
神经元网络
导数就是误差相对于权重变化的速率计算新权值 New weight = old weight — Derivative * learning rate
prefer the leaky relu reason?
权重初始值都设为1,
根据函数识出背景和前景20000框
微分分量不断向上分,计算每一个神经元的误差损失
[Condition]
重点
例子
区域选择算法
记忆功能源头
font color=\"#ff3333\
区域选择网络训练推荐模型
之前fastrcnn是基于图像金字塔或者滤波器金字塔的方式进行特征提取框选择新颖的“锚”框,它在多个尺度和纵横比下用作参考
算出的h1带入新式子
得到h1
卷积神经网络
input image as array of pixels
YOLO原理
划分成SxS的网格在每个网格中,我们取m个边界框。对于每个边界框,网络输出一个类概率和边界框的偏移值。选择类概率高于阈值的边界框,用于在图像中定位目标
系数h(原文为eta)影响网络教学速度。 有几种技术可以选择这个参数。 第一种方法是以大参数值开始教学过程。 在建立权重系数的同时,参数逐渐减少。 第二种更复杂的方法是以小参数值开始教学。 在教学过程中,参数在教学提前时增加,然后在最后阶段再次降低。 以低参数值开始教学过程可以确定加权系数符号。
YOLO
以前所有的目标检测算法都使用区域来定位图像中的目标相反,图像中有高概率只包含该对象的部分。预测边界框和这些框的分类概率。
传统流程
skip connect
+ operation1(params):returnType- operation2(params)- operation3()
得到h2
学习率为了保持变化平稳(To remember: Learn slow and steady!) 所以一般设置很小
基于类的线性支持向量机
矩阵An image of 6 x 6 x 3 array of matrix of RGB灰度是x1
CNN的作用
作为对应的每一个区域块的特征提取,传入svm进行分类
收藏
收藏
0 条评论
下一页