人工智慧影象處理工具OpenCV機器學習1快速入門
作為一種人工智慧,機器學習使計算機能夠通過經驗學習:使用過去收集的資料預測未來。最重要的是,計算機視覺是當今最令人興奮的機器學習應用領域之一,深度學習和卷積神經網路推動創新系統,如自動駕駛汽車和谷歌的DeepMind。
在本章中,我們將討論為什麼機器學習變得如此受歡迎,並討論它可以解決的問題型別。在整本書中,我將假設您已經掌握了OpenCV和Python的基本知識。
機器學習入門
機器學習已經存在了至少60年。 在尋求人工智慧的過程中,早期的機器學習系統使用if ... else語句的手工編碼規則來處理資料和做出決策。 想想一個垃圾郵件過濾器,其工作是解析傳入的電子郵件並將不需要的郵件移動到垃圾郵件資料夾:

image.png
我們可以提出單詞黑名單,只要它們出現在郵件中,就將電子郵件標記為垃圾郵件。如果將它們組合並巢狀在決策樹中,這些專家決策規則可變得任意複雜。

image.png
手動編碼這些決策規則有時是可行的,但有兩個主要缺點:
- 邏輯僅適用於單個特定任務。例如無法使用此垃圾郵件過濾器標記朋友的照片。
- 需要深入瞭解問題。我們必須確切地知道哪種型別的電子郵件構成垃圾郵件及可能的例外。
這就是機器學習的用武之地。有時,任務無法很好地定義,機器學習通常可以用來提取這些隱藏的關係(也稱為資料探勘)。
如今多數智慧手機可以檢測到影象中的臉部。但是20幾年前,這個問題沒有得到解決。人類傾向於不以畫素為單位思考。我們尋找定義面部特徵,例如眼睛,鼻子,嘴巴等,始終沒想出一套好的決策規則來定義面部。然而卷積神經網路和深度學習能識別人臉。我們所要做的只是簡單地呈現面部影象的集合到機器。機器就能夠發現一組特徵來識別面部,這是機器學習的真正力量。我們需要的是解決問題,而不一定要找出其定義規則。好比中醫能解決很多西醫解決不了的問題,西醫的理論認為中醫的結果很多無法用西醫解釋,但是實際中醫上也是成千上萬年自然機器學習的結果。
機器學習可以解決的問題
大多數機器學習問題屬於以下三個主要類別:
-
監督學習。每個資料點都被標記或與類別。比如分類標籤將影象指定為貓或狗。有訓練資料和測試資料
-
無監督學習。以某種方式組織資料或描述其結構。這可能意味著將它們分組或查詢檢視複雜資料的不同方式使它們看起來更簡單。
-
強化學習中,演算法可以選擇響應每個資料點的動作。這是機器人技術中常見的感測器方法,一個時間點的讀數是一個數據點,演算法必須選擇機器人的下一步行動。它也非常適合物聯網應用,其中學習演算法在短時間內收到獎勵訊號。基於此,演算法修改其策略以獲得最高回報。
這三個主要類別如下圖所示:

image.png
許多開源機器學習庫提供了比OpenCV更多的功能。一個突出的例子是scikit-learn,它提供了許多最先進的機器學習演算法以及豐富的線上教程和程式碼片段。由於OpenCV主要是為了提供計算機視覺演算法而開發的,因此其機器學習功能僅限於一個名為ml的模組。OpenCV仍然提供了許多最先進的演算法,但有時缺乏一些功能。為此我們需要將scikitlearn等和opencv結合。
對效率要求比較高的,可以考慮採用:cython、joblib、dask( ofollow,noindex">相關連結
Anaconda簡介
Anaconda 是一種Python語言的免費增值開源發行版,用於進行大規模資料處理、預測分析,和科學計算,致力於簡化包的管理和部署。Anaconda使用軟體包管理系統Conda進行包管理。Anaconda跨平臺,集成了NumPy、SciPy、scikit-learn、Matplotlib和Jupyter Notebook等優秀庫。
下載後直接雙擊安裝。使用時,可以點選啟動相應的程式設計環境:
Python(shell) : 標準CPython
IPython(shell): 相當於在命令視窗的命令提示符後輸入ipython回車。pip install ipython安裝的ipython用法一樣。
Ipython QTConsole
IPython Notebook:直接點選開啟,或者在命令提示符中輸入ipython.exe notebook
Jupyter QTConsole
Jupyter Notebook:直接點選開啟,或在終端中輸入: jupyter notebook 以啟動伺服器;在瀏覽器中開啟notebook頁面地址: http://localhost:8888 。Jupyter Notebook是一種 Web 應用,能讓使用者將說明文字、數學方程、程式碼和視覺化內容全部組合到一個易於共享的文件中。
Spyder:直接點選開啟IDE。最大優點就是模仿MATLAB的“工作空間”
Anaconda Prompt : 命令列終端
支援其他IDE,如Pycharm
安裝包管理,
列出已經安裝的包:在命令提示符中輸入pip list或者用conda list
安裝新包:在命令提示符中輸入“pip install 包名”,或者“conda install 包名”
更新包: conda update package_name
升級所有包: conda upgrade --all
解除安裝包:conda remove package_names
搜尋包:conda search search_term
管理環境:
安裝nb_conda,用於notebook自動關聯nb_conda的環境
建立環境:在Anaconda終端中 conda create -n env_name package_names[=ver]
使用環境:在Anaconda終端中 activate env_name
離開環境:在Anaconda終端中 deactivate
匯出環境設定:conda env export > environmentName.yaml 或 pip freeze > environmentName.txt
匯入環境設定:conda env update -f=/path/environmentName.yaml 或 pip install -r /path/environmentName.txt
列出環境清單:conda env list
刪除環境: conda env remove -n env_name

image.png
還可以基於使用者搜尋$ conda install -c user_name package_name
conda虛擬環境安裝
$ conda config --add channels conda-forge $ conda create -n Python3 python=3.5 --file requirements.txt $ source activate Python3 # on Linux / Mac OS X $ activate Python3 # on Windows $ source deactivate # on Linux / Mac OS X $ deactivate # on Windows
如果你不想安裝本書環境,也可以訪問: https://mybinder.org/v2/gh/mbeyeler/opencv-machine-learning/master
環境檢驗:
$ conda config --add channels conda-forge $ conda create -n Python3 python=3.5 --file requirements.txt $ source activate Python3 # on Linux / Mac OS X $ activate Python3 # on Windows $ source deactivate # on Linux / Mac OS X $ deactivate # on Windows
$ jupyter notebook
這將開啟瀏覽器視窗,顯示當前目錄中的檔案列表。單擊opencv-machine-learning資料夾,然後單擊notebooks資料夾,您將找到本書的所有程式碼:

image.png
點選筆記01.00-A-Taste-of-Machine-Learning.ipynb,您可以通過選擇Kernel> Restart&Run All來自己執行程式碼:

image.png
有一些方便的鍵盤快捷鍵用於Jupyter。剛開始需要知道的是:
- 單擊單元格以進行編輯。
- 選中單元格後,按Ctrl + Enter執行其中的程式碼。
- 或者,按Shift + Enter執行單元格並選擇其下方的單元格。
- 按Esc退出寫入模式,然後按A鍵在當前選定的上方插入單元格,B在下面插入單元格。
快捷鍵的檢視:Help > Keyboard Shortcut 或 Help > User Interface Tour
>>> import cv2 >>> cv2.__version__ '3.4.1' >>> dir(cv2.ml) ['ANN_MLP_ANNEAL', 'ANN_MLP_BACKPROP', 'ANN_MLP_GAUSSIAN', 'ANN_MLP_IDENTITY', 'ANN_MLP_LEAKYRELU', 'ANN_MLP_NO_INPUT_SCALE', 'ANN_MLP_NO_OUTPUT_SCALE', 'ANN_MLP_RELU', 'ANN_MLP_RPROP', 'ANN_MLP_SIGMOID_SYM', 'ANN_MLP_UPDATE_WEIGHTS', 'ANN_MLP_create', 'ANN_MLP_load', 'BOOST_DISCRETE', 'BOOST_GENTLE', 'BOOST_LOGIT', 'BOOST_REAL', 'Boost_DISCRETE', 'Boost_GENTLE', 'Boost_LOGIT', 'Boost_REAL', 'Boost_create', 'Boost_load', 'COL_SAMPLE', 'DTREES_PREDICT_AUTO', 'DTREES_PREDICT_MASK', 'DTREES_PREDICT_MAX_VOTE', 'DTREES_PREDICT_SUM', 'DTrees_PREDICT_AUTO', 'DTrees_PREDICT_MASK', 'DTrees_PREDICT_MAX_VOTE', 'DTrees_PREDICT_SUM', 'DTrees_create', 'DTrees_load', 'EM_COV_MAT_DEFAULT', 'EM_COV_MAT_DIAGONAL', 'EM_COV_MAT_GENERIC', 'EM_COV_MAT_SPHERICAL', 'EM_DEFAULT_MAX_ITERS', 'EM_DEFAULT_NCLUSTERS', 'EM_START_AUTO_STEP', 'EM_START_E_STEP', 'EM_START_M_STEP', 'EM_create', 'EM_load', 'KNEAREST_BRUTE_FORCE', 'KNEAREST_KDTREE', 'KNearest_BRUTE_FORCE', 'KNearest_KDTREE', 'KNearest_create', 'LOGISTIC_REGRESSION_BATCH', 'LOGISTIC_REGRESSION_MINI_BATCH', 'LOGISTIC_REGRESSION_REG_DISABLE', 'LOGISTIC_REGRESSION_REG_L1', 'LOGISTIC_REGRESSION_REG_L2', 'LogisticRegression_BATCH', 'LogisticRegression_MINI_BATCH', 'LogisticRegression_REG_DISABLE', 'LogisticRegression_REG_L1', 'LogisticRegression_REG_L2', 'LogisticRegression_create', 'LogisticRegression_load', 'NormalBayesClassifier_create', 'NormalBayesClassifier_load', 'ParamGrid_create', 'ROW_SAMPLE', 'RTrees_create', 'RTrees_load', 'STAT_MODEL_COMPRESSED_INPUT', 'STAT_MODEL_PREPROCESSED_INPUT', 'STAT_MODEL_RAW_OUTPUT', 'STAT_MODEL_UPDATE_MODEL', 'SVMSGD_ASGD', 'SVMSGD_HARD_MARGIN', 'SVMSGD_SGD', 'SVMSGD_SOFT_MARGIN', 'SVMSGD_create', 'SVMSGD_load', 'SVM_C', 'SVM_CHI2', 'SVM_COEF', 'SVM_CUSTOM', 'SVM_C_SVC', 'SVM_DEGREE', 'SVM_EPS_SVR', 'SVM_GAMMA', 'SVM_INTER', 'SVM_LINEAR', 'SVM_NU', 'SVM_NU_SVC', 'SVM_NU_SVR', 'SVM_ONE_CLASS', 'SVM_P', 'SVM_POLY', 'SVM_RBF', 'SVM_SIGMOID', 'SVM_create', 'SVM_getDefaultGridPtr', 'SVM_load', 'StatModel_COMPRESSED_INPUT', 'StatModel_PREPROCESSED_INPUT', 'StatModel_RAW_OUTPUT', 'StatModel_UPDATE_MODEL', 'TEST_ERROR', 'TRAIN_ERROR', 'TrainData_create', 'TrainData_getSubVector', 'VAR_CATEGORICAL', 'VAR_NUMERICAL', 'VAR_ORDERED', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
參考
程式碼: https://github.com/mbeyeler/opencv-machine-learning
中文書籍技術支援:技術支援qq群: 144081101 591302926 567351477 釘釘免費群:21745728
Machine Learning for OpenCV - 2017.pdf
image.png