Pytorch深度學習實戰教程(一):開啓煉丹模式,語義分割基礎與環境搭建

本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收錄,有技術乾貨文章,整理的學習資料,一線大廠面試經驗分享等,歡迎 Star 和 完善。

Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建

一、前言

該系列文章的內容有:

  • Pytorch的基本使用
  • 語義分割算法講解

先從最簡單的語義分割基礎與開發環境搭建開始講解。

二、語義分割

語義分割是什麼?

語義分割(semantic segmentation) : 就是按照“語義”給圖像上目標類別中的每一點打一個標籤,使得不同種類的東西在圖像上被區分開來。可以理解成像素級別的分類任務,直白點,就是對每個像素點進行分類。

簡而言之,我們的目標是給定一幅RGB彩色圖像(高x寬x3)或一幅灰度圖像(高x寬x1),輸出一個分割圖譜,其中包括每個像素的類別標註(高x寬x1)。具體如下圖所示:

Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建

注意:爲了視覺上清晰,上面的預測圖是一個低分辨率的圖。在實際應用中,分割標註的分辨率需要與原始圖像的分辨率相同。

這裏對圖片分爲五類:Person(人)、Purse(包)、Plants/Grass(植物/草)、Sidewalk(人行道)、Building/Structures(建築物)。

與標準分類值(standard categorical values)的做法相似,這裏也是創建一個one-hot編碼的目標類別標註——本質上即爲每個類別創建一個輸出通道。因爲上圖有5個類別,所以網絡輸出的通道數也爲5,如下圖所示:

Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建

如上圖所示,預測的結果可以通過對每個像素在深度上求argmax的方式被整合到一張分割圖中。進而,我們可以輕鬆地通過重疊的方式觀察到每個目標。

argmax的方式也很好理解。如上圖所示,每個通道只有0或1,以Person的通道爲例,紅色的1表示爲Person的像素,其他像素均爲0。其他通道也是如此,並且不存在同一個像素點在兩個以上的通道均爲1的情況。因此,通過argmax就找到每個像素點的最大索引通道值。最終得到結果爲:

Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建

當只有一層通道被重疊至原始圖像時,我們稱之爲mask,即只指示某一特定類別所存在的區域。

高分辨率的結果如下圖所示,不同的顏色代表不同的類別:

 

三、數據集

常見的語義分割算法屬於有監督學習,因此標註好的數據集必不可少。

公開的語義分割數據集有很多,目前學術界主要有三個benchmark(數據集)用於模型訓練和測試。

第一個常用的數據集是Pascal VOC系列。這個系列中目前較流行的是VOC2012,Pascal Context等類似的數據集也有用到。

第二個常用的數據集是Microsoft COCO。COCO一共有80個類別,雖然有很詳細的像素級別的標註,但是官方沒有專門對語義分割的評測。這個數據集主要用於實例級別的分割以及圖片描述。所以COCO數據集往往被當成是額外的訓練數據集用於模型的訓練。

第三個數據集是輔助駕駛(自動駕駛)環境的Cityscapes,使用比較常見的19個類別用於評測。

可以用於語義分割訓練的數據集有很多:

  • Pascal Voc 2012:比較常見的物體分類,共21個類別;
  • MS COCO:由微軟贊助,幾乎成爲了圖像語義理解算法性能評價的“標準”數據集,共80個類別;
  • Cityscapes:包含50個歐洲城市不同場景、不同背景、不同季節的街景的33類標註物體;
  • Pascal-Context:對於PASCAL-VOC 2010識別競賽的擴展,共59個類別;
  • KITTI:用於移動機器人及自動駕駛研究的最受歡迎的數據集之一,共11個類別;
  • NYUDv2:2.5維數據集,它包含1449張由微軟Kinect設備捕獲的室內的RGB-D圖像;
  • SUN-RGBD:由四個RGB-D傳感器得來,包含10000張RGB-D圖像,尺寸與PASCAL VOC一致;
  • ADE20K_MIT:一個場景理解的新的數據集,這個數據集是可以免費下載的,共151個類別。

數據集有很多,本系列教程不侷限於具體數據集,可能也會用到Kaggle比賽之類的數據集,具體每個數據集怎麼處理,數據集的格式是什麼樣的,後續文章用到什麼數據集會具體講解。

四、GPU機器

對於語義分割任務,有個帶有高端GPU顯卡的機器還是非常有必要的,如果沒有,訓練收斂會很慢。

最佳的開發環境爲Linux,因爲在公司的日常工作,基本都是使用Linux雲服務器進行模型開發的工作,提前適應Linux操作系統還是有好處的。

對於學生黨,如果實驗室是做深度學習方向研究的,並且資源完備,那麼GPU服務器應該還是能有的,對於GPU服務器的問題不用愁。

但可能由於條件限制,實驗室沒有配備GPU服務器,還想學習深度學習相關的知識,有三種方法:

1、免費雲服務器Google Colab

勉強可以一用的是Google Colab,它是一個Google提供的免費GPU服務器,提供的GPU算力還算可以,但是它的主要問題在於需要翻牆存儲空間小,Google Colab的存儲空間是通過掛載Google Drive得到的,Google Drive只提供15G的免費存儲空間,想要擴展空間,還是需要花錢的。

想使用免費雲服務器Google Colab的,可以自行百度教程。

2、阿里雲付費GPU雲服務器

阿里雲提供GPU雲服務器資源,有兩種付費模式:包月和按流量付費。有P4服務器,甚至吊炸天的V100服務器。性能強勁,價格也很感人,兩個字形容就是很貴,個人使用者並不推薦購買。除了阿里雲提供GPU雲服務,騰訊、百度、華爲都有相應的服務,但是都很貴。

3、配置一臺電腦主機

可以自己配置一臺臺式主機,也算是對自己的一種投資。配置一臺不錯的,可以用於深度學習訓練的主機需要6000元左右。

深度學習的訓練很依賴顯卡的性能,因此需要配置一個較好的N卡,也就是NVIDIA的顯卡,選顯卡的技巧就是看下顯卡天梯圖(點擊查看):

 

這個顯卡天梯圖主要包括的是市面常用的顯卡排名,不包括類似V100這樣的價格上10萬的顯卡。

天梯圖,越靠上,顯卡的性能越高,不要選擇右側的AMD顯卡,雖然性能好,但A卡是不支持CUDA的。

根據自己的預算,選擇顯卡,顯卡的顯存儘量選擇8G以上的,深度學習模型訓練很吃顯存資源。

本人買了微星的RTX 2060 Super,買時的價格是3399元,顯卡很不保值,價格會隨時間越來越低。

配置電腦其實能寫很多,比如CPU、電腦主板、電源、內存、散熱器的選擇等,這裏就不擴展了。沒有精力自己組裝臺式機的,可以直接買配備相應顯卡的臺式機,但價格相對自己組裝的臺式機,價格會貴一些。

五、開發環境搭建

有條件的,推薦使用Ubuntu系統配置開發環境,Ubuntu是Linux的一個發行版之一,適合新手,界面友好,操作簡單。

由於本人購買的電腦主板,不支持Linux架構的系統安裝,因此後續會以Windows作爲開發環境,但這並不影響算法原理與代碼的講解。

本人的臺式機配置情況:

CPU:Intel i7 9700k

顯卡:RTX 2060 Super

系統:Windows 10

安裝好Windows系統和必要的驅動後,需要安裝的工具有:CUDA、Anaconda3、cuDNN、Pytorch-gpu、Fluent Terminal(可選)。

1、CUDA

CUDA,是顯卡廠商NVIDIA推出的運算平臺。我們需要根據自己顯卡的型號選擇支持的CUDA版本,例如RTX 2060 Super支持CUDA 10,下載地址:點擊查看

 

傻瓜式安裝,很簡單。

安裝好後,需要再配置下系統的環境變量,電腦->鼠標右鍵->屬性->高級系統設置->環境變量->Path:

添加自己的NVSMI路徑到環境變量中,我採用的是默認安裝地址:

配置好後,就可以在cmd中使用nvidia-smi指令查看顯卡了。

2、Anaconda3

Anaconda是Python的包管理器和環境管理器,可以方便我們安裝Python的第三方庫。

下載地址:點擊查看

 

選擇Python 3.7的版本,安裝也很簡單,傻瓜式下一步即可。

安裝好後,需要添加系統環境變量,方法與安裝CUDA時一樣:

D:\Anaconda
D:\Anaconda\Scripts

路徑改爲自己安裝的Anaconda路徑即可。

配置好後,在cmd中運行conda -V沒有報錯,有版本信息輸出,說明配置成功。

3、cuDNN和Pytorch安裝

cuDNN是用於深度神經網絡的GPU加速庫。它強調性能、易用性和低內存開銷。

安裝好Anaconda之後,可以使用conda安裝cuDNN和Pytorch。

打開Anaconda Prompt,這是Anaconda自帶的命令行工具,先一定要用這個工具創建環境,直接用系統自帶的cmd,可能遇到一些奇怪的問題,例如CondaHTTPError的錯誤。在Anaconda Prompt中輸入:

conda create -n your_name jupyter notebook

這句話的意思是創建一個名字爲your_name的虛擬環境,並且這個虛擬環境額外安裝jupyter notebook第三方庫。可以將your_name改爲你自己喜歡的名字,這個名字是你的虛擬環境的名字,自己隨便取,比如jack。

隨後,輸入y進行安裝:

安裝好後,可以通過指令conda info -e查看已有環境情況。

 

從上圖可以看到,有兩個環境,一個是base,自帶的基礎環境,另一個是我們新創建的名爲jack的環境。新建環境的原因是,我們可以分開管理我們配置的環境。

安裝好環境後,我們就可以激活jack環境,並安裝cuDNN和GPU版的Pytorch了。激活名爲jack的環境:

activate jack

Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建

可以看到,我們的環境由base變成了jack。在jack環境中安裝cuDNN:

conda install cudnn

安裝cuDNN好後,安裝Pytorch,打開Pytorch官網:點擊查看

Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建

根據自己的環境選擇,選擇好後,網頁會自動給出需要運行的指令。這裏可能需要區分下Python的版本和CUDA的版本。

Python版本查看方法:直接在命令行中輸入python,會看到Python的版本。

 

CUDA版本查看方法,在命令行中輸入nvidia-smi:

 

確定好版本後,就可以通過Pytorch官網提供的指令安裝GPU版本的Pytorch了。

至此,基礎的環境搭建已經完成,恭喜。

4、Fluent Terminal

基礎環境配好了,正常使用已經夠了。

但是追求顏值的人,可能會覺得,Windows自帶的命令行工具和Anaconda提供的命令行工具都太醜了。

有沒有好看,又好用的Terminal?答案是有的,不過需要自己配置,並且還有一些坑需要慢慢踩。

例如Fluent Terminal,它是現代的、也是我比較推薦的終端工具。它是專屬於 Windows 平臺,並利用UWP技術打造的顏值超高的終端模擬器。先看下顏值:

 

喜歡折騰的,可以看看這幾篇文章:

告別 Windows 終端的難看難用,從改造 PowerShell 的外觀開始

像MAC一樣使用win10的Terminal

這種美化的工具有很多,需要自行探索,由於本文不是專門針對Terminal的美化文章,就不用過多篇幅介紹這些美化工具了。喜歡折騰的,可以根據自己的需求自行百度。

六、小結

本文介紹了語義分割的基礎知識與開發環境的搭建,該系列的下一篇文章會具體講解UNet的算法原理以及訓練代碼。

參考資料

1、https://blog.csdn.net/mou_it/article/details/82225505

2、https://blog.csdn.net/ShuqiaoS/article/details/87360693

點贊再看,養成習慣,微信公衆號搜索【JackCui-AI】關注一個在互聯網摸爬滾打的潛行者

Pytorch 深度學習實戰教程(五):今天,你垃圾分類了嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章