1.å¦ä½ç¨OpenCVè®ç»èªå·±çåç±»å¨
2.不会算法如何学习机器学习?
3.视觉机器学习20讲-MATLAB源码示例(20)-蚁群算法
å¦ä½ç¨OpenCVè®ç»èªå·±çåç±»å¨
ããä¸ãç®ä»
ããç®æ æ£æµæ¹æ³æåç±Paul Viola [Viola]æåºï¼å¹¶ç±Rainer Lienhart [Lienhart]对è¿ä¸æ¹æ³è¿è¡äºæ¹åã该æ¹æ³çåºæ¬æ¥éª¤ä¸ºï¼ é¦å ï¼å©ç¨æ ·æ¬ï¼å¤§çº¦å ç¾å¹ æ ·æ¬å¾çï¼ç harr ç¹å¾è¿è¡åç±»å¨è®ç»ï¼å¾å°ä¸ä¸ªçº§èçboostedåç±»å¨ã
ããåç±»å¨ä¸ç"级è"æ¯ææç»çåç±»å¨æ¯ç±å 个ç®ååç±»å¨çº§èç»æãå¨å¾åæ£æµä¸ï¼è¢«æ£çªå£ä¾æ¬¡éè¿æ¯ä¸çº§åç±»å¨ï¼ è¿æ ·å¨åé¢å å±çæ£æµä¸å¤§é¨åçåéåºå就被æé¤äºï¼å ¨é¨éè¿æ¯ä¸çº§åç±»å¨æ£æµçåºåå³ä¸ºç®æ åºåã
ããåç±»å¨è®ç»å®ä»¥åï¼å°±å¯ä»¥åºç¨äºè¾å ¥å¾åä¸çæå ´è¶£åºåçæ£æµãæ£æµå°ç®æ åºååç±»å¨è¾åºä¸º1ï¼å¦åè¾åºä¸º0ã为äºæ£æµæ´å¯å¾åï¼å¯ä»¥å¨å¾åä¸ç§»å¨æç´¢çªå£ï¼æ£æµæ¯ä¸ä¸ªä½ç½®æ¥ç¡®å®å¯è½çç®æ ã 为äºæç´¢ä¸å大å°çç®æ ç©ä½ï¼åç±»å¨è¢«è®¾è®¡ä¸ºå¯ä»¥è¿è¡å°ºå¯¸æ¹åï¼è¿æ ·æ¯æ¹åå¾ æ£å¾åç尺寸大å°æ´ä¸ºææãæ以ï¼ä¸ºäºå¨å¾åä¸æ£æµæªç¥å¤§å°çç®æ ç©ä½ï¼æ«æç¨åºé常éè¦ç¨ä¸åæ¯ä¾å¤§å°çæç´¢çªå£å¯¹å¾çè¿è¡å 次æ«æã
ããç®åæ¯æè¿ç§åç±»å¨çboostingææ¯æåç§ï¼ Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboostã
ãã"boosted" å³æ级èåç±»å¨çæ¯ä¸å±é½å¯ä»¥ä»ä¸éåä¸ä¸ªboostingç®æ³(æéæ票)ï¼å¹¶å©ç¨åºç¡åç±»å¨çèªæè®ç»å¾å°ã
ããæ ¹æ®ä¸é¢çåæï¼ç®æ æ£æµå为ä¸ä¸ªæ¥éª¤ï¼
ãã1ã æ ·æ¬çå建
ãã2ã è®ç»åç±»å¨
ãã3ã å©ç¨è®ç»å¥½çåç±»å¨è¿è¡ç®æ æ£æµã
ããäºãæ ·æ¬å建
ããè®ç»æ ·æ¬å为æ£ä¾æ ·æ¬ååä¾æ ·æ¬ï¼å ¶ä¸æ£ä¾æ ·æ¬æ¯æå¾ æ£ç®æ æ ·æ¬ï¼åä¾æ ·æ¬æå ¶å®ä»»æå¾çã
ããè´æ ·æ¬
ããè´æ ·æ¬å¯ä»¥æ¥èªäºä»»æçå¾çï¼ä½è¿äºå¾çä¸è½å å«ç®æ ç¹å¾ãè´æ ·æ¬ç±èæ¯æè¿°æ件æ¥æè¿°ãèæ¯æè¿°æ件æ¯ä¸ä¸ªææ¬æ件ï¼æ¯ä¸è¡å å«äºä¸ä¸ªè´æ ·æ¬å¾ççæ件åï¼åºäºæè¿°æ件çç¸å¯¹è·¯å¾ï¼ã该æ件å建æ¹æ³å¦ä¸ï¼
ããéç¨Doså½ä»¤çææ ·æ¬æè¿°æ件ãå ·ä½æ¹æ³æ¯å¨Dosä¸çè¿å ¥ä½ çå¾çç®å½ï¼æ¯å¦æçå¾çæ¾å¨D:\face\posdataä¸ï¼åï¼
ããæCtrl+Ræå¼Windowsè¿è¡ç¨åºï¼è¾å ¥cmdæå¼DOSå½ä»¤çªå£ï¼è¾å ¥d:å车ï¼åè¾å ¥cd D:\face\negdataè¿å ¥å¾çè·¯å¾ï¼å次è¾å ¥dir /b > negdata.datï¼åä¼å¾çè·¯å¾ä¸çæä¸ä¸ªnegdata.datæ件ï¼æå¼è¯¥æ件å°æåä¸è¡çnegdata.datå é¤ï¼è¿æ ·å°±çæäºè´æ ·æ¬æè¿°æ件ãdoså½ä»¤çªå£ç»æå¦ä¸å¾ï¼
ããå¦ä½ç¨OpenCVè®ç»èªå·±çåç±»å¨
ããæ£æ ·æ¬
ãã对äºæ£æ ·æ¬ï¼é常çåæ³æ¯å ææææ£æ ·æ¬è£å好ï¼å¹¶å¯¹å°ºå¯¸åè§æ´ï¼å³ç¼©æ¾è³æå®å¤§å°ï¼ï¼å¦ä¸å¾æ示ï¼
ããå¦ä½ç¨OpenCVè®ç»èªå·±çåç±»å¨
ããç±äºHaarTrainingè®ç»æ¶è¾å ¥çæ£æ ·æ¬æ¯vecæ件ï¼æ以éè¦ä½¿ç¨OpenCVèªå¸¦çCreateSamplesç¨åºï¼å¨ä½ ææç §çopencv\binä¸ï¼å¦æ没æéè¦ç¼è¯opencv\apps\HaarTraining\makeä¸ç.dswæ件ï¼æ³¨æè¦ç¼è¯releaseççï¼å°åå¤å¥½çæ£æ ·æ¬è½¬æ¢ä¸ºvecæ件ã转æ¢çæ¥éª¤å¦ä¸ï¼
ãã1) å¶ä½ä¸ä¸ªæ£æ ·æ¬æè¿°æ件ï¼ç¨äºæè¿°æ£æ ·æ¬æ件åï¼å æ¬ç»å¯¹è·¯å¾æç¸å¯¹è·¯å¾ï¼ï¼æ£æ ·æ¬æ°ç®ä»¥ååæ£æ ·æ¬å¨å¾çä¸çä½ç½®å大å°ãå ¸åçæ£æ ·æ¬æè¿°æ件å¦ä¸ï¼
ããposdata/1().bmp 1 1 1
ããposdata/1().bmp 1 1 1
ããposdata/1().bmp 1 1 1
ããä¸è¿ä½ å¯ä»¥ææè¿°æ件æ¾å¨ä½ çposdataè·¯å¾ï¼å³æ£æ ·æ¬è·¯å¾ï¼ä¸ï¼è¿æ ·ä½ å°±ä¸éè¦å åé¢çç¸å¯¹è·¯å¾äºãåæ ·å®ççææ¹å¼å¯ä»¥ç¨è´æ ·æ¬æè¿°æ件ççææ¹æ³ï¼æåç¨txtçæ¿æ¢å·¥å ·å°âbmpâå ¨é¨æ¿æ¢æâbmp 1 1 1
ããâå°±å¯ä»¥äºï¼å¦æä½ çæ ·æ¬å¾çå¤ï¼ç¨txtæ¿æ¢ä¼å¯¼è´ç¨åºæªååºï¼ä½ å¯ä»¥å°å 容æ·å°wordä¸æ¿æ¢ï¼ç¶ååæ·åæ¥ãbmpåé¢é£äºä¸ªæ°ååå«è¡¨ç¤ºå¾ç个æ°ï¼ç®æ çèµ·å§ä½ç½®åå ¶å®½é«ãè¿æ ·å°±çæäºæ£æ ·æ¬æè¿°æ件posdata.datã
ãã2) è¿è¡CreateSamplesç¨åºãå¦æç´æ¥å¨VCç¯å¢ä¸è¿è¡ï¼å¯ä»¥å¨Project\Settings\Debugå±æ§é¡µçProgram argumentsæ 设置è¿è¡åæ°ãä¸é¢æ¯ä¸ä¸ªè¿è¡åæ°ç¤ºä¾ï¼
ãã-info D:\face\posdata\posdata.dat -vec D:\face\pos.vec -num -w -h
ãã表示æä¸ªæ ·æ¬ï¼æ ·æ¬å®½ï¼é«ï¼æ£æ ·æ¬æè¿°æ件为posdata.datï¼ç»æè¾åºå°pos.vecã
ããæè å¨dosä¸è¾å ¥ï¼
ãã"D:\Program Files\OpenCV\bin\createsamples.exe" -info "posdata\posdata.dat" -vec data\pos.vec -num -w -h
ããè¿è¡å®äºä¼d:\face\dataä¸çæä¸ä¸ª*.vecçæ件ã该æ件å å«æ£æ ·æ¬æ°ç®ï¼å®½é«ä»¥åæææ ·æ¬å¾åæ°æ®ãç»æå ¥ä¸å¾ï¼
ããå¦ä½ç¨OpenCVè®ç»èªå·±çåç±»å¨
ããCreatesamplesç¨åºçå½ä»¤è¡åæ°ï¼
ããå½ä»¤è¡åæ°ï¼
ããï¼vec <vec_file_name>
ããè®ç»å¥½çæ£æ ·æ¬çè¾åºæ件åã
ããï¼img<image_file_name>
ããæºç®æ å¾çï¼ä¾å¦ï¼ä¸ä¸ªå ¬å¸å¾æ ï¼
ããï¼bg<background_file_name>
ããèæ¯æè¿°æ件ã
ããï¼num<number_of_samples>
ããè¦äº§ççæ£æ ·æ¬çæ°éï¼åæ£æ ·æ¬å¾çæ°ç®ç¸åã
ããï¼bgcolor<background_color>
ããèæ¯è²ï¼åå®å½åå¾ç为ç°åº¦å¾ï¼ãèæ¯è²å¶å®äºéæè²ã对äºå缩å¾çï¼é¢è²æ¹å·®éç±bgthreshåæ°æ¥æå®ãåå¨bgcolorï¼bgthreshåbgcolorï¼bgthreshä¸é´çåç´ è¢«è®¤ä¸ºæ¯éæçã
ããï¼bgthresh<background_color_threshold>
ããï¼inv
ããå¦ææå®ï¼é¢è²ä¼åè²
ããï¼randinv
ããå¦ææå®ï¼é¢è²ä¼ä»»æåè²
ããï¼maxidev<max_intensity_deviation>
ããèæ¯è²æ大çå离度ã
ããï¼maxangel<max_x_rotation_angle>
ããï¼maxangle<max_y_rotation_angle>ï¼
ããï¼maxzangle<max_x_rotation_angle>
ããæ大æ转è§åº¦ï¼ä»¥å¼§åº¦ä¸ºåä½ã
ããï¼show
ããå¦ææå®ï¼æ¯ä¸ªæ ·æ¬ä¼è¢«æ¾ç¤ºåºæ¥ï¼æä¸"esc"ä¼å ³éè¿ä¸å¼å ³ï¼å³ä¸æ¾ç¤ºæ ·æ¬å¾çï¼èå建è¿ç¨ç»§ç»ãè¿æ¯ä¸ªæç¨çdebugé项ã
ããï¼w<sample_width>
ããè¾åºæ ·æ¬ç宽度ï¼ä»¥åç´ ä¸ºåä½ï¼
ããï¼hãsample_heightã
ããè¾åºæ ·æ¬çé«åº¦ï¼ä»¥åç´ ä¸ºåä½ã
ããå°æ¤ç¬¬ä¸æ¥æ ·æ¬è®ç»å°±å®æäºãæåä½ ï¼ä½ å·²ç»å¦ä¼è®ç»åç±»å¨çäºæååäºï¼æèªå·±å¦è¿ä¸ªçæ¶åè±äºæä¸å¤©çæ¶é´ï¼ä¼°è®¡ä½ å åéå°±å¦ä¼äºå§ã
ããä¸ãè®ç»åç±»å¨
ããæ ·æ¬å建ä¹åï¼æ¥ä¸æ¥è¦è®ç»åç±»å¨ï¼è¿ä¸ªè¿ç¨æ¯ç±haartrainingç¨åºæ¥å®ç°çã该ç¨åºæºç ç±OpenCVèªå¸¦ï¼ä¸å¯æ§è¡ç¨åºå¨OpenCVå®è£ ç®å½çbinç®å½ä¸ã
ããHaartrainingçå½ä»¤è¡åæ°å¦ä¸ï¼
ããï¼data<dir_name>
ããåæ¾è®ç»å¥½çåç±»å¨çè·¯å¾åã
ããï¼vec<vec_file_name>
ããæ£æ ·æ¬æ件åï¼ç±trainingssamplesç¨åºæè ç±å ¶ä»çæ¹æ³å建çï¼
ããï¼bg<background_file_name>
ããèæ¯æè¿°æ件ã
ããï¼npos<number_of_positive_samples>ï¼
ããï¼nneg<number_of_negative_samples>
ããç¨æ¥è®ç»æ¯ä¸ä¸ªåç±»å¨é¶æ®µçæ£/è´æ ·æ¬ãåççå¼æ¯ï¼nPos = ;nNeg =
ããï¼nstages<number_of_stages>
ããè®ç»çé¶æ®µæ°ã
ããï¼nsplits<number_of_splits>
ããå³å®ç¨äºé¶æ®µåç±»å¨çå¼±åç±»å¨ãå¦æ1ï¼åä¸ä¸ªç®åçstump classifier被使ç¨ãå¦ææ¯2æè æ´å¤ï¼å带ænumber_of_splits个å é¨èç¹çCARTåç±»å¨è¢«ä½¿ç¨ã
ããï¼mem<memory_in_MB>
ããé¢å 计ç®ç以MB为åä½çå¯ç¨å åãå åè¶å¤§åè®ç»çé度è¶å¿«ã
ããï¼symï¼defaultï¼
ããï¼nonsym
ããæå®è®ç»çç®æ 对象æ¯å¦åç´å¯¹ç§°ãåç´å¯¹ç§°æé«ç®æ çè®ç»é度ãä¾å¦ï¼æ£é¢é¨æ¯åç´å¯¹ç§°çã
ããï¼minhitrateãmin_hit_rateã
ããæ¯ä¸ªé¶æ®µåç±»å¨éè¦çæå°çå½ä¸çãæ»çå½ä¸ç为min_hit_rateçnumber_of_stages次æ¹ã
ããï¼maxfalsealarm<max_false_alarm_rate>
ãã没æé¶æ®µåç±»å¨çæ大é误æ¥è¦çãæ»çé误è¦åç为max_false_alarm_rateçnumber_of_stages次æ¹ã
ããï¼weighttrimming<weight_trimming>
ããæå®æ¯å¦ä½¿ç¨æä¿®æ£å使ç¨å¤å¤§çæä¿®æ£ãä¸ä¸ªåºæ¬çéæ©æ¯0.9
ããï¼eqw
ããï¼mode<basic(default)|core|all>
ããéæ©ç¨æ¥è®ç»çhaarç¹å¾éçç§ç±»ãbasicä» ä» ä½¿ç¨åç´ç¹å¾ãall使ç¨åç´å度è§æ转ç¹å¾ã
ããï¼wãsample_widthã
ããï¼hãsample_heightã
ããè®ç»æ ·æ¬ç尺寸ï¼ï¼ä»¥åç´ ä¸ºåä½ï¼ãå¿ é¡»åè®ç»æ ·æ¬å建ç尺寸ç¸åã
ããä¸ä¸ªè®ç»åç±»å¨çä¾åï¼
ãã"D:\Program Files\OpenCV\bin\haartraining.exe" -data data\cascade -vec data\pos.vec -bg negdata\negdata.dat -npos -nneg -mem -mode ALL -w -h
ããè®ç»ç»æåï¼ä¼å¨ç®å½dataä¸çæä¸äºåç®å½ï¼å³ä¸ºè®ç»å¥½çåç±»å¨ã
ããè®ç»ç»æå¦ä¸ï¼
ããå¦ä½ç¨OpenCVè®ç»èªå·±çåç±»å¨
ãã
ããæåä½ ï¼ä½ å·²ç»å¦ä¼è®ç»åç±»å¨çä¹æååäºã
ããåï¼å©ç¨è®ç»å¥½çåç±»å¨è¿è¡ç®æ æ£æµã
ããè¿ä¸æ¥éè¦ç¨å°performance.exeï¼è¯¥ç¨åºæºç ç±OpenCVèªå¸¦ï¼ä¸å¯æ§è¡ç¨åºå¨OpenCVå®è£ ç®å½çbinç®å½ä¸ã
ããperformance.exe -data data/cascade -info posdata/test.dat -w -h -rs
ããperformanceçå½ä»¤è¡åæ°å¦ä¸ï¼
ããUsage: ./performance
ãã-data <classifier_directory_name>
ãã-info <collection_file_name>
ãã[-maxSizeDiff <max_size_difference = 1.>]
ãã[-maxPosDiff <max_position_difference = 0.>]
ãã[-sf <scale_factor = 1.>]
ãã[-ni]
ãã[-nos <number_of_stages = -1>]
ãã[-rs <roc_size = >]
ãã[-w <sample_width = >]
ãã[-h <sample_height = >]
ããä¹å¯ä»¥ç¨opencvçcvHaarDetectObjectså½æ°è¿è¡æ£æµï¼
ããCvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
ãã1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
ããcvSize(, ) ); //3. æ£æµäººè¸
ãã注ï¼OpenCvçæäºçæ¬å¯ä»¥å°è¿äºç®å½ä¸çåç±»å¨ç´æ¥è½¬æ¢æxmlæ件ãä½å¨å®é çæä½ä¸ï¼haartrainingç¨åºå´å¥½åæ°¸è¿ä¸ä¼åæ¢ï¼èä¸æ²¡æçæxmlæ件ï¼åæ¥å¨OpenCVçyahoo论åä¸æ¾å°ä¸ä¸ªhaarconvçç¨åºï¼æå°åç±»å¨è½¬æ¢ä¸ºxmlæ件ï¼å ¶ä¸çåå å°å¾ ç 究ã
不会算法如何学习机器学习?
先看看相关的图书:要有好几本作为参考,最好是角度差异大、深浅程度不同,比如系统的导论式的、深入的有推导的、浅出的boost 如何源码安装手把手的。它要充当不同学习过程中的工具书。
网络教程:比如Andrew Ng的、各种专题的博客,有针对地找相应的教程,相对着看,网络资源比如cto学院的麻将源码规则修改课程跟书的表达方式毕竟是不一样的,也是很有益的信息源。
paper:比如学CNN的时候,就搜一堆论文来,集中一段时间看一轮,一定要有针对性,带着很明确的问号去看。
开源资源:很多很多东西,其实都有人做出来开源了,直接拿来用,一边用一边理解,甚至可以学习源码。微信布局源码
关注这个领域:关注相关的会议期刊,关注大牛们(Hinton、Bengio、LeCun等)的动向,微博加一堆领域大牛每天看一眼他们分享什么上来。
基础知识:线代、统计、概率、数学分析;信息论方面基本概念要理解,比如要知道相对熵是什么意思和怎么算;凸优化和最优估计相关内容,在各种各样问题中都会遇到,自动排课 c 源码学好了可以帮大忙。
机器学习主要就是找到目标函数并且做参数估计,虽然有很多现成工具,但是不熟悉优化问题的话,会很抓瞎。
熟悉几个模型:神经网络(SAE、RBM、CNN等)、SVM、最大熵、CRF、linux下源码阅读随机森林、GMM等等。了解不同应用场景下各种模型有什么优劣,挑一些自己以后可能常用到的多练习。
视觉机器学习讲-MATLAB源码示例()-蚁群算法
蚁群算法是一种概率型优化算法,由Marco Dorigo在年提出,灵感来源于蚂蚁觅食路径的发现过程。该算法具备分布计算、信息正反馈和启发式搜索特性,是一种全局优化算法。在蚁群系统中,蚂蚁通过释放信息素进行信息传递,蚁群整体能够实现智能行为。经过一段时间后,蚁群会沿着最短路径到达食物源,这一过程体现了一种类似正反馈的机制。与其他优化算法相比,蚁群算法具有正反馈机制、个体间环境通讯、分布式计算和启发式搜索方式等特点,易于寻找到全局最优解。
蚁群算法广泛应用于组合优化问题,如旅行商问题、指派问题、Job-shop调度问题、车辆路由问题、图着色问题和网络路由问题等。其在网络路由中的应用受到越来越多学者的关注,相较于传统路由算法,蚁群算法具有信息分布式性、动态性、随机性和异步性等特点,非常适合网络路由需求。
深入学习蚁群算法的具体原理,请参考《机器学习讲》第二十讲内容。本系列文章涵盖了机器学习领域的多个方面,包括Kmeans聚类算法、KNN学习算法、回归学习算法、决策树学习算法、随机森林学习算法、贝叶斯学习算法、EM算法、Adaboost算法、SVM算法、增强学习算法、流形学习算法、RBF学习算法、稀疏表示算法、字典学习算法、BP学习算法、CNN学习算法、RBM学习算法、深度学习算法和蚁群算法。MATLAB仿真源码和相关数据已打包提供,欢迎查阅和使用。