- 博客(39)
- 收藏
- 关注
原创 SSD边框预测原理
在ssd检测中,有一个重要的功能就是物体框的回归,接下来我来说一下ssd是怎么进行边界框回归的。首先上图 我们观察图中狗的边框,其中黑色的是真实框(预先人为标定的),红色的为预测框(ssd最后预测的结果),黄色的为先验框(形成预测框的,首先得到的框)。通俗的来说一下,我们经过6层不同大小的featmap后,会有很多的候选框,论文中一个类别有8732个,我们选取与真实框IOU最大的...
2019-12-22 11:56:35 2303
原创 SSD主干网络(基于vgg16)
在这里我们来说一说,基于vgg16的ssd的整体网络结。首先,先来说一遍vgg16。如图,在图中D列就是今天要说的vgg16结构。如图,下图为vgg16的结构示意。简单的来说一下,第一个肯定是输入(图片),224*224*3指的是图片的分辨率是224*224,通道数是3。到了block1处,卷积核为3*3*3,有64个这样子的卷积核。3*3*3是因为对一个通道有3*3...
2019-12-15 22:52:36 4046 1
原创 深度学习之数学基础知识(一) 矩阵的分解例题
深度学习需要一定的数学基础,其中一部分就是关于线性代数的基础,在这里我将几种常见的矩阵分解写了出来,仅供参考。
2019-12-07 13:54:58 1421
原创 cv2.imread与Image.open打开图片格式的不同与调整
import cv2import numpy as npfrom PIL import Image#图片文件路径path = 'E:/0_0.jpg'#用cv2打开图片img_cv2 = cv2.imread(path)#用PIL打开文件img_pil = Image.open(path)#将读取的图片转换为数组img_pil = np.asarray(img_pil)#显...
2019-11-29 16:41:56 7376
原创 tensorflow 搭建神经网络框架
1)准备数据,打开文件夹读取数据def read_data(data_dir): datas = [] labels = [] for fname in os.listdir(data_dir): fpath = os.path.join(data_dir, fname) image = Image.open(fpath) ...
2019-11-23 00:27:00 293
原创 tensorflwo-SSD训练自己的数据集
环境python3.6.9 tensorflow1.14.0 cuda 9.0.176 cudnn 7.3.1,使用pycharm作为编辑器1)下载ssd代码,地址:https://github.com/balancap/SSD-Tensorflow解压缩,将自己的数据集放在VOC2007下2)更改datasets下的pascalvoc_common.py代码,如...
2019-11-16 12:48:57 348
原创 目标检测 Two Stage方法
Two Stage流程如下:整体流程介绍:1).用主干网络(如vgg网络等),对原图片进行特征提取处理,对应流程图中的Input->Conv_Pooling以及图片中的conv layers立方体块(因为主干网络是多层的conv与Pooling层的结合),生成feature map特征图。2).通过RPN网络,对主干网络处理生成的feature map进行处理,对应con...
2019-11-09 16:52:51 422
原创 目标检测 One Stage方法
One Stage的目标检测是针对于Two Stage来说的。说的简单一点,One Stage方法讲究一步到位,通过主干网络+回归网络直接生成目标位置和类别,所以叫做One Stage方法。Two Stage方法则相对于One Stage方法多了一个RPN网络,用来预测检测框,然后在对这些检测框进行判断。One Stage方法使用CNN来进行特征提取,直接回归物体的类别概率和位置坐标值,相...
2019-11-02 22:30:07 464
原创 VOC数据集的制作
在我们训练SSD模型时,有些数据集需要我们自己制作的,接下来我就说一说如何自己制作一个VOC数据集。1)创建文件目录如下:handvoc是你自己数据集的名字,在该目录下有第三个文件夹如下所示。其中ImgeSets下还有一个Main文件夹文件夹说明:JPEGImages中存放要训练的图片。Annotations中这XML信息,XML文件名与训练图片的文件名一一对...
2019-10-26 21:36:57 3350 3
原创 Anchor Box理解
在目标检测(Object Detection)之中,有两个重要目的。一是判断出图片中物体的类别。如图所示,这是用卷积神经网络做的物体类别识别,图片左边是待识别的图片,一个银色的小轿车。中间位置是我们构建的CNN卷积层。右边是我们的DNN全连接层以及最后的结果。可以看到最后的结果中,所属car的输出值最大,其次是truck等等。这个结果表明这个图片被我们神经网络识别为car。 ...
2019-10-19 13:15:41 1098
原创 vgg理解
Vgg16这个名词对于要做神经网络深度学习的人来说一定不陌生,当我们在看相关的教程或者案例的时候,都会出现Vgg16。那么它到底是什么?Vgg16是一个卷积神经网络的模型,它是一个被预训练好的模型。 Vgg模型(网上配图) 每次网上都是贴出这个网络模型结构就不了了之,我就来仔细说一下(个人理解,欢迎指出错误)。首先这个网络...
2019-10-12 16:50:32 3577 2
原创 基于图的分割
基于图的分割(Graph-Based Segmentation),就是利用图的方法来将图片进行分割。首先介绍图的知识。我们将一个图定义为一个二元组的形式: ,其中是顶点的集合,是连接中两个不同顶点集合。 如果E中的顶点对(边)是有序的,则称G为有向图。如果顶点对是无序对,则称G是无向图。如图所示(网上图片):树:可以看做没有回路特殊的图,树中的任意节点不构成闭合回路。比如我们最常见...
2019-10-07 09:09:19 709
原创 非极大值抑制
非极大值抑制(Non-maximum suppression,NMS)的意思就是抑制不是极大值的元素。非极大值抑制可以用在很多的方面, 今天讨论一下它在目标框(Bounding Box)上的应用。我们在做目标识别的时候,有两个主要要实现的目标。一是目标的识别,即识别物体是什么, 是猫或者是狗之类的物体。二是识别目标的位置,我们需要将识别到的物体用框框起来。非极大值抑制可以应用在目标的边框选取上...
2019-09-28 19:13:31 288
原创 haar分类
今天说一说haar分类算法。首先介绍haar-like特征。haar-like的特征有边缘特征、线性特征、中心特征和对角线特征。我们使用特征模板来表示特征的计算,如图所示:这些特征分别对应着不同的矩阵以便于进行计算,比如对应的矩阵可以为,计算的最后结果就是白色区域的像素值(可以为灰度)减去 黑色区域的像素值。需要注意的是这个矩阵是可以放缩大小的,并且这个矩阵是可以在图片...
2019-09-21 17:52:35 2758
原创 HOG
HOG是一种可以基于形状边缘特征的描述算子。它的思想是通过计算像素点的方向与幅度,统计其梯度直方图,该直方图作为一种特征值,可以直接用作SVM上直接进行分类检测。方法步骤如下:1)对于图片进行预处理,裁剪,用Gamma校正法对输入图像进行颜色空间的标准化,并将图片转化为灰度图(不需要颜色信息)。2)计算每个像素的梯度(方向和幅度)。3)划分滑动窗口,在滑动窗口内划分块,在块内划分出...
2019-09-14 20:16:37 958
原创 AdaBoost
AdaBoost算法是一种基于迭代的分类算法。在说AdaBoost之前,我们应该先了解Boost算法。Boost字面意思有增长之意,事实也是如此,Boost算法的核心是多个弱分类器“增长”为一个强分类器。简而言之,Boost算法就是先训练较为简单的弱分类器,弱分类器可以理解为一种逻辑简单的分类器,它的训练和实现较为容易,然后再将他们“组合”成一个强分类器。而采用不同的损失函数,就有着不同类型的...
2019-09-07 17:25:22 517
原创 LRN与BN
LRN是作用于卷积的一种优化,即局部响应归一化层。它的作用是减少过拟合的产生,一般用在卷积RULE激活函数之后的一层。具体是实现如下:公式看起来有一些麻烦,但我们不需要关心公式的组成,我们考虑其中的原理即可。为什么要在RELU后一层加上这个来改变当前层输出结果?他会对局部神经元创建对比,使得其中响应值较大的神经元变得更大,使得响应小的神经元变得更小,可以更加快速的训练模型,并且相比于不...
2019-08-31 18:54:54 1971 3
原创 SVM-大间隔划分超平面模型简单求解
我们知道通过求得的最小值来得到模型,但是要记住,求解是有约束条件的s.t.。为了方便求解我们通过拉格朗日乘子法可以得到它的对偶问题,即将约束条件添加拉格朗日乘子,则该函数就可以写作我们对求w,b的零偏导,有以及,将带回原式中消去w,b有对应的对偶问题 . s.t求出后有最终结果且要满足,,这三个条件...
2019-08-22 00:10:18 826
原创 支持向量机(SVM)的简单介绍
SVM最基本的应用是分类,特别是对于非线性以及多维数据的解决有很大的作用,最常见的应用就是自然语言处理。下面,我来简单的介绍一下最基本的SVM。如图:在图中,有两组类别的数据叉(×)和圈(○),我们的目的是将他们能够区别开来,如何去做?在这个例子中,我们可以看到叉和圈都可以被红色和黄色的线区别开来,但是我们的目的不仅仅是区分样本中的数据,为了能够更好的区别后续的数据,可以看出红色的...
2019-08-13 15:03:31 1194
原创 决策树的优化-剪枝
为什么决策树需要剪枝?我们可以类比于神经网络的“过拟合”问题来进行思考。在神经网络之中,会出现过拟合问题,即出思安对特定的样本识别率升高,对其余样本的识别率降低。在决策树中也会出现类似的问题,会出现枝条过多的现象,是问题复杂化,准确率却得不到上升。决策树的剪枝分为2种,一种是预剪枝,第二种是后剪枝。预剪枝:在创建进行到某一个节点处,我们先计算当前节点的准确率,然后在按照该节点的属性进行分类...
2019-08-07 00:35:18 1441
原创 决策树的划分选择
定义信息熵:,其中为第k个样本占比,D为样本集。定义信息增益:,其中V为分支节点,a为属性。使用举例(书上的例子):编号 色泽 根蒂 敲声 纹理 脐部 触感 好瓜1 青绿 蜷缩 浊响 清晰 凹陷 硬滑 是2 乌黑 蜡缩 沉闷 清晰 凹陷 硬滑 是3 乌黑 蜡缩 1虫响 清晰 凹陷 硬滑 是4 青绿 蜷缩 沉闷 清晰 凹陷 硬滑 是5 浅白 蜷缩 浊响 清晰 ...
2019-08-01 11:11:50 762
原创 决策树
决策树是一种常见的机器学习,可以从给定的数据之中创建一个模型,模型创建后可以对新的样本进行判定和识别。决策树的生成如下:假设有训练集。属性集。我们基于此构造一个决策树(最基本的),大致思路如下:生成node节点。然后开始根据属性进行判断,如果训练集的所有样本都属于属性集的一个属性,则node就作为类的叶节点。如果属性集为空或者剩下训练集的所有属性取值相同,那么将node设为叶节...
2019-07-25 13:24:25 163
原创 边缘连接
边缘连接指的是将已有的离散点连成轮廓的意思。通常我们将图像用边缘微分算子进行卷积后,我们会得到由微分算子响应的点,通过阈值排除,得到最后的边缘点,即像素突变点,然后再由这些边缘点通过边缘连接得到最后的轮廓图。1.局部处理这个很好理解,就是检测一个点的周围点,通过比较幅度与角度的差值,在一定的范围内就认定是一条边缘上的点。过程如下:设定待检测点位(x,y),(s,t)为其周围像素点。...
2019-07-05 09:47:34 5040
原创 简单的二阶算子的边缘检测
上次说的点、线检测中用到了sobel、Roberts、Prewitt等等都是一阶算子,拉普拉斯是二阶算子。首先说一下一阶和二阶算子的相同与不同。无论是一阶算子还是二阶算子,本质上都是通过对于灰度突变的检测,当检测到图像的边缘时,微分算子都会对其进行响应,我们所使用的模板都是和为1的模板,这样一来在灰度相同的区域响应会为0,而边缘处时会出现不同的值。而不同的是相比于一阶算子来说,二阶算子对...
2019-06-27 20:28:28 2880
原创 点、线检测
点检测:我们通过导数来进行点的检测。在离散数据,也就是图像的灰度集合之中,我们用数字差分来表示导数。如一阶导数的数字差分 ,二阶导数的数字差分 将差分位置从x+1移到x有上面是对于x方向的差分,求x和y方向的二阶导数的差分和为拉普拉斯算子。有 其中 ...
2019-06-20 16:41:23 2663
原创 CNN理解(二)
前面说完了CNN前向传播,这里我就说一下CNN反向传播。CNN有卷积层、池化层前面说完了CNN前向传播,这里我就说一下CNN反向传播。CNN有卷积层和池化层。首先我们要明白我们反向传播是为了谁。类比于DNN中,我们反向传播是为了神经元中的权重w和偏置b。而我们在CNN中就是为了卷积层中的卷积核。已知池化层的,求前一层的。这个比较简单,我们知道池化层的作用是将传入的参数降低规模传...
2019-06-12 11:54:51 188
原创 二值图的连通区域问题
连通区域:四连通区域:如图,有黑色点的方格视为一个图像,总的来说就是一个点的上下左右视为同一物体。八连通区域:如图,有黑色点的方格视为一个图像,和四联通区域相比,八连通区域多了四个点,分别是左上、左下、右上、右下四个点。但是无论是四连通区域或者八连通区域都有着他的不足之处。例如:如图,我们想在图中在这分割出一个连通区域,形成一条简单的必和曲线。假设图中B视为...
2019-06-06 11:15:15 1771
原创 二值图的几何性质
今天来说一说二值图的几何性质,包括二值图的位置和朝向。首先,定义图像函数b(x,y),x与y代表横纵坐标,b(x,y)代表物体,有物体 时值为1,否则为0。位置指的是图像区域位置,也就是图像的重心。举一个通俗易懂的例子,你拿着一块厚度均匀的木板在手上,这是你用你的一个指尖把这个木板顶起来,你指尖与木板接触的位置就是这个木板的重心。对于密度均匀的规则物体来说,重心就是他的中心点。而对于非规则...
2019-05-30 19:47:46 771
原创 CNN理解(一)
之前说过了DNN,大家也对神经网络有了一个大概的了解,知道了什么叫做前向传播,什么叫做反向传播。我们可以类比的进行卷积(CNN)的学习。首先,回想一下DNN全连接神经网络的前向传播。可以看到,在DNN中,每一层的参数(输入层)或者计算结果(中间层)都会直接传给下一层的所有神经元,如此反复,直到最后一层的输出层得到结果。而CNN呢?他也是和DNN一样,每一层的参数(输入层)或者计...
2019-05-23 12:09:16 735
原创 图形学技术综述
1.计算机图像学的发展历史。 1950 年,第一台图形显示器作为美国麻省理工学院(MIT)旋风 I 号(Whirlwind I)计算 机的附件诞生了。该显示器用一个类似于示波器的阴极射线管(CRT)来显示一些简单的图形。计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。到 50 年代末期,MIT 的林 肯实验室在“旋风”计算机上开发 SAGE 空中防御体系,第一次使用了具有指...
2019-05-16 19:27:07 1337
原创 DNN理解(五)
代价函数的选择在我们训练时可能会遇到学习缓慢的问题。学习缓慢问题可能时步长的问题,步长设置的太小导致每次权重的变化过慢,而另一个原因就可能是激活函数的问题了,我们可以通过选择不同的代价函数来规避这个问题。如下图神经元所示::我们训练有一个参数的神经元,使其输入1,输出为0,激活函数为sigmoid的模型。初始w=0.6,b=0.9,训练情况如下cost为代价函数 Epoch为训...
2019-05-08 20:35:21 583
原创 DNN理解(四)
这次我们来说一说DNN的反向传播过程。首先,我们要明白一点,反向传播的目的是什么?前向传播是为了计算出最后结果,将输入的变量进行一层一层的进行计算,直至最后的输出层。前向传播是为了得出最后结果,而后向传播是为了能够让前向传播得到正确的结果。反向传播就是神经网络的训练过程,也就是利用梯度下降调整参数,得到正确结果的过程。所以说,研究反向传播的时候,得先弄明白前向传播的过程和具体计算过程。...
2019-04-30 17:20:31 723
原创 DNN理解(三)
这次我们来说一说梯度下降问题。1.什么是梯度下降?2.梯度下降用来干什么的?3.如何使用梯度下降?我们将围绕着三个问题进行说明。首先我先来说一下梯度下降是什么。举一个例子:,这是一个一元二次函数。对于这个函数来说,就是它的梯度,也就是他的导数。这个很好理解,梯度可以看做一个使得函数变大变小的方向,角度,我们顺着这个梯度就可以使得这个函数变大或者变小,并且依次得到该函数极值点(不...
2019-04-24 19:21:16 647
原创 DNN理解(二)
书接上文,上面介绍的是DNN的基本结构和一些要用到的公式。在这里我将要说一下DNN的前向传播,上图先:我来解释一下这个图。layer1是输入层,layer2是隐藏层,layer3是输出层。当然层数不是固定的,每层的神经元个数也不是固定的。一般来说第一层是输入参数的,最后一层是输出层,中间的都叫做隐藏层。在输入层,每一个参数对应一个神经元(可以这么理解),每一个参数都要传给下一层(隐...
2019-04-17 14:21:03 1304
原创 DNN理解(一)
再说DNN之前,我们先说一下什么是机器机器学习以及他们的关系。首先说一下机器学习是什么,在这里我不会去将机器学习的定义列出来,当然目前对于机器学习也没有一个真正的的定义。我会将我理解的机器学习说出来,也许说的会有错误,大家只需参考即可。在我看来,机器学习就是机器通过大量的样本进行所谓的学习,得到一个尽量逼近真实的模型,这个行为就叫做机器学习。机器学习中的学习说白了就是调整参数的过程。我们根...
2019-04-10 16:40:40 12289
原创 数字图像的存储与颜色空间简单了解
简单说一下数字图像的存储方式与一些常用颜色空间。首先是数字图像的存储,图像的存储分为两类:位图存储和矢量存储。位图存储也叫做点阵存储,原理十分简单,就是按照原式图像的位置“一对一”式创建点阵矩阵。每一个位置存储着对应位置的像素点(多维),这个像素点可以是灰度、亮度或者颜色组成之类的。对于位图存储来说,存储方式简单,甚至是粗暴,但其优点是简单明了,且最为贴近真实图像。缺点也十分明显,简单...
2019-04-02 19:24:02 2034
原创 数据结构-链表
链表是数据结构中的基础,在这里我会将一些链表操作的原理和代码列出:1.两个链表中的数字相加,比如链表A中存的数字依次是1111111111,链表B中存的数字依次是99999,那么我们要得到一个新的链表C,C中存的是1111111111+99999,也就是1112111110作为最终结果存在C中。这个的思想主要是链表的反转,思考一下,数字相加,都是从低位开始相加,而在链表之中头节点存的是高位数,...
2019-03-27 14:28:24 116
原创 数据结构-查找
1.二分查找思想:二分查找时基于已经排好顺序的数组进行操作的,数组从小到大进行排序,将查找的数与数组中间相比较,如果小于则将其与左半部分中间数值进行比较,反之则与右半部分中间数值进行比较,持续上述操作直至找到该数值或者不存在。这种方法没进行一次就会将范围缩小一半,肯定比舒徐查找快很多,但是注意这需要已经排好顺序的数组。代码如下:#include <stdio.h>voi...
2019-03-20 19:50:15 101
原创 数据结构-排序
1.选择排序思想:选择排序是一种最为基本的排序方式,很简单,比如要将10个数字从小到大进行排序的话,可以按照如下步骤进行操作。首先记录第一个位置的数字,然后依次与后面的数字进行比较,如果比记录的数字小,则进行交换。然后记录第二个位置的数字继续上述操作,直至最后一个数为止。代码如下:#include <stdio.h>#include <stdlib.h>...
2019-03-13 17:01:58 185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人