1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
2.1 遗传算法
遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。
其主要步骤如下:
1.初始化
选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。
通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。
2.选择
根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。
给出目标函数f,则f(bi)称为个体bi的适应度。以
为选中bi为下一代个体的次数。
显然.从式(3—86)可知:
(1)适应度较高的个体,繁殖下一代的数目较多。
(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。
这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。
3.交叉
对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。
2.2hog特征提取
HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);
2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
4)将图像划分成小cells(例如6*6像素/cell);
5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;
6)将每几个cell组成一个block(例如3*3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。
7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。
2.3 GRNN
广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好,还可以处理不稳定数据。虽然GRNN看起来没有径向基精准,但实际在分类和拟合上,特别是数据精准度比较差的时候有着很大的优势。
GRNN是RBF的一种改进,结构相似。区别就在于多了一层求和层,而去掉了隐含层与输出层的权值连接(对高斯权值的最小二乘叠加)。
1.输入层为向量,维度为m,样本个数为n,线性函数为传输函数。
2.隐藏层与输入层全连接,层内无连接,隐藏层神经元个数与样本个数相等,也就是n,传输函数为径向基函数。
3.加和层中有两个节点,第一个节点为每个隐含层节点的输出和,第二个节点为预期的结果与每个隐含层节点的加权和。
4.输出层输出是第二个节点除以第一个节点。
在GRNN神经网络中,一旦确立了学习样本数据后,只需要调整一个参数“光滑因子”即可确定其网络结构和权值,因此训练GRNN网络要比传统的神经网络更加便捷。所以选择GRNN。
3.MATLAB核心程序
ftest = func_feature2(X4);
yout = round(net2(ftest'));
figure;
subplot(121);
imshow(X3);
subplot(122);
imshow(X4);
if yout == 1
title('识别结果为:非机动车行驶');
end
if yout == 2
title('减速让车');
end
if yout == 3
title('禁止鸣笛');
end
if yout == 4
title('禁止左转');
end
if yout == 5
title('慢');
end
if yout == 6
title('人行通道');
end
if yout == 7
title('限制速度');
end
if yout == 8
title('右转');
end
if yout == 9
title('注意行人');
end
end
if isempty(X4) == 0 & isempty(X5) == 0 & isempty(X6) == 1;
ftest = func_feature2(X4);
yout1 = round(net2(ftest'));
ftest = func_feature2(X5);
yout2 = round(net2(ftest'));
figure;
subplot(131);
imshow(X3);
subplot(132);
imshow(X4);
if yout1 == 1
title('识别结果为:非机动车行驶');
end
if yout1 == 2
title('减速让车');
end
if yout1 == 3
title('禁止鸣笛');
end
if yout1 == 4
title('禁止左转');
end
if yout1 == 5
title('慢');
end
if yout1 == 6
title('人行通道');
end
if yout1 == 7
title('限制速度');
end
if yout1 == 8
title('右转');
end
if yout1 == 9
title('注意行人');
end
subplot(133);
imshow(X5);
if yout2 == 1
title('识别结果为:非机动车行驶');
end
if yout2 == 2
title('减速让车');
end
if yout2 == 3
title('禁止鸣笛');
end
if yout2 == 4
title('禁止左转');
end
if yout2 == 5
title('慢');
end
if yout2 == 6
title('人行通道');
end
if yout2 == 7
title('限制速度');
end
if yout2 == 8
title('右转');
end
if yout2 == 9
title('注意行人');
end
end