1. 程式人生 > >基於深度學習的影象分割和keras 的實現

基於深度學習的影象分割和keras 的實現

影象分割
深度學習尤其是卷積神經網路在影象處理的許多領域都獲得了很大的成功,在分類,識別等方面都已經獲得了很大的成功.在深度學習把影象分類和識別達到極致之後。深度學習開始在影象分割方面開始進行收割了。影象分割的意思就是對於影象中每個畫素進行分類操作。
提到深度學習用在影象分割上不得不提的一篇文章是FCN 這篇文章。這算一個開創性的文章吧。整個文章採用的模型是基於VGG16的模型。
這裡寫圖片描述
一開始在這邊文章中我們可以發現影象分割和影象分類的區別了。在這裡影象分割把影象分割的最後幾層全連線的結構去掉了,因為不需要對整個影象進行概率的分類。把全連線結構去掉以後,後面進行了插值計算還原了整個圖片的大小最後得到分割的影象。在這裡不進行細說了。有興趣的可以具體看看論文。
在有一些基礎的同學看來,導致整個影象解析度下降的原因是採用了池化的操作了卷積操作。導致整個一開始的影象大小慢慢的縮小了。所以現在去掉整個池化和採用“SAME”的卷積操作不就可以了。
這裡寫圖片描述


這種結構理論上是可以的,但是在實際操作中有很大的問題。在計算量和記憶體消耗上都十分巨大的,導致整個這樣操作不是很現實。
在FCN開創了一個開始以後,後面出現了很多網路結構。現在最有用的也是用的最廣泛的就是編碼和解碼的結構。
這裡寫圖片描述
這種結構有許多典型的文章,比如segnet deconvnet u-net 等一系列這些文章。這些文章基本結構都是大同小異的,都是編碼和解碼的結構。
在編碼和解碼結構使用成熟以後。大家又回到一開始的FCN的結構。把最後的那個解碼結構去掉了。但是去掉了解碼過程以後,又回到一開始的問題。整個圖片的解析度越來越小無法保證了。所以後面有出現了一個經典的結構。俗稱帶洞的卷積神經網路影象分割。這其中以deeplab 的結構為主。
這裡寫圖片描述

這裡寫圖片描述
這型別的網路解決了影象解析度越來越小等一系列問題。也有比較好的效果了。
但是最近幾年又又新的結構和方式的結構提出來。所以深度學習在影象分割的領域有了很好的應用了。
上面只是說了一些大概的過程和結構。在FCN網路提出了以後,有許多基於這個結構的網路提出了只不過後面採用了CRF等一些結構來進一步優化整個輸出的結果。
下面是基於keras 的影象分割的簡單實現

def FCN8s():
    inputData = Input(batch_shape=(None,224,224,3))
    conv1_1 = Conv2D(64,kernel_size=(3,3),activation='relu'
,padding='same', name='conv1_1')(inputData) conv1_2 = Conv2D(64,kernel_size=(3,3),activation='relu',padding='same', name='conv1_2')(conv1_1) pool1 = MaxPooling2D((2,2), strides=(2,2), name='pool1')(conv1_2) conv2_1 = Conv2D(128,kernel_size=(3,3),activation='relu',padding='same', name='conv2_1')(pool1) conv2_2 = Conv2D(128,kernel_size=(3,3),activation='relu',padding='same', name='conv2_2')(conv2_1) pool2 = MaxPooling2D((2,2), strides=(2,2), name='pool2')(conv2_2) conv3_1 = Conv2D(256,kernel_size=(3,3),activation='relu',padding='same', name='conv3_1')(pool2) conv3_2 = Conv2D(256,kernel_size=(3,3),activation='relu',padding='same', name='conv3_2')(conv3_1) conv3_3 = Conv2D(256,kernel_size=(3,3),activation='relu',padding='same', name='conv3_3')(conv3_2) pool3 = MaxPooling2D((2,2), strides=(2,2), name='pool3')(conv3_3) conv4_1 = Conv2D(512,kernel_size=(3,3),activation='relu',padding='same', name='conv4_1')(pool3) conv4_2 = Conv2D(512,kernel_size=(3,3),activation='relu',padding='same', name='conv4_2')(conv4_1) conv4_3 = Conv2D(512,kernel_size=(3,3),activation='relu',padding='same', name='conv4_3')(conv4_2) pool4 = MaxPooling2D((2,2), strides=(2,2), name='pool4')(conv4_3) conv5_1 = Conv2D(512,kernel_size=(3,3),activation='relu',padding='same', name='conv5_1')(pool4) conv5_2 = Conv2D(512,kernel_size=(3,3),activation='relu',padding='same', name='conv5_2')(conv5_1) conv5_3 = Conv2D(512,kernel_size=(3,3),activation='relu',padding='same', name='conv5_3')(conv5_2) pool5 = MaxPooling2D((2,2), strides=(2,2), name='pool5')(conv5_3) fc6 = Conv2D(4096,kernel_size=(7,7),activation='relu',padding='same', name='fc6')(pool5) drop6 = Dropout(0.5)(fc6) fc7 = Conv2D(4096,kernel_size=(1,1),activation='relu',padding='same', name='fc7')(drop6) drop7 = Dropout(0.5)(fc7) score_fr = Conv2D(21, kernel_size=(1,1), padding='valid', name='score_fr')(drop7) score2 = Conv2DTranspose(21, kernel_size=(4,4),strides=(2,2), name='score2')(score_fr) upscore2 = Cropping2D(cropping=1, name='crop2')(score2) score_pool4 = Conv2D(21, kernel_size=(1,1), padding='valid', name='score_pool4')(pool4) fuse = add([upscore2,score_pool4], name='fuse') score4 = Conv2DTranspose(21, kernel_size=(4,4),strides=(2,2), name='score4', use_bias=False)(fuse) upscore4 = Cropping2D(cropping=1, name='crop4')(score4) score_pool3 = Conv2D(21, kernel_size=(1,1), padding='valid', name='score_pool3')(pool3) fusex = add([upscore4,score_pool3], name='fusex') upscore16 = Conv2DTranspose(21, kernel_size=(16,16),strides=(8,8), name='upsample', use_bias=False)(fusex) score = Cropping2D(cropping=4, name='score')(upscore16) model = Model(inputs=inputData, outputs=[score]) return model

參考文獻
1 SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
2 DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
3 Fully Convolutional Networks for Semantic Segmentation
4 ICNet for Real-Time Semantic Segmentation on High-Resolution Images
5 Learning Deconvolution Network for Semantic Segmentation Hyeonwoo
6 U-Net: Convolutional Networks for Biomedical Image Segmentation
Olaf
7 Conditional Random Fields as Recurrent Neural Networks
Shuai

相關推薦

基於深度學習影象分割keras實現

影象分割 深度學習尤其是卷積神經網路在影象處理的許多領域都獲得了很大的成功,在分類,識別等方面都已經獲得了很大的成功.在深度學習把影象分類和識別達到極致之後。深度學習開始在影象分割方面開始進行收割了。影象分割的意思就是對於影象中每個畫素進行分類操作。

深度學習 影象分割開原始碼(附連結,超級全)

轉自github,感謝作者mrgloom的整理 Awesome Semantic Segmentation Networks by architecture Semantic segmentation Instance aware segmentation

機器學習—— 基於深度學習的推薦系統的實現

一.問題描述 任務 參賽隊伍利用給定的頭條問答資料(包括專家標籤、問題資料以及問題分發資料,詳見資料描述部分),進行鍼對問題的專家挖掘。給定若干問題,參賽者需要預測哪些專家更有可能回答這些問題。具體的,針對每個問題和一位候選專家,參賽者需要根據計算該專家回答問題的概率。實

基於深度學習影象語義分割技術概述之4常用方法 5.4未來研究方向

https://blog.csdn.net/u014593748/article/details/72794459 本文為論文閱讀筆記,不當之處,敬請指正。 A Review on Deep Learning Techniques Applied to Semantic Segmen

基於深度學習遷移學習的遙感影象場景分類實踐(AlexNet、ResNet)

卷積神經網路(CNN)在影象處理方面有很多出色的表現,在ImageNet上有很多成功的模型都是基於CNN的。AlexNet是具有歷史意義的一個網路,2012年提出來當年獲得了當年的ImageNet LSVRC比賽的冠軍,此後ImageNet LSVRC的冠軍都是都是用CNN做的,並且層

基於深度學習影象語義分割演算法綜述(截止20180715)

這篇文章講述卷積神經網路在影象語義分割(semantic image segmentation)的應用。影象分割這項計算機視覺任務需要判定一張圖片中特定區域的所屬類別。 這個影象裡有什麼?它在影象中哪個位置? 更具體地說,影象語義分割的目標是將影象的每個畫素所

基於深度學習影象分割總結

一、影象分割類別 隨著深度學習的發展,在分割任務中出現了許多優秀的網路。根據實際分割應用任務的不同,可以大致將分割分為三個研究方向:語義分割、例項分割、全景分割。這三種分割在某種意義上是具有一定的聯絡的。 語義分割: 畫素級別的語義分割,對影象中的每個畫素都劃分出對應的

如何基於深度學習實現影象的智慧稽核

如何基於深度學習實現影象的智慧稽核 背景 美團每天有百萬級的圖片產生量,運營人員負責相關圖片的內容稽核,對涉及法律風險及不符合平臺規定的圖片進行刪除操作。由於圖片數量巨大,人工稽核耗時耗力且稽核能力有限。另外對於不同稽核人員來講,稽核標準難以統一且實時變化。所以有必要藉助機器實現智慧稽核

乾貨 | 美團如何基於深度學習實現影象的智慧稽核?

[1]H. Chen, S. S. Tsai, G. Schroth, D. M. Chen, R. Grzeszczuk, and B. Girod. “Robust text detection in natural images with edge-enhanced maximally stable e

深度學習影象識別課程】keras實現CNN系列:(9)bottleneck特徵生成

一、bottleneck特徵說明 將所有影象穿過(VGG16去掉最後全連線層)得到輸出,作為新的輸入。 二、bottleneck特徵提取程式碼 1、載入預處理影象庫 from keras.applications.vgg16 import preprocess

深度對抗學習影象分割超解析度中的應用

深度學習已經在影象分類、檢測、分割、高解析度影象生成等諸多領域取得了突破性的成績。但是它也存在一些問題。首先,它與傳統的機器學習方法一樣,通常假設訓練資料與測試資料服從同樣的分佈,或者是在訓練資料上的預測結果與在測試資料上的預測結果服從同樣的分佈。而實際上這兩者

基於深度學習影象分割: Learning to Segment Object Candidates -- Facebook

轉載請表明:http://blog.csdn.net/ikerpeng/article/details/52453830內容概要:採用的是 兩步走的 Object detection的 深度學習框架,首先通過框架的第一部分的分支給出 目標 proposal; 然後 在prop

基於深度學習的三維點雲分類分割(找了幾篇文章)

https://blog.csdn.net/bflong/article/details/79655200http://www.sohu.com/a/162727821_715754https://www.cnblogs.com/li-yao7758258/p/8182846

基於深度學習影象語義分割演算法綜述

   作者: 葉  虎            編輯:趙一帆           前  言本文翻譯

基於深度學習影象語義分割技術概述之4常用方法

本文為論文閱讀筆記,不當之處,敬請指正。 A Review on Deep Learning Techniques Applied to Semantic Segmentation:原文連結 4 深度學習影象分割的常用方法 深度學習在多種高階計算機視

基於深度學習影象語義分割技術概述之背景與深度網路架構

本文為論文閱讀筆記,不當之處,敬請指正。  A Review on Deep Learning Techniques Applied to Semantic Segmentation: 原文連結 摘要 影象語義分割正在逐漸成為計算機視覺及機器學習研究人員的研究熱點。大

基於深度學習方法的dota2遊戲資料分析與勝率預測(python3.6+keras框架實現

很久以前就有想過使用深度學習模型來對dota2的對局資料進行建模分析,以便在英雄選擇,出裝方面有所指導,幫助自己提升天梯等級,但苦於找不到資料來源,該計劃擱置了很長時間。直到前些日子,看到社群有老哥提到說OpenDota網站(https://www.opendota.com/)提供有一整套的介面可以獲取dot

基於深度學習影象分割在高德的實踐

一、前言 影象分割(Image Segmentation)是計算機視覺領域中的一項重要基礎技術,是影象理解中的重要一環。影象分割是將數字影象細分為多個影象子區域的過程,通過簡化或改變影象的表示形式,讓影象能夠更加容易被理解。更簡單地說,影象分割就是為數字影象中的每一個畫素附加標籤,使得具有相同標籤的畫素具有某

基於深度學習的圖像語義分割技術概述之5.1度量標準

-s 公平性 的確 由於 表示 n-2 sub 包含 提升 本文為論文閱讀筆記,不當之處,敬請指正。 A Review on Deep Learning Techniques Applied to Semantic Segmentation:原文鏈接 5.1度量標準 為何需

基於深度學習的病毒檢測技術無需沙箱環境,直接將樣本文件轉換為二維圖片,進而應用改造後的卷積神經網絡 Inception V4 進行訓練檢測

進制 思科 開發 主題 需求 做的 病毒 無法 大於 話題 3: 基於深度學習的二進制惡意樣本檢測 分享主題:全球正在經歷一場由科技驅動的數字化轉型,傳統技術已經不能適應病毒數量飛速增長的發展態勢。而基於沙箱的檢測方案無法滿足 APT 攻擊的檢測需求,也受到多種反沙箱技術的