【Python】在 Win10 系統下建立影像處理及深度學習環境

  • 13241
  • 0
  • 2020-02-15

夏恩前一陣子在 Linux 上寫了一套辨識程式,現在要準備送去客戶端上線了。
為了測試切換作業系統後是否會出問題,於是再花點力氣建立新的工作環境。

若要搭建一個好用的工作環境,在此列出幾個比較重要的套件。

1. python
2. opencv
3. tensorflow-gpu

只有這些嗎?其他難道不重要?
不是這樣的,真正的原因是因為上述這些套件不太好裝。

大部分的套件都只要用 pip install 或 conda install 都可以搞定,
因此我們不必耗費太多腦細胞來煩惱那些事情。

這次同樣是利用 Anaconda 來幫助我們完成這些事。

Step1. 下載 Anaconda 並安裝

Anaconda的官方網站如下:
https://www.anaconda.com/download/

由於我們的作業系統是Win10,點選Windows的標誌後下載安裝檔。

下載完畢後,開始安裝。
這邊建議直接安裝在 C:\ 底下,之後比較好找。
若是不指定,預設值會安裝到一個莫名其妙的地方去。

安裝完畢後,新增以下兩個環境變數:

C:\Anaconda
C:\Anaconda\Scripts

※ 2019.11.26 更新:新增一個環境變數。

C:\Anaconda\Library\bin

到此,第一步驟完成。

※     ※    ※    ※    ※

溫馨提醒:

在 Anaconda 內有 update 指令可以更新套件,
例如使用 " conda update opencv ",就可以更新opencv套件。
又或是使用 " conda update --all ",就可以更新所有套件。

在此建議,不要一次更新所有套件!

因為許多套件都有版本相依,牽一髮動全身,
隨便更新的結果就是會得到更多的故障和莫名的錯誤訊息。

不信邪?

沒關係。
夏恩也不會阻止您,自己試試便知。

※     ※    ※    ※    ※

Step2: 安裝虛擬環境

 Anaconda 的內建版本大多是最新版的 python,可能不符合自己的需求。
所以夏恩在此建議使用虛擬環境,本文將以 python3.5 為例來說明。

另一方面,系統偶爾會建議您更新至最新版的 anaconda,如:

要不要更新就看當時的心情吧~
該指令為: conda update -n base -c defaults conda

要新增虛擬環境請使用 create 指令,本範例為建立 py35 資料夾。
若您覺得這個名字不好聽,請自行把 py35 改成任何好聽的名字,例如 __py_____35__ 之類的。

> conda create -n py35 python=3.5 anaconda

接著等待安裝完成之後,使用 " activate " 指令,啟動虛擬環境。
若是在 linux 的環境下,需要使用 " source activate py35 ",在 win10 則不用。
關閉虛擬環境使用 "deactivate" 指令,記得每次要使用時都要激活虛擬環境。

> activate py35

Step3: 安裝套件

開始之前,可以順手更新一下 pip。
$ python -m pip install --upgrade pip

1. OpenCV

第一個安裝的套件,就是影像工程師吃飯的傢伙:opencv。
這幾年 pip 相關的安裝方法更趨成熟,不像之前總有奇怪的問題發生。

使用 pip 安裝的 opencv 不會和 spyder 打架,使用上也沒有什麼問題:
> pip install opencv-python

若不想使用 pip 而是用 conda 來安裝的話,問題就會比較多一點。
安裝指令為: conda install -c conda-forge opencv

這邊安裝的版本是依據現況的最新版本,但是請注意 —

在 python 3.5 的環境中,opencv 3.2 以上的版本會和 spyder 起衝突。
最明顯的病灶就是無法開啟 spyder 介面。其原因是 Qt 和 PyQt 套件搭配不良。
有趣的是,這個問題在 python 3.6 或 3.7 並不會發生。

經過夏恩測試,安裝 opencv=3.1 搭配 spyder=3.2.8 可以讓兩者和平共處。
若有遇到這個問題,安裝的順序改成:

> conda install -c conda-forge opencv=3.1
> conda install qt

其中 spyder=3.2.8 是安裝虛擬環境的過程中預設的,不用管它。
直接指定安裝 opencv 3.1 版,由於 opencv 在安裝過程中系統會把 qt 的版本降低,所以要再手動升回來。

2. TensorFlow

第二個安裝的套件是 TensorFlow,根據其官方網站的建議,
不要使用 conda 指令進行安裝,原因是 google 的團隊不負責 conda 的更新及測試。

所以這裡的安裝指令請使用以下:
> pip install --ignore-installed --upgrade tensorflow

有時候會跳出 "no module named html5lib" 的錯誤,請別緊張,先安裝 html5lib 就好。
> conda install html5lib

或者是  " no module named msgpack " 之類的。
> pip install msgpack

又夏恩也遇過這個錯誤 "ImportError: No module named '_pywrap_tensorflow_internal' ...",
這個錯誤原因是因為版本不合,有些 win7 主機不接受新版的 TensorFlow 版,就會出這個錯。
安裝上一個版本通常能解決問題,語法如下:
> pip install --ignore-installed --upgrade tensorflow==1.xx (挑一個可以用的版本)

※ 本文於 2019.06.11 更新 CUDA 安裝流程 ※
由於 TensorFlow 社群非常活躍,更新速度飛快,安裝時請記得確認版本喔!

如果您是要安裝GPU版本的話,會比較複雜一些,首先您要有 GPU。
接著到官網查詢一下最新支援的版本: GPU support,它會告訴您適合的版本。

確認版本後,請到 NVIDIA 的網站下載兩個東西,
CUDA Toolkit 10.0 以及 cuDNN v7.4.1(或以上) for CUDA 10.0。

※ 2019.02.20 更新: tensorflow-gpu 1.12.0 僅接受 cuDNN v7.4。
    使用 v7.2 會報錯,其錯誤訊息如下:

    Failed to get convolution algorithm. This is probably because cuDNN failed ...

根據 TensorFlow 的官網表示:
如果安裝的版本不對,那可能得請自行去將核心重新編譯,才能讓程式順利運轉。

2-1. CUDA Toolkit 10.0

網址:https://developer.nvidia.com/cuda-10.0-download-archive
選擇與自己對應的系統架構,依序安裝即可。

安裝過程中,我們只需要CUDA Toolkit的部分,所以挑選我們需要的東西就好。
請點選自訂安裝。

只要CUDA就好,其他本來就有,不用重複安裝。

點選下一步完成安裝。
這個套件會自動安裝到以下路徑:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

2-2. cuDNN套件 7.4.1

網址:https://developer.nvidia.com/cudnn
進到該網頁後,點選 Download,這時網頁會要求登入,有帳號請登入,沒帳號請申請一個。

進入登入後的畫面之後,可以看到很多東西可以下載,我們需要的套件版本是 7.4.1版。
點選,開啟下拉式選單。

下載後取回一個壓縮檔,把它解壓縮。

然後把資料夾內的三個資料夾剪下,貼到剛才那個路徑下:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

特別注意,是把cuda底下的三個資料夾剪貼過去。

完成之後,新增環境變數:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin

最後才能安裝 tensorflow-gpu,請用以下指令:

> pip install --ignore-installed --upgrade tensorflow-gpu

Step4: 測試

安裝完畢之後,來一段程式碼試試看。

# 2020.02.15 更新
# 說明:由於 tensorflow 全面改版到 2.0,因此舊方法大多都被 Kares 取代。
#      若要調用 1.x 版的函數,需要使用另外的方法。

import tensorflow as tf

with tf.compat.v1.Session() as sess
    A = tf.constant(5)
    B = tf.constant(15)
    C = A * B

    result = sess.run(C)
    print(result)

測試中大概會遇到幾個問題:

1. import numpy error

這個問題的解法是把 numpy 砍掉,再重新安裝即可。

> pip uninstall numpy
> pip install numpy --upgrade

2. import tensorflow ERROR

安裝完之後,偶爾會遇到這個問題,導致這個問題的原因有很多...
但大部分的時候,只要把電腦重新啟動就會好了。

先重啟電腦試試看,如果不行再去找其他的資料來看。

3. tf.Session() 停很久

這...

本來夏恩也以為是問題,但後來發現是第一次執行時系統需要對 GPU 進行設定。
約莫等了五分鐘就好了,第二次執行時不再有卡住的問題。

到這兒,基本環境建立完成。
真正的戰鬥才正要開始,祝您好運。