1. 程式人生 > >深度學習在目標檢測中的應用及其tensorflowAPI實踐(一)

深度學習在目標檢測中的應用及其tensorflowAPI實踐(一)

近些年深度學習在影象領域大放光彩,這篇文章先對目標檢測領域深度學習的發展做一個總結,再結合一個例子對tensorflow model zoo中的目標檢測API使用做一個說明。
本文內容如下(會分幾次發出來):

  • 目標檢測的任務

  • 深度學習在目標檢測中的應用

    • RCNN
    • fast RCNN
    • faster RCNN
    • RFCN
    • yolo
    • yolo V2
    • SSD
  • tensorflow目標檢測API的使用

(一)目標檢測的任務

為了說明什麼是目標檢測任務,我舉兩個例子來說明。
第一個VOC資料集,VOC2007資料集是一個訓練目標檢測的資料集,其圖片中一共有二十個種類的物體,包括 ‘aeroplane’, ‘bicycle’, ‘bird’等一共20個種類的物體,我們的任務就是在圖中把這些物體給找到,框出這些物體,並說明框住的物體是這二十個類別裡的哪一類,就像下面這樣:
圖片源自VOC官網

圖片源自VOC官網
對照上面的圖片,可以看出目標檢測主要是在做兩件事,一是確定圖片中有沒有你要找的東西,二是這東西在哪。
下面還有另外一個例子,資料集在這http://www.robots.ox.ac.uk/~vgg/data/scenetext,是一份場景文字資料集,這個資料集一共有80萬的圖片,每張圖片中都嵌入了文字,任務是找到圖片中的文字,把文字框出來,如下:
圖片中的框是我們用tensorflowAPI訓練的模型框出的圖片中的框是我們用tensorflowAPI訓練的模型框出的
對於這樣的目標識別任務,訓練資料集的輸入是一張圖片,加上圖片中每個物體框的左上角座標以及右下角座標。

(二)深度學習在目標檢測中的應用

深度學習在目標檢測中的應用主要分為兩個路子的方法:

  • RCNN,fast RCNN,fasterRCNN,RFCN這四種都屬於兩步走的方法,先找到圖片中有可能是物體的框子,然後再確定框子裡是什麼,並且精修框子的位置
  • yolo,yolo V2,SSD都屬於一步到位,通過一個神經網路一次性給出框子的座標和框子裡的東西是什麼

相對來說faster RCNN和RFCN的精度是比較高的,但因為分兩步走,所以檢測的耗時偏長,yoloV2和SSD的精度較faster RCNN和RFCN略微偏低,但可以速度快,可以滿足實時性要求。
關於幾種方法的對比,可以參考谷歌最近出的一篇論文,裡面詳細比較了faster RCNN,RFCN和SSD的精度和效能,連結:https://arxiv.org/abs/1611.10012
下面我們一一說明每種方法的步驟和原理,這部分會假設讀者已經瞭解像VGG,ResNet這樣的卷積神經網路,不然就會雲裡霧裡了。此外這是一份總結,會給出每個演算法的框架和其中一些不易理解的點,但不會詳細描述具體的網路細節,關於網路細節在網上已經有很多很好的部落格可以參考。

先從把深度學習帶入目標檢測的開山之作RCNN系列開始。

RCNN,fast RCNN,faster RCNN這三種方法是一脈相承的,從名字就可以看出,速度越來越快,同時準確度也越來越高。
下面是一張RCNN的整體架構圖:
這裡寫圖片描述
VOC資料集中的圖片是大小不一的,所以在RCNN中首先會把圖片縮放到固定尺寸(227x227),接著通過selective search的方法找到圖片中有可能是物體的2K個候選框(ROI),再把這些候選框依次送入CNN進行特徵提取輸出固定長度的向量,把這些向量輸入SVM分類器,注意這裡有20個SVM的二分類器,用來判斷這個ROI是某一類還是背景,並且會對這個ROI的bbox進行迴歸,以精修位置(下面細說),最後通過非極大抑制去除重複框住物體的框,留下最準確的框。
RCNN的步驟十分清晰,每一步要做什麼也很明白。
對selective search感興趣的話可以檢視相關論文,這裡不做解釋,因為這個方法在faster RCNN中就已經不用了。這裡只要知道它輸入是一張圖片,輸出是一堆這張圖片中有可能是物體的候選框。
CNN提取特徵部分是把每個ROI作為輸入,經過一系列卷積+pooling後接一個全連線層把不同大小的ROI計算成一個固定長度的向量。
對每個ROI使用SVM進行分類時,這裡SVM的訓練資料和前面CNN的訓練資料是不一樣的,因為訓練CNN需要大量資料,所以對候選框的選擇設定了一個比較寬泛的範圍,比如把和真實框(GT:ground truth)IOU大於0.3的都設定為正樣本,而在訓練SVM分類器時,由於傳統演算法對資料中的噪音比較敏感,所以把和GT的IOU大於0.5的作為正樣本,設定了一個更嚴格的閾值。
至於為什麼用SVM而不用softmax,作者認為這樣準確率更高,但在後續的演算法中都不再使用SVM了。
對於邊界迴歸(bbox-rg),可以看下面這張圖,圖中P框(藍色)為經過selective search輸出的一個預測框,G為真實框(紅色),G^為經過迴歸後更接近真實框的最終預測輸出框(黑色)。
這裡寫圖片描述
邊界迴歸就是要把P框迴歸到G^框。要做到這樣的變換,只需要兩步:平移和縮放,操作如下:
記這三個框為:P:(Px,Py,Pw,Ph),G:(Gx,Gy,Gw,Gh),G^:(G^x,G^y,G^w,G^h),這裡的下標x,y表示目標框中點的座標,w,h表示目標框的寬度和高度,對於G需要根據資料集中的label給定的頂點座標做轉換。
第一步平移,記橫向和縱向的平移量分別為ΔxΔy,可以用如下公式來表示:

Δx=Pwdx(p),Δy=Phdy(p)
這樣可以得到(G^x,G^y):
G^x=Pwdx(p)+Px,G^y=Phdy(p)+Py
第二步尺寸縮放,可以按照如下操作:
G^w=Pwedw(p),G^h=Phedh(p)
從上面的變換公式可以看出,只要學習dx(p),dy(p),dw(p),dh(p)這四個引數即可確定迴歸後的box.
因此在做bbox-rg時,只需要將前面CNN提取出的固定長度向量作為輸入,來學習dx(p),dy(p),dw(p),dh(p)即可。
RCNN在訓練時,由於selective search輸出的2000個框有大量的框都是沒有目標的,即為負樣本,所以在實際訓練時會通過抽樣的方式保持正負樣本的比例在1:3,同時訓練使用的CNN網路為在ImageNet上預訓練過的分類網路。

RCNN的步驟很繁瑣,但每一步要做的事很簡單。這裡面在用selective search生成2K個候選框後,裡面會有大量的重疊,這樣的話在CNN部分就會有很多重複的操作,極大的浪費了時間,於是fast RCNN在這方面做了優化。

fast RCNN的第一步生成候選區和RCNN一樣,使用了selective search的方法,和RCNN不一樣的是CNN部分不是把每個ROI依次輸入網路,而是把整張圖片一次性輸入網路,這樣重疊的ROI只會進行一次卷積操作,節省了時間,整體架構如下圖:
這裡寫圖片描述
從以上流程圖可以看出,理解fast RCNN的關鍵就在第三個框,經過第二步後我們得到的是圖片經過卷積的feature map,此時根據selective search輸出的2K個ROI,找到feature map上對應的區域,這部分ROI的大小是不一樣的,而後面要連線的是全連線層,因此必須把尺寸做到一樣大,所以使用了ROI pooling技術。
先看ROI pooling,稍後會解釋每個ROI傳遞給後面的全連線層這部分的反向傳播是怎麼做的。
ROI pooling 一點都不神祕,pooling的過程和常規的2x2 pooling或者3x3 pooling是一樣的,只不過這個2和3在變,比如說pooling後你要得到7x7xchannel的尺寸,當前這個ROI對應到feature map上的尺寸為14x14xchannel,那麼就對這個ROI做2x2的pooling,如果是21x21xchannel就是3x3的pooling,依次類推。
對比RCNN,RCNN把一個ROI編碼到一個固定長度的向量,送入SVM做分類,並作box-rg,fast RCNN也有這樣的操作,只不過是通過ROI pooling把一個ROI做成一個固定大小的feature map,接下來的操作類似,在這個固定大小的feature map後連線全連線層。這個全連線網路是一個學習多工的網路,輸出當前ROI中的類別並作bbox-rg。
這裡的多工學習最後分出兩個任務,一個softmax,用以區別當前這個ROI是什麼東西,另一個任務是box-rg.
多工的學習就要用到多工的損失函式,我們用損失函式來解釋這個多工是怎麼做的,fast RCNN的損失函式設定如下:

L(p,u,tu,v)=Lcls(p,u)+λ[u

相關推薦

深度學習目標檢測應用及其tensorflowAPI實踐

近些年深度學習在影象領域大放光彩,這篇文章先對目標檢測領域深度學習的發展做一個總結,再結合一個例子對tensorflow model zoo中的目標檢測API使用做一個說明。 本文內容如下(會分幾次發出來): 目標檢測的任務 深度學習在目標檢測中的應用

深度學習目標檢測應用及其tensorflowAPI實踐

這系列文章的內容目錄如下: 目標檢測的任務 深度學習在目標檢測中的應用 RCNN fast RCNN faster RCNN RFCN yolo yolo V2 SSD tensorflow目標檢測API的使用 在第一篇裡說完了RCNN和fast RC

【opencv、機器學習】opencv的SVM影象分類

一、影象分類概述 本模組是用在影象內容識別的部分,影象分類是利用計算機對影象進行定量分析,把影象中的每個像元或區域劃歸為若干個類別中的一種,以代替人工視覺判讀的技術。從目視角度來說,對影象進行提高對比度、增加視覺維數、進行空間濾波或變換等處理的目的就是使人們能夠憑藉知識

深度學習傑出人物專訪系列(Andrew Ng)分享

兩天前,Yotube使用者Preserve Knowledge,在Youtube上分享了一套Andrew NG採訪深度學習領域的傑出人物以一套視訊,包括深度學習之父Geffery Hinton,卷積神經網路創始人Yoshua Bengio,生成對抗GAN創始人Ian

深度學習做球星顏值打分完整案例

已經上傳了完整的程式碼和資料,資料比較少,大家可以幫忙補充。專案地址(記得給個start):https://github.com/jimenbian/face_rank先來說一下專案的背景,這次做的是一個最基礎的影象識別案例,通過訓練一個模型來給NBA球星的顏值打分,嗯,樓主

linux驅動開發之framebuffer應用編程實踐

linux驅動開發之framebuffer驅動 1、framebuffer應用編程 (1)打開設備文件 (2)獲取設備信息 宏定義的命令在/linux/fb.h中 不可變信息FSCREENINFO,使用ioctl參數有FBIOGET_FSCREENINFO宏名,表示用ioctl從

深度學習在 CTR 應用

核心 融合 輸出 -s 情況 ... 能夠 rec 數據 歡迎大家前往騰訊雲技術社區,獲取更多騰訊海量技術實踐幹貨哦~ 作者:高航 一. Wide&&Deep 模型 首先給出Wide && Deep [1] 網絡結構: 本質上是線性模

深度學習目標檢測經典模型比較RCNN、Fast RCNN、Faster RCNN

深度學習目標檢測經典模型比較(RCNN、Fast RCNN、Faster RCNN)   Faster rcnn是用來解決計算機視覺(CV)領域中目標檢測(Object Detection)的問題的。 區別目標分類、定位、檢測 一、傳統的目標檢測方法 其實目標檢

windows+tensorflow object detection api 深度學習目標檢測實踐

1、在github上下載tensorflow/model專案 1. 首先把protoc-win32資料夾下面的protoc.exe移至protobuf-python/src目錄下。 2. 在cmd中進入protobuf-python/python目錄,先執行a

深度學習目標檢測之YOLO系列

近年來目標檢測流行的演算法主要分為兩類:1、R-CNN系列的two-stage演算法(R-CNN、Fast R-CNN、Faster R-CNN),需要先使用啟發式方法selective search或者CNN網路RPN產生候選區域,然後在候選區域上進行分類和迴歸,準確度高但

深度學習目標檢測系列:faster RCNN實現|附python原始碼

目標檢測一直是計算機視覺中比較熱門的研究領域,有一些常用且成熟的演算法得到業內公認水平,比如RCNN系列演算法、SSD以及YOLO等。如果你是從事這一行業的話,你會使用哪種演算法進行目標檢測任務呢?在我尋求在最短的時間內構建最精確的模型時,我嘗試了其中的R-CNN系列演算法,如果讀者們對這方面的

深度學習目標檢測_01

    基本上有三個月沒記錄具體的學習心得了。主要目前的研究重點放在影象識別和目標檢測上,所以這次就先開始寫寫目標檢測的內容,之後有時間再把理論學習的部分的坑填了。     目前而言,在目標檢測方面有不少的網路和模型,例如yolo、R-CNN、fast R-CNN等等,種類

深度學習目標檢測系列:文弄懂YOLO演算法|附Python原始碼

在之前的文章中,介紹了計算機視覺領域中目標檢測的相關方法——RCNN系列演算法原理,以及Faster RCNN的實現。這些演算法面臨的一個問題,不是端到端的模型,幾個構件拼湊在一起組成整個檢測系統,操作起來比較複雜,本文將介紹另外一個端到端的方法——YOLO演算法,該方法操作簡便且模擬速度快,效

深度學習目標檢測模型全面綜述:Faster R-CNN、R-FCN和SSD

選自medium 機器之心編輯部 Faster R-CNN、R-FCN 和 SSD 是三種目前最優且應用最廣泛的目標檢測模型,其他流行的模型通常與這三者類似。本文介紹了深度學習目標檢測的三種常見模型:Faster R-CNN、R-FCN 和 SSD。 圖為機

深度學習-目標檢測綜述

二、目標檢測公共資料集 RuntimeWarning: invalid value encountered in log targets_dw = np.log(gt_widths / ex_widths) 那麼將lib/datasets/pasca

Matlab: 深度學習目標檢測xml標註資訊批量統計

""" https://blog.csdn.net/gusui7202/article/details/83239142 qhy。 """ 程式1:xml_read()   #xml讀取   程式2:mian() #xml內容統計 使用:將兩個程式放入同一個資料夾

深度學習-目標檢測資料集以及評估指標

資料集和效能指標 目標檢測常用的資料集包括PASCAL VOC,ImageNet,MS COCO等資料集,這些資料集用於研究者測試演算法效能或者用於競賽。目標檢測的效能指標要考慮檢測物體的位置以及預測類別的準確性,下面我們會說到一些常用的效能評估指標。 資料集 PA

深度學習目標檢測(object detection)系列 Faster R-CNN

Faster R-CNN簡介 RBG團隊在2015年,與Fast R-CNN同年推出了Faster R-CNN,我們先從頭回顧下Object Detection任務中各個網路的發展,首先R-CNN用分類+bounding box解決了目標檢測問題,SP

深度學習目標檢測常用工具型程式碼:對檢測出來的結果單獨進行softnms操作

# -*- coding: utf-8 -*- """ Created on Mon Apr 9 21:09:09 2018 對每一類生成的prebbox.txt進行softnms操作 1.讀入文字,讀入bbox @author: ygx """ import os imp

深度學習目標檢測:RCNN,Fast,Faster,YOLO,SSD比較

需要說明一個核心: 目前雖然已經有更多的RCNN,但是Faster RCNN當中的RPN仍然是一個經典的設計。下面來說一下RPN:在Faster RCNN當中,一張大小為224*224的圖片經過前面的5個卷積層,輸出256張大小為13*13的 特徵圖(你也可以理解為一張13*13*256大小的特徵圖,256表