目標檢測與分割總結

目標檢測最常用的三個模型:Faster R-CNN、SSD和YOLO

Faster R-CNN架構

在Faster RCNN中,候選框是經過RPN產生的,然后再把各個“候選框”映射到特征圖上,得到RoIs。

Faster R-CNN步驟:
(1) 由輸入圖片產生的區域候選
(2) 最后一層卷積輸出的所有通道
(3) ROI pooling
注解:ROI Pooling的意義
ROIs Pooling。顧名思義,是Pooling層的一種,而且是針對RoIs的Pooling,他的特點是輸入特征圖尺寸不固定,但是輸出特征圖尺寸固定;

ROI pooling總結:
(1)用于目標檢測任務;
(2)允許我們對CNN中的feature map進行reuse;
(3)可以顯著加速training和testing速度;
(4)允許end-to-end的形式訓練目標檢測系統。

整個Faster RCNN訓練過程可分為4步:

第一步:用在ImageNet數據集上訓練好的model初始化模型,訓練一個RPN網絡;

第二步:用在ImageNet數據集上訓練好的model初始化模型,同時用第一步中訓練好的RPN網絡生成的region proposal作為輸入,訓練一個Fast RCNN;

第三步:用第二步訓練好的Fast RCNN的網絡參數初始化RPN網絡,但是將RPN與Fast RCNN共享的網絡層的learning rate設置為0,僅微調RPN獨有的網絡層。

第四步:固定共享的網絡層,僅微調Fast RCNN所獨有的fc層。

網絡結構
image

可以清晰的看到該網絡對于一副任意大小PxQ的圖像,首先縮放至固定大小MxN,然后將MxN圖像送入網絡;而Conv layers中包含了13個conv層+13個relu層+4個pooling層;RPN網絡首先經過3x3卷積,再分別生成positive anchors和對應bounding box regression偏移量,然后計算出proposals;而Roi Pooling層則利用proposals從feature maps中提取proposal feature送入后續全連接和softmax網絡作classification(即分類proposal到底是什么object)。

復現方式

SSD架構

一 介紹

SSD–single shot multibox detection,是目標識別領域中對 不同類的物體(汽車,人。。。)的識別,識別的表示方式是對被識別的物體畫bounding box(包圍框)。除此之外還有其他種類的目標識別,比如下圖:

image

SSD網絡的特點是:對不同尺度下的 feature map 中每一個點都設置一些 default box, 這些default box有不同的大小和橫縱比例,對這些default box進行分類和邊框回歸的操作。在預測階段,SSD會對每個default box 生成一個分類標簽(屬于每一類的概率構成的向量)以及位置坐標的調整
image

prior box

二 SSD網絡結構:

image
SSD網絡由兩部分組成,前部分是一些經典的特征提取網絡,在這里作為base network,使用的是VGG16。后半部分是作者增加的網絡,提取成特征的基礎之上處理得到不同尺度的feature map,生成許多組default box進行預測分類和位置調整信息。
SSD除了在最終特征圖上做目標檢測之外,還在之前選取的5個特特征圖上進行預測。檢測過程不僅在填加特征圖(conv8_2, conv9_2, conv_10_2, pool_11)上進行,為了保證網絡對小目標有很好檢測效果,檢測過程也在基礎網絡特征圖(conv4_3, conv_7)上進行
SSD 方法的核心就是?predict?object(物體),以及其歸屬類別的 score(得分);同時,在feature map上使用小的卷積核去?predict?一系列 bounding boxes 的?box offsets,為了得到高精度的檢測結果,在不同層次的 feature maps 上去 predict?object、box offsets,同時,還得到不同?aspect ratio?的 predictions。?
這里簡單介紹一下default map cell以及 feature box
1、feature map?cell就是將feature?map切分成n*n的格子。
2、default box就是每一個格子上,生成一系列固定大小的?box,即圖中虛線所形成的一系列 boxes。
image

算法流程:
首先來看一下SSD的基本步驟:

1、輸入一幅圖片,讓圖片經過卷積神經網絡(CNN)提取特征,并生成 feature map
2、抽取其中六層的feature map,然后再 feature map 的每個點上生成 default box(各層的個數不同,但每個點都有)
3、將生成的所有 default box 都集合起來,全部丟到 NMS(極大值抑制)中,輸出篩選后的 default box,并輸出

算法框架

YOLO架構

YOLO(You Only Look Once)是一種基于深度神經網絡的對象識別和定位算法,其最大的特點是運行速度很快,可以用于實時系統。
輸入一張圖片,要求輸出其中所包含的對象,以及每個對象的位置(包含該對象的矩形框)。

對象識別和定位,可以看成兩個任務:找到圖片中某個存在對象的區域,然后識別出該區域中具體是哪個對象。對象識別這件事(一張圖片僅包含一個對象,且基本占據圖片的整個范圍),最近幾年基于CNN卷積神經網絡的各種方法已經能達到不錯的效果了。所以主要需要解決的問題是,對象在哪里。

最簡單的想法,就是遍歷圖片中所有可能的位置,地毯式搜索不同大小,不同寬高比,不同位置的每個區域,逐一檢測其中是否存在某個對象,挑選其中概率最大的結果作為輸出。顯然這種方法效率太低。

RCNN/Fast RCNN/Faster RCNN

RCNN開創性的提出了候選區(Region Proposals)的方法,先從圖片中搜索出一些可能存在對象的候選區Selective Search,大概2000個左右,然后對每個候選區進行對象識別。大幅提升了對象識別和定位的效率。不過RCNN的速度依然很慢,其處理一張圖片大概需要49秒。因此又有了后續的Fast RCNN 和 Faster RCNN,針對RCNN的神經網絡結構和候選區的算法不斷改進,Faster RCNN已經可以達到一張圖片約0.2秒的處理速度。

YOLO創造性的將候選區和對象識別這兩個階段合二為一,看一眼圖片就能知道有哪些對象以及它們的位置。實際上,YOLO并沒有真正去掉候選區,而是采用了預定義的候選區(準確說應該是預測區,并不是Faster RCNN所采用的Anchor)。也就是將圖片劃分為 7*7=49 個網格(grid),每個網格允許預測出2個邊框(bounding box,包含某個對象的矩形框),總共 49*2=98 個bounding box。可以理解為98個候選區,它們很粗略的覆蓋了圖片的整個區域。

YOLO結構
去掉候選區這個步驟以后,YOLO的結構非常簡單,就是單純的卷積、池化最后加了兩層全連接。最大的差異是最后輸出層用線性函數做激活函數,因為需要預測bounding box的位置(數值型),而不僅僅是對象的概率。YOLO網絡結構由24個卷積層與2個全連接層構成,網絡入口為448x448(v2為416x416),圖片進入網絡先經過resize,網絡的輸出結果為一個張量,維度為:

image

其中,S為劃分網格數,B為每個網格負責的邊框個數,C為類別個數。每個小格會對應B個邊界框,邊界框的寬高范圍為全圖,表示以該小格為中心尋找物體的邊界框位置。每個邊界框對應一個分值,代表該處是否有物體及定位準確度:,每個小格會對應C個概率值,找出最大概率對應的類別P(Class|object),并認為小格中包含該物體或者該物體的一部分。

輸入和輸出的映射關系
image

輸入

輸入就是原始圖像,唯一的要求是縮放到448*448的大小。主要是因為YOLO的網絡中,卷積層最后接了兩個全連接層,全連接層是要求固定大小的向量作為輸入,所以倒推回去也就要求原始圖像有固定的尺寸。那么YOLO設計的尺寸就是448*448。

輸出是一個 7*7*30 的張量(tensor)。

輸入圖像被劃分為 7*7 的網格(grid),輸出張量中的 7*7 就對應著輸入圖像的 7*7 網格。或者我們把 7*7*30 的張量看作49個30維的向量,也就是輸入圖像中的每個網格對應輸出一個30維的向量。參考上圖,比如輸入圖像左上角的網格對應到輸出張量中左上角的向量。

要注意的是,并不是說僅僅網格內的信息被映射到一個30維向量。經過神經網絡對輸入圖像信息的提取和變換,網格周邊的信息也會被識別和整理,最后編碼到那個30維向量中。具體來看每個網格對應的30維向量中包含了哪些信息?

image

網絡結構
image

網絡方面主要采用GoogLeNet,卷積層主要用來提取特征,全連接層主要用來預測類別概率和坐標。最后的輸出是7*7*30,7*7是grid cell的數量。

YOLO存在的優點是:

1.速度快,處理速度可以達到45fps,其快速版本(網絡較小)甚至可以達到155fps。這得益于其識別和定位合二為一的網絡設計,而且這種統一的設計也使得訓練和預測可以端到端的進行,非常簡便。

2.泛化能力強 ,可以廣泛適用于其他測試集。

3.背景預測錯誤率低,因為是整張圖片放到網絡里面進行預測。

YOLO存在的缺點是:

精度低,小目標和鄰近目標檢測效果差,小對象檢測效果不太好(尤其是一些聚集在一起的小對象),對邊框的預測準確度不是很高,總體預測精度略低于Fast RCNN。主要是因為網格設置比較稀疏,而且每個網格只預測兩個邊框,另外Pooling層會丟失一些細節信息,對定位存在影響。

YOLOv2架構

V1 缺陷之處:

1、輸入尺寸固定:由于輸出層為全連接層,因此在檢測時,YOLO 訓練模型只支持與訓練圖像相同的輸入分辨率。其它分辨率需要縮放成此固定分辨率;
2、占比小的目標檢測效果不好:雖然每個格子可以預測 B 個 bounding box,但是最終只選擇只選擇 IOU 最高的bbox作為物體檢測輸出,即每個格子最多只預測出一個物體。當物體占畫面比例較小,如圖像中包含畜群或鳥群時,每個格子包含多個物體,但卻只能檢測出其中一個。

YOLOv2的結構示意圖如下:
image

YOLOv2 引入了 faster rcnn 中 anchor box 的思想,對網絡結構的設計進行了改進,使得模型更易學習。

YOLOv2提出了一種新的分類模型Darknet-19。主要使用3x3卷積并在pooling之后channel數加倍(VGG);global average pooling替代全連接做預測分類,并在3x3卷積之間使用1x1卷積壓縮特征表示(Network in Network);使用 batch normalization 來提高穩定性,加速收斂,對模型正則化。Darknet-19的結構如下表:
image

包含 19 conv + 5 maxpooling.用 1x1 卷積層替代 YOLOv1 的全連接層。1x1 卷積層( 為了跨通道信息整合)如上圖的紅色矩形框部分。

升級版YOLO v3

YOLO的V1和V2都不如SSD的算法,主要原因是V1的448尺寸和V2版本的416尺寸都不如SSD的300,以上結論都是實驗測試的,V3版本的416跟SSD512差不多好,但速度快很多。yolov2有個毛病就是對小物體的檢測不敏感,而增加了多尺度預測之后,yolov3在對小物體檢測方便有了好轉,但是現在的毛病是對中、大size的物體表現的不是那么好。

image

YOLO V2是一個縱向自上而下的網絡架構,隨著通道數目的不斷增加,FLOPS是不斷增加的,而V3網絡架構是橫縱交叉的,看著卷積層多,其實很多通道的卷積層沒有繼承性,另外,雖然V3增加了anchor centroid,但是對GT的估計變得更加簡單,每個GT只匹配一個先驗框,而且每個尺度只預測3個框,V2預測5個框,這樣的話也降低了復雜度。

Mask R-CNN

Mask R-CNN:像素級目標檢測,不僅給出其邊界框,并且對邊界框內的各個像素是否屬于該物體進行標記。

image

可以看出MaskRCNN在有效檢測目標的同時輸出高質量的實例分割mask

image

可以看出MaskRCNN的網絡結構,作為FasterRCNN的擴展

1):用RolAlign代替了RoIPooling,RoIPooling使用取整量化,導致特征圖RoI映射回原圖RoI時空間不對齊明顯,造成誤差;RolAlign不使用取整量化而是采用雙線性插值,完成像素級的對齊;

2):FasterRcnn為每個候選對象ROI提供兩個輸出,一個類標簽,一個邊界框偏移量,為此,MaskRCNN并行添加了第三個分割mask的分支,mask分支是應用到每一個ROI上的一個小的FCN(Fully Convolutional Network),以pix2pix的方式預測分割mask。

分割

分割模型一般DeepLabv3+,U-net

U-net

image

U-net網絡非常簡單,前半部分作用是特征提取,后半部分是上采樣。在一些文獻中也把這樣的結構叫做編碼器-解碼器結構。由于此網絡整體結構類似于大寫的英文字母U,故得名U-net。

1、特征提取部分,每經過一個池化層就一個尺度,包括原圖尺度一共有5個尺度。
2、上采樣部分,每上采樣一次,就和特征提取部分對應的通道數相同尺度融合,但是融合之前要將其crop。這里的融合也是拼接。

U-net與其他常見的分割網絡有一點非常不同的地方:U-net采用了完全不同的特征融合方式:拼接,U-net采用將特征在channel維度拼接在一起,形成更厚的特征。

代碼復現

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell腳本單詞去重多個文件

shell腳本單詞去重多個文件 例如要求如下: 有多個txt文件,每個文件內有多行單詞 中間為英文的”,”,或者中文的”,”逗號作為分隔符。 world,世界 set,設置 good,好,商品 .... 將這些文件匯總去除重復…

win10連接煙臺大學校園網

第一步 右鍵網絡圖標,打開網絡管理中心 第二步: 設置添加新的網絡,方法步驟如下: 第三步:新建VPN連接,注意協議為L2TP 第四步: 第五步: 第六步: 創建結束后進入更…

Angular國際化方案

Angular國際化方案 首先和大家推薦一個xlf文件的操作工具,支持合并和編輯功能,github,到release界面下載。 對于Angular國際化,官方提供了i18n方案,也就是標簽的方式,通過angular CLI來識別。國際化方案必須在編譯前定義下來,所以不能動態翻譯。也就是當有人切換語言時,…

模擬退火算法(TSP問題)

模擬退火算法解決TSP問題 算法思想 模擬退火算法(Simulate Anneal,SA)是一種通用概率演算法,用來在一個大的搜尋空間內找尋命題的最優解 模擬退火算法來源于固體退火原理,將固體加溫至充分高,再讓其徐徐…

2-docker 安裝

2-docker 安裝 Ubuntu 安裝 由于 apt 源使用 HTTPS 以確保軟件下載過程中不被篡改。因此,我們首先需要添加使用 HTTPS 傳輸的軟件包以及 CA 證書。 $ sudo apt-get update$ sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \sof…

U-Net++粗略解釋

Paper:UNet: A Nested U-Net Architecture for Medical Image Segmentation u-net網絡的基本拓撲結構 目前最先進的圖像分割模型是各種個同樣的 encoder-decoder架構,他們具有一個關鍵的相似性:skip connections,它可以將編碼器…

Spring中的組合模式

組合模式是一種對象設計模式,它允許你將對象組合成樹形結構以表示“部分-整體”的層次結構,使得客戶端以統一的方式處理單個對象和對象的組合。在Spring框架中,組合模式被廣泛應用,讓我們深入分析一下。 在Spring中,組…

Docker+Nginx部署Angular

DockerNginx部署Angular 在部署Angular生產環境之前,需要電腦已經安裝docker。 添加Dockerfile 在已經完成的Angular項目的項目根目錄下添加Dockerfile文件。 Dockerfile文件內容: FROM nginx:1.11-1.11-alpine COPY index.html /usr/share/nginx/ht…

U-net網絡詳解

U-net網絡 簡單說一下網絡圖中各項所代表的內容: 藍/白色框表示feature map(特征圖) 藍色箭頭表示3x3卷積,主要用于特征提取 灰色箭頭表示skip-connection(跳躍連接,通常用于殘差網絡中),在這里是用于用于特征融合&…

Angular Web App部署Ubuntu Nginx

Angular Web App部署Ubuntu Nginx 當我們想發布Angular Web App的時候,我們想在開發的時候部署測試,那么這篇文章使用Nginx來部署我們的Angular 系統環境 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Rele…

遺傳算法-01背包

遺傳算法 算法思想 遺傳算法(Genetic Algorithm, GA)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。 其主要特點是直接對結構對象進行操作,不存在求導和函…

Angular Web App部署Linux Nginx Https

Angular Web App部署Linux Nginx Https 提示:這篇文章是基于內網的 互聯網就開始將 WEB 服務從 HTTP 遷移到 HTTPS,而現在為了更快的推進 HTTPS 的普及,Chrome 將從 2018 年 7 月起標記所有的 HTTP 網站為不安全鏈接。 HTTPS 會逐漸成為 WEB 服務的標配,最最重要的是,它能…

SOLO算法簡讀

論文鏈接:https://arxiv.org/abs/1912.04488 代碼鏈接:https://github.com/WXinlong/SOLO 摘要 提出一種新的實例分割方法。與語義分割等其他密集預測任務相比,實例分割的難度要大得多。為了預測每個實例的掩碼,主流方法要么遵…

Rxjs的flatMap使用

Rxjs的flatMap使用 flatMap是Rxjs比較繞的一個概念,這里我們只是講解如何使用。在Rxjs 4.0版本時叫flatMap,在Rxjs 5.0時被更名為margeMap,現在flatMap作為margeMap的別名使用,這是考慮向下兼容。 官方flatMap的定義: Projects each sourc…

關于Loss的簡單總結

Dice Loss 參考:https://blog.csdn.net/l7H9JA4/article/details/108162188 Dice系數: 是一種集合相似度度量函數,通常用于計算兩個樣本的相似度,取值范圍為[0,1]。 s2∣X∩Y∣∣X∣∣Y∣s \frac{2|X ∩ Y|}{|X||Y|} s∣X∣∣Y…

Angular_PWA使用+Demo

Angular_PWA使用+Demo 什么是PWA PWA(Progressive Web App)利用TLS,webapp manifests和service workers使應用程序能夠安裝并離線使用。 換句話說,PWA就像手機上的原生應用程序,但它是使用諸如HTML5,JavaScript和CSS3之類的網絡技術構建的。 如果構建正確,PWA與原生應…

SOLOv2論文簡讀

論文:SOLOv2: Dynamic, Faster and Stronger 代碼:https://github.com/WXinlong/SOLO 摘要 主要提出了作者在SOLOv2中實現的優秀的實例分割方法,旨在創建一個簡單、直接、快速的實例分割框架: 通過提出動態學習對象分割器的mas…

Angular6_PWA

Angular6_PWA Angular正式發布了V6.0,我們已經可以利用對應的@angular/cli V6.0來直接開發PWA應用了。 第一步:安裝@angular/cli V6.0 如果你機器上有老版本,請先卸載。 打開你的終端,執行: npm install -g @angular/cli 或 cnpm install -g @angular/cli 安裝成功…

Ubuntu18.04 關于使用vnc的踩坑

由于種種原因,手上多了一臺可使用的桌面版Ubuntu,正好用來測試代碼,方便調試。因為只能遠程,所以需要配置遠程連接。因此就打算使用vnc進行遠程連接,誰料一路坎坷,特此記錄。 安裝 設置桌面共享 需要注意…

App_Shell模型

App_Shell模型 App Shell 架構是構建 Progressive Web App 的一種方式,這種應用能可靠且即時地加載到您的用戶屏幕上,與本機應用相似。 App shell是支持用戶界面所需的最小的 HTML、CSS 和 JavaScript,如果離線緩存,可確保在用戶重復訪問時提供即時、可靠的良好性能。這意…