Col*_*ino 8 python opencv image-processing surf neural-network
我想从静态图像中识别车辆(汽车,自行车等).我正在考虑使用SURF来获取有用的关键点和描述符,然后训练MLP(多层感知器)神经网络.但是我不知道神经网络的输入是什么以及它的输出是什么,以便我可以识别车辆所在的图像部分(可能是围绕它绘制的矩形).我知道SURF可以返回图像中的有用关键点及其描述符(我已经这样做了).关键点具有角度,并且每个关键点对应于64或128长的Vector作为描述符.我不知道的是这些关键点究竟是什么以及如何将它们用作神经网络的输入.
我正在使用OpenCV和Python.
我是使用SURF和其他特征提取方法的新手.任何有关这方面的帮助都会非常好.
如果你使用冲浪功能,这意味着浮动设置矢量[128]或[64]取决于你的冲浪配置,你将设置神经网络如下
- 使用模型创建数据库:
-bikes
-cars
-autobus
-truck
Run Code Online (Sandbox Code Playgroud)
- 拍摄每种类型物体的不同照片,例如10张不同车型的照片,10张不同车型的照片,10张不同车型的照片......等等,每张照片关闭每个对象类提取其冲浪特征向量.
- 每种类型的对象将代表神经网络中的一类对象;
-car ;object class 1 =binary representaation in 4 bits= 0 0 0 1
-bikes ;obejct class 2 =binary representaation in 4 bits= 0 0 1 0
-truck ;obejct class 3 =binary representaation in 4 bits= 0 0 1 1
-ball ;obejct class 4 =binary representaation in 4 bits= 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
- 二进制repesentacion中的每个位将对应于网络输出层中的一个神经元,并表示要识别的一类对象
现在,神经网络的配置将基于特征向量的大小和您想要以这种方式识别的对象类型的数量;
输入图层中的nuerons数; 64或128,取决于您配置和使用的冲浪特征向量的大小
神经网络中输出层中的nuerons数量将是您在此示例中想要识别的对象类别数量4
每个神经元的激活函数是sigmoid或tanh函数(http://www.learnartificialneuralnetworks.com/),因为冲浪特征由浮点数表示,如果你使用怪胎或另一个二进制局部特征描述符(Brisk, ORB,BRief)那么你将对每个神经元使用二元激活函数,如step function sigm函数
用于训练网络的算法是反向传播
在继续之前,您需要设置并准备数据集以训练神经网络
例
-all feature vector extracted from picture belong a car will be label or asociated to class 1
-all feature vector extracted from picture belong a bike will be label or asociated to class 2
-all feature vector extracted from picture belong a truk will be label or asociated to class 3
-all feature vector extracted from picture belong a ball will be label or asociated to class 4
Run Code Online (Sandbox Code Playgroud)
在这个例子中,你将在输出层中有4个神经元,在输入层中有128个0r 64个神经元.
- 识别模式下神经网络的输出将是这4个nuerons中具有最高值的神经元.
在开始训练阶段之前,它的necesarry在区间[0,1]中对数据集中的所有特征使用归一化,因为神经网络的输出是输入向量属于一类对象的概率在数据集中.
用于训练网络的数据集必须按如下方式拆分:
-70% off the data used to train
-15% off the data used to validate the network arquitecture (number of neurons in the hidden layyer)
-15% off the data used to test the final network
Run Code Online (Sandbox Code Playgroud)
在训练神经网络时,停止标准是识别率,当它接近85-90%时
为什么使用神经网络而不是svm机器,svm机器工作正常,但它不能做出最好的分离类映射,没有像这样的线性分类问题,或者当你有很多不同的对象类或对象类型时,这个缺点是aprecciate在识别阶段结果
我建议你阅读一些关于神经网络理论的知识,以了解它们是如何工作的
http://link.springer.com/chapter/10.1007%2F11578079_10
opencv有机器学习类到神经网络mlp模块
希望这可以帮到你