如果您使用冲浪特征,这意味着浮动偏移向量 [128] 或 [64] 取决于您的冲浪配置,您将设置神经网络如下
- 使用模型创建数据库:
-bikes
-cars
-autobus
-truck
- 为每种类型的物体拍摄不同的照片,例如 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
-二进制表示中的每一位将对应网络输出层中的一个神经元,代表一类待识别的对象
现在神经网络的配置将基于特征向量的大小和你想用这种方式识别的对象类型的数量;
输入层中的神经元数;64 或 128,取决于您配置和使用的 surf 特征向量的大小
神经网络中输出层中的神经元数量将是您在此示例中要识别的对象类别的数量 4
每个神经元所需的激活函数是 sigmoid 或 tanh 函数(http://www.learnartificialneuralnetworks.com/),因为 surf 特征由浮点数表示,如果您使用怪异特征或其他二进制局部特征描述符(Brisk, ORB, BRief ) 然后您将对每个神经元使用二进制激活函数,例如阶跃函数 o 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
在这个例子中,输出层有 4 个神经元,输入层有 128 个 0r 64 个神经元。
- 识别模式下神经网络的输出将是这4个神经元中具有最高值的神经元。
在开始训练阶段之前,它必须在 [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
训练神经网络时,停止标准是识别率,当识别率接近85-90%时
为什么使用神经网络而不是 svm 机器,svm 机器工作得很好,但它不能在像这样的非线性分类问题中或者当你有很多不同的对象类或对象类型时,它不能成为最好的分离类图,这种缺乏是识别阶段的结果
我建议您阅读一些有关神经网络理论的内容,以了解它们是如何工作的
http://link.springer.com/chapter/10.1007%2F11578079_10
opencv 有机器学习类到神经网络 mlp 模块
希望这可以帮到你