【模式识别】OpenCV中使用神经网络 CvANN_MLP

【模式识别】OpenCV中使用神经网络 CvANN_MLPOpenCV的ml模块实现了人工神经网络(ArtificialNeuralNetworks,ANN)最典型的多层感知器(multi-layerperceptrons,MLP)模型。由于ml模型实现的算法都继承自统一的CvStatModel基类,其训练和预测的接口都是train(),predict(),非常简单。下面来看神经网络CvANN_MLP的使用~定义神经网络及参数:…

大家好,又见面了,我是你们的朋友全栈君。

OpenCV的ml模块实现了人工神经网络(Artificial Neural Networks, ANN)最典型的多层感知器(multi-layer perceptrons, MLP)模型。由于ml模型实现的算法都继承自统一的CvStatModel基类,其训练和预测的接口都是train(),predict(),非常简单。

下面来看神经网络 CvANN_MLP 的使用~

定义神经网络及参数:

 

//Setup the BPNetwork
	CvANN_MLP bp; 
	// Set up BPNetwork's parameters
	CvANN_MLP_TrainParams params;
	params.train_method=CvANN_MLP_TrainParams::BACKPROP;
	params.bp_dw_scale=0.1;
	params.bp_moment_scale=0.1;
	//params.train_method=CvANN_MLP_TrainParams::RPROP;
	//params.rp_dw0 = 0.1; 
	//params.rp_dw_plus = 1.2; 
	//params.rp_dw_minus = 0.5;
	//params.rp_dw_min = FLT_EPSILON; 
	//params.rp_dw_max = 50.;

 

 

 

可以直接定义CvANN_MLP神经网络,并设置其参数。 BACKPROP表示使用back-propagation的训练方法,RPROP即最简单的propagation训练方法。

使用BACKPROP有两个相关参数:bp_dw_scale即bp_moment_scale:

【模式识别】OpenCV中使用神经网络 CvANN_MLP

使用PRPOP有四个相关参数:rp_dw0, rp_dw_plus, rp_dw_minus, rp_dw_min, rp_dw_max:

【模式识别】OpenCV中使用神经网络 CvANN_MLP

上述代码中为其默认值。

设置网络层数,训练数据:

 

// Set up training data
	float labels[3][5] = {
  
  {0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}};
	Mat labelsMat(3, 5, CV_32FC1, labels);

	float trainingData[3][5] = { {1,2,3,4,5},{111,112,113,114,115}, {21,22,23,24,25} };
	Mat trainingDataMat(3, 5, CV_32FC1, trainingData);
	Mat layerSizes=(Mat_<int>(1,5) << 5,2,2,2,5);
	bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM
	                                           //CvANN_MLP::GAUSSIAN
	                                           //CvANN_MLP::IDENTITY
	bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params);

layerSizes设置了有三个隐含层的网络结构:输入层,三个隐含层,输出层。输入层和输出层节点数均为5,中间隐含层每层有两个节点。

 

create第二个参数可以设置每个神经节点的激活函数,默认为CvANN_MLP::SIGMOID_SYM,即Sigmoid函数,同时提供的其他激活函数有Gauss和阶跃函数。

【模式识别】OpenCV中使用神经网络 CvANN_MLP

使用训练好的网络结构分类新的数据:

然后直接使用predict函数,就可以预测新的节点:

 

Mat sampleMat = (Mat_<float>(1,5) << i,j,0,0,0);
			Mat responseMat;
			bp.predict(sampleMat,responseMat);

 

完整程序代码:

 

 

 

//The example of using BPNetwork in OpenCV
//Coded by L. Wei
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

int main()
{
	//Setup the BPNetwork
	CvANN_MLP bp; 
	// Set up BPNetwork's parameters
	CvANN_MLP_TrainParams params;
	params.train_method=CvANN_MLP_TrainParams::BACKPROP;
	params.bp_dw_scale=0.1;
	params.bp_moment_scale=0.1;
	//params.train_method=CvANN_MLP_TrainParams::RPROP;
	//params.rp_dw0 = 0.1; 
	//params.rp_dw_plus = 1.2; 
	//params.rp_dw_minus = 0.5;
	//params.rp_dw_min = FLT_EPSILON; 
	//params.rp_dw_max = 50.;

	// Set up training data
	float labels[3][5] = {
  
  {0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}};
	Mat labelsMat(3, 5, CV_32FC1, labels);

	float trainingData[3][5] = { {1,2,3,4,5},{111,112,113,114,115}, {21,22,23,24,25} };
	Mat trainingDataMat(3, 5, CV_32FC1, trainingData);
	Mat layerSizes=(Mat_<int>(1,5) << 5,2,2,2,5);
	bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM
	                                           //CvANN_MLP::GAUSSIAN
	                                           //CvANN_MLP::IDENTITY
	bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params);


	// Data for visual representation
	int width = 512, height = 512;
	Mat image = Mat::zeros(height, width, CV_8UC3);
	Vec3b green(0,255,0), blue (255,0,0);
	// Show the decision regions given by the SVM
	for (int i = 0; i < image.rows; ++i)
		for (int j = 0; j < image.cols; ++j)
		{
			Mat sampleMat = (Mat_<float>(1,5) << i,j,0,0,0);
			Mat responseMat;
			bp.predict(sampleMat,responseMat);
			float* p=responseMat.ptr<float>(0);
			float response=0.0f;
			for(int k=0;k<5;i++){
			//	cout<<p[k]<<" ";
				response+=p[k];
			}
			if (response >2)
				image.at<Vec3b>(j, i)  = green;
			else  
				image.at<Vec3b>(j, i)  = blue;
		}

		// Show the training data
		int thickness = -1;
		int lineType = 8;
		circle(	image, Point(501,  10), 5, Scalar(  0,   0,   0), thickness, lineType);
		circle(	image, Point(255,  10), 5, Scalar(255, 255, 255), thickness, lineType);
		circle(	image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
		circle(	image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);

		imwrite("result.png", image);        // save the image 

		imshow("BP Simple Example", image); // show it to the user
		waitKey(0);

}

结果:

 

【模式识别】OpenCV中使用神经网络 CvANN_MLP

 

 

 

(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148610.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gg修改器自动点击脚本_gg修改器变速教程

    gg修改器自动点击脚本_gg修改器变速教程源代码:PrivateSubCommand1_Click()Dimbackback=mciSendString&(“CLOSENN”,0,0,0)EndSubPrivateSubCommand2_Click()Dimbackback=mciSendString&(“OPEN”App.Path”\TEST.mid””TYPESEQUENCERALIASNN”,0&,0,…

    2025年9月14日
    8
  • 跨境上网_怎样合法跨境上网

    跨境上网_怎样合法跨境上网多粒度网络(MGN)的结构设计与技术实现代码实现:(一)参考代码:https://github.com/hugh67/reid-MGN-pytorch(二)我的实验:目标平台:类脑平台https://www.bitahub.com/GPU:1块1080训练集:Market1501,DukeMTMC-reID实验次数:2(三)实验1:对Mar…

    2022年10月5日
    4
  • cstring头文件是什么意思_cout的头文件

    cstring头文件是什么意思_cout的头文件序号 MFC工程中 文件 (1) 否 atlstr.h (2) 是 afx.h

    2025年11月5日
    6
  • JavaScript闭包

    JavaScript闭包闭包内部函数拥有比它的外部函数更长的生命周期!!!函数可以访问它被创建时所处的上下文环境!!!内部函数能访问外部函数的实际变量,而无需复制!实例:/**点击li标签时,调用其onclick事件,执行代码段function(){alert(i);}*此时,i在全局中的值为4*/window.onload=init;functioninit(){ var

    2022年6月29日
    23
  • tfs安装教程_2008安装教程

    tfs安装教程_2008安装教程TFS2010安装配置一、安装过程注意:1、服务器内存要求2、需要SQLSERVER2005以上;3、选择“基础安”。二、TFS配置1、Server端配置。      (1)新建“团队项目集合”      (2)新建用户      注意:TFS的用户主要与windows用户结合2、Client端      注意:TFS与Client端与VS紧密整合,没有VSS那样的单独客户端(1)打开VS,连接到TFS      (2)创建“团队项目(3)将解决方案添加到TFS,右击解决方案,“添加到源代码

    2022年9月23日
    2
  • 双击pycharm没反应_pycharm为啥运行不了

    双击pycharm没反应_pycharm为啥运行不了PYCHARM双击无反应初识python和深度学习,按网上教程安装好anaconda和pycharm后,发现anacondanavigator,pycharm以及anaconda里装好的jupyternotebook都启动不了。。。只能通过.bat打开最后还是网上大神nb,成功解决了我的问题,下面是我看到的三种解决方法1.重置winsock(未解决我的问题)以管理员身份打开cmd输入命令netshwinsockreset重启电脑2.修改pycharm64.exe.vmoption

    2022年8月27日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号