語義分割:基於openCV和深度學習(一)
Semantic segmentation with OpenCV and deep learning
介紹如何使用OpenCV、深度學習和ENet架構執行語義分段。閱讀完今天的文章后,能夠使用OpenCV對圖像和視頻應用語義分割。深度學習有助於提高計算機視覺的前所未有的准確性,包括圖像分類、目標檢測,現在甚至分割。
傳統的分割方法是將圖像分割為若干部分(標准化切割、圖形切割、抓取切割、超像素等);然而,算法並沒有真正理解這些部分所代表的內容。
另一方面,語義分割算法試圖:
把圖像分成有意義的部分,同時,將輸入圖像中的每個像素與類標簽(即人、路、車、公共汽車等)相關聯,語義分割算法非常強大,有很多用例,包括自動駕駛汽車——展示如何將語義分割應用於道路場景圖像/視頻!要學習如何使用OpenCV和深度學習應用語義分割,請繼續閱讀!
尋找這篇文章的源代碼?直接跳到下載部分。OpenCV語義分割與深度學習 在文章的第一部分,將討論ENet深度學習體系結構。
在這里,將演示如何使用ENet對圖像和視頻流應用語義分割。在這一過程中,將分享來自分段的示例輸出,將語義分段應用於項目時感受到預期的結果。
The ENet semantic segmentation architecture
Figure 1: The ENet deep learning semantic segmentation architecture.
ENet的一個主要優點是它的速度比大型模型快18倍,需要的參數比大型模型少79倍,具有相似或更好的精度。型號本身只有3.2兆! 在的計算機上,一次CPU轉發需要0.2秒——如果使用GPU,這個分段網絡可以運行得更快。Paszke等人。在Cityscapes數據集上訓練該數據集,這是一個語義的、實例化的、密集的像素注釋,包含20-30個類(取決於使用的模型)。顧名思義,城市景觀數據集包括可用於城市場景理解的圖像示例,包括自動駕駛車輛。
使用的特定模型在20個課題中進行了訓練,包括:
如何應用語義分割來提取圖像和視頻流中每個類的密集像素映射。如果有興趣,在自定義數據集上訓練自己的ENet模型進行分段。
Semantic segmentation with OpenCV and deep learning
$ tree --dirsfirst
.
├── enet-cityscapes
│ ├── enet-classes.txt
│ ├── enet-colors.txt
│ └── enet-model.net
├── images
│ ├── example_01.png
│ ├── example_02.jpg
│ ├── example_03.jpg
│ └── example_04.png
├── videos
│ ├── massachusetts.mp4
│ └── toronto.mp4
├── output
├── segment.py
└── segment_video.py
4 directories, 11 files
項目有四個目錄:
enet cityscapes/:包含預先訓練的深度學習模型、項目列表和與項目對應的顏色標簽。
images/:選擇四個樣本圖像來測試圖像分割腳本。
videos/:包括兩個用於測試深度學習分段視頻腳本的示例視頻。這些視頻的點數列在“視頻分割結果”部分。
output/:出於組織目的,喜歡讓腳本將處理過的視頻保存到output文件夾中。不包括在下載的輸出圖像/視頻,因為文件的大小相當大。需要使用的代碼自行生成它們。 將回顧兩個Python腳本:
segment.py:對單個圖像執行深度學習語義分割。將通過這個腳本來學習分割的工作原理,然后在轉到視頻之前對單個圖像進行測試。
segment_video.py:顧名思義,此腳本將對視頻執行語義分割。