日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV中使用神经网络 CvANN_MLP

發(fā)布時(shí)間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV中使用神经网络 CvANN_MLP 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文:http://blog.csdn.net/xiaowei_cqu/article/details/9027617

OpenCV的ml模塊實(shí)現(xiàn)了人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks, ANN)最典型的多層感知器(multi-layer
perceptrons, MLP)模型
由于ml模型實(shí)現(xiàn)的算法都繼承自統(tǒng)一的CvStatModel基類(lèi),其訓(xùn)練和預(yù)測(cè)的接口都是train(),predict(),非常簡(jiǎn)單。

下面來(lái)看神經(jīng)網(wǎng)絡(luò)?CvANN_MLP?的使用~

定義神經(jīng)網(wǎng)絡(luò)及參數(shù):

[cpp]?view
plaincopy

  • //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神經(jīng)網(wǎng)絡(luò),并設(shè)置其參數(shù)。?BACKPROP表示使用back-propagation的訓(xùn)練方法,RPROP即最簡(jiǎn)單的propagation訓(xùn)練方法。

    使用BACKPROP有兩個(gè)相關(guān)參數(shù):bp_dw_scale即bp_moment_scale:

    使用PRPOP有四個(gè)相關(guān)參數(shù):rp_dw0, rp_dw_plus, rp_dw_minus, rp_dw_min, rp_dw_max:

    上述代碼中為其默認(rèn)值。

    設(shè)置網(wǎng)絡(luò)層數(shù),訓(xùn)練數(shù)據(jù):

    [cpp]?view
    plaincopy

  • //?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設(shè)置了有三個(gè)隱含層的網(wǎng)絡(luò)結(jié)構(gòu):輸入層,三個(gè)隱含層,輸出層。輸入層和輸出層節(jié)點(diǎn)數(shù)均為5,中間隱含層每層有兩個(gè)節(jié)點(diǎn)。

    create第二個(gè)參數(shù)可以設(shè)置每個(gè)神經(jīng)節(jié)點(diǎn)的激活函數(shù),默認(rèn)為CvANN_MLP::SIGMOID_SYM,即Sigmoid函數(shù),同時(shí)提供的其他激活函數(shù)有Gauss和階躍函數(shù)。

    使用訓(xùn)練好的網(wǎng)絡(luò)結(jié)構(gòu)分類(lèi)新的數(shù)據(jù):

    然后直接使用predict函數(shù),就可以預(yù)測(cè)新的節(jié)點(diǎn):

    [cpp]?view
    plaincopy

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


  • 完整程序代碼:

    [cpp]?view
    plaincopy

  • //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);??
  • ????????????int?response=0;??
  • ????????????for(int?i=0;i<5;i++){??
  • ????????????//??cout<<p[i]<<"?";??
  • ????????????????response+=p[i];??
  • ????????????}??
  • ????????????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);??
  • ??
  • }??

  • 結(jié)果:

    總結(jié)

    以上是生活随笔為你收集整理的OpenCV中使用神经网络 CvANN_MLP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。