深度學習框架之pytorch(63)目標檢測R-CNN1

2021-02-19 AI一步之遙



下面介紹第一個影響重大的基於深度學習的目標檢測算法R-CNN,自2012年AlexNet網絡在ImageNet上大放異彩之後,很多領域逐漸引入了深度學習特別是深度卷積神經網絡的方法。2013年首次將深度卷積神經網絡引入目標檢測領域的算法是OverFeat算法,出自論文《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》,它基於AlexNet卷積神經網絡,實現了識別、定位、檢測共用同一個網絡框架,獲得了2013年ILSVRC定位比賽的冠軍。在2014年提出的目標檢測算法R-CNN真正引起世人對深度學習目標檢測的注意,而且R-CNN的性能遠遠優於OverFeat,因此但不道德的默認R-CNN算法是深度學習目標檢測算法的開山之作。R-CNN出自論文《Rich feature hierarchies for accurate object detection and semantic segmentation》。


使用了 region proposals 的方法和convolutional neural networks卷積神經網絡,即 Regions with CNN features,簡稱R-CNN。



第一步:在一張輸入圖像上使用selective search算法生成1k~2k個候選區域region proposals。

第二步:在每個候選區域region proposal上使用深度卷積神經網絡,這裡使用的就是AlexNet,進行特徵提取,得到特徵向量。

第三步:將提取到的特徵向量分別送到每個類別的SVM分類器,判斷是否屬於該類別。

第四步:經過前三步能夠選擇出最好的候選區域region proposal,但是selective search算法可能生成的選區域region proposals不是特別的準確,所以在這一步通過回歸器對候選區域region proposal坐標進行修正。


selective search算法即選擇性搜索,簡稱ss算法,最早出現在論文《Efficient Graph-Based Image Segmentation》基於圖割的高效圖像分割算法,該算法在圖像分割和圖像的立體匹配上具有重要作用。在R-CNN中引用的ss算法來自論文《Selective Search for Object Recognition》,當然這裡的ss算法引用了上面的,R-CNN引文中的ss算法取決於以下設計考慮:Capture All Scales。目標可以在圖像中以任何比例出現。此外,一些目標的邊界比其他對象的邊界不太清晰。因此,在選擇性搜索中,必須考慮所有的目標scale,這可以通過分層算法來實現。Diversification。沒有單一的最優策略將區域分組在一起,區域可以形成一個物體,因為只有顏色,只有紋理,或者因為部分是封閉的。此外,光照條件,如陰影和光的顏色,可能會影響區域如何形成一個目標。因此,希望有一套不同的策略來處理所有情況,而不是一個在大多數情況下都很有效的策略。Fast to Compute。選擇性搜索的目標是產生一組可能的目標位置,用於實際的對象識別框架。這個集合的創建不應該成為計算瓶頸,因此算法應該相當快。基於上面的考量標準,ss算法採用分層分組算法作為基礎,由於自下而上的分組是一種流行的分割方法《Efficient Graph-Based Image Segmentation》,因此ss算法選擇使用它。因為分組的過程本身是有層次的,所以可以通過繼續分組過程,直到整個圖像成為一個單獨的區域,這樣就自然地生成所有scale的位置,滿足了捕捉所有scale的條件。由於區域可以產生比像素更豐富的信息,希望儘可能使用基於區域的特徵。為了得到一組理想情況下不跨越多個對象的小的起始區域,使用了《Efficient Graph-Based Image Segmentation》論文中的方法。總而言之,核心就是《Efficient Graph-Based Image Segmentation》中圖像分割算法。首先,使用《Efficient Graph-Based Image Segmentation》中的方法來創建初始區域。然後,使用貪婪算法迭代地將區域合併在一起,計算所有相鄰區域之間的相似度,將兩個最相似的區域合併在一起,並計算結果區域與其相鄰區域之間的新相似度。最後,重複上面步驟,將最相似的區域合併直到整個圖像變成單個區域。

Complementary Colour Spaces。考慮不同的場景和照明條件,因此要在具有一系列不變性的各種顏色空間中執行分層分組算法。。Complementary Similarity Measures。文中定義了四個互補的、快速計算的相似性度量,這些度量都在[0,1]範圍內。Complementary Starting Regions。改變互補的起始地區《Efficient Graph-Based Image Segmentation》中的方法是最快的。

selective search算法的python代碼


原始的selective search算法的論文附帶的代碼是c++版本的,感興趣的可以自行查找學習。這裡介紹python版本的selective search算法。第一種方法,也是最簡單的一種方法,下載selective search算法的python包。網絡大神眾多,所以selective search算法包也有多個,先來看看selective-search包,下載命令、使用案例以及結果如下。
pip install selective-search

from selective_search import selective_searchimport cv2
image = cv2.imread("./dog.jpg")boxes = selective_search(image, mode='single', random_sort=False)
print(boxes)for x0, y0, x1, y1 in boxes: cv2.rectangle(image, (x0, y0), (x1, y1), (255, 0, 0), 1)
cv2.imshow("image", image)cv2.waitKey(0)

再來看看另一個selective search算法的python包selectivesearch,安裝和使用命令如下。

pip install selectivesearch

from selectivesearch import selectivesearch
import cv2
image = cv2.imread("./dog.jpg")boxes = selectivesearch.selective_search(image, scale=500, sigma=0.6, min_size=50)
for r in boxes[1]: cv2.rectangle(image, (r["rect"][0], r["rect"][1]), (r["rect"][2], r["rect"][3]), (255, 0, 0), 1)
cv2.imshow("image", image)cv2.waitKey(0)

第二種方法是使用opencv-contrib-python,opencv圖像處理庫中帶有selective search算法的實現。安裝和舉例如下,下圖是間隔100個區域繪製的結果。從繪製效果和運行速度上看,opencv中的selective search都是最好的,所以推薦使用opencv。另外opencv由於對算法性能進行了優化在工業上應用廣泛,唯一存才的問題是有些版本變動和不兼容。

pip install opencv-contrib-python==3.4.3.18

import randomimport timeimport cv2
image = cv2.imread("./dog.jpg")ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()ss.setBaseImage(image)
method = "fast"
if method == "fast": ss.switchToSelectiveSearchFast()elif method == "quality": ss.switchToSelectiveSearchQuality()
start = time.time()rects = ss.process()end = time.time()
print("[INFO] selective search took {:.4f} seconds".format(end - start))print("[INFO] {} total region proposals".format(len(rects)))
for i in range(0, len(rects), 100):
output = image.copy() for (x, y, w, h) in rects[i:i + 100]: color = [random.randint(0, 255) for j in range(0, 3)] cv2.rectangle(output, (x, y), (x + w, y + h), color, 2)
cv2.imshow("Output", output) key = cv2.waitKey(0) & 0xFF if key == ord("q"):        break


相關焦點

  • 深度學習筆記 | 第7講:CNN目標檢測發家史之從R-CNN到yolo
    而 2013 年之後,神經網絡和深度學習逐漸取代了傳統的圖像檢測算法而成為目標檢測的主流方法。縱觀這幾年的深度學習目標檢測發展歷程,基於深度學習算法的一系列目標檢測算法大致可以分為兩大流派:深度學習目標檢測發展歷程深度學習目標檢測算法發展歷程如上圖所示,接下來小編就和大家一起分別從兩步走和一步走算法兩個方面來梳理目標檢測算法的發展歷程。
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    機器視覺領域的核心問題之一就是目標檢測 (object detection),它的任務是找出圖像當中所有感興趣的目標 (物體),確定其位置和大小。作為經典的目標檢測框架 Faster R-CNN,雖然是 2015 年的論文,但是它至今仍然是許多目標檢測算法的基礎,這在飛速發展的深度學習領域十分難得。
  • 深度學習框架搭建之PyTorch
    深度學習框架搭建之PyTorchPyTorch 簡介PyTorch 是由 Facebook 推出,目前一款發展與流行勢頭非常強勁的深度學習框架。PyTorch 與 NumPy 非常相似,可以說是它的替代者,支持 GPU 加速運算,用來搭建和訓練深度神經網絡。如果學習過 NumPy 以及常見的深度學習概念(如卷積層,循環層等),非常容易上手PyTorch。目前主流的深度學習框架主要有 TensorFlow,PyTorch,mxnet,caffe和Keras 等。
  • 深度學習目標檢測系列:faster RCNN實現|附python源碼
    目標檢測一直是計算機視覺中比較熱門的研究領域,有一些常用且成熟的算法得到業內公認水平,比如RCNN系列算法、SSD以及YOLO等。如果你是從事這一行業的話,你會使用哪種算法進行目標檢測任務呢?在我尋求在最短的時間內構建最精確的模型時,我嘗試了其中的R-CNN系列算法,如果讀者們對這方面的算法還不太了解的話,建議閱讀《目標檢測算法圖解:一文看懂RCNN系列算法》。
  • 機器視覺目標檢測補習貼之R-CNN系列 — R-CNN, Fast R-CNN, Faster R-CNN
    作者:David網址:http://nooverfit.com/wp/深度學習無疑在近年來使機器視覺和目標檢測上了一個新臺階。初識目標檢測領域,當然先要了解下面這些框架:RCNNFast RCNNFaster RCNNYoloSSD附一張發表RCNN並開啟目標檢測深度學習浪潮的Ross B.
  • 實戰 | 源碼入門之Faster RCNN
    前言學習深度學習和計算機視覺,特別是目標檢測方向的學習者,一定聽說過Faster Rcnn;在目標檢測領域,Faster Rcnn表現出了極強的生命力,被大量的學習者學習,研究和工程應用。網上有很多版本的Faster RCNN的源碼,但是很多版本代碼太過於龐大,對新入門的學習者學習起來很不友好,在網上苦苦尋找了一番後終於找到了一個適合源碼學習的Faster Rcnn的pytorch版本代碼。根據該版本的作者講該代碼除去注釋只有兩千行左右,並且經過小編的一番學習之後,發現該版本的代碼真的是非常的精簡幹練,讀起來「朗朗上口」,並且深刻的感覺到作者代碼功底之深厚。
  • 最全面的深度學習框架pytorch搭建過程
    深度學習一直是比較熱門的話題,在動手學習之前,需要搭建深度學習框架,如pytorch、TensorFlow、caffe、mxnet等。
  • 基於深度學習的目標檢測算法綜述
    一、從Rcnn到Faster-Rcnn從Rcnn開始Girshick大神將深度學習引入目標檢測領域,後來連續發力,最終將目標檢測的所有步驟都統一在了深度學習框架之下,這就意味著所有的計算過程都可以在GPU內進行,從而計算精度和計算速度都有了很大提升。
  • Torch7 開源 PyTorch:Python 優先深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。PyTorch 是一個 Python 軟體包,其提供了兩種高層面的功能:如有需要,你也可以復用你最喜歡的 Python 軟體包(如 numpy、scipy 和 Cython)來擴展 PyTorch。
  • Keras vs PyTorch:誰是第一深度學習框架?
    兩大框架的連結:  Keras:https://github.com/keras-team/keras (https://keras.io/)  PyTorch:https://github.com/pytorch/pytorch  你想學習深度學習嗎?
  • 目標檢測技術之Faster R-CNN詳解
    之前,我們介紹了目標物體檢測(object detection)是什麼以及它是如何用於深度學習的。去年,我們決定研究Faster R-CNN。通過閱讀原論文以及相關的參考文獻,我們對其工作原理及如何部署已經有了清晰的了解。
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    選自PyTorch.org機器之心編譯參與:吳攀、李澤南、李亞洲Torch7 團隊開源了 PyTorch。據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。
  • 詳解目標檢測Faster R-CNN
    這裡先對整體框架宏觀介紹,然後再對每個部分的細節分析。基於深度學習的目標檢測中,可能最難的問題就是生成長度不定(variable-length)的邊界框列表。在構建深度神經網絡時,最後的網絡輸出一般是固定尺寸的張量輸出(採用RNN的除外)。例如,在圖片分類中,網絡輸出是 (N,) 的張量,N 是類別標籤數,張量的每個位置的標量值表示圖片是類別i的概率值.
  • Facebook 發布 Detectron2:基於 PyTorch 的新一代目標檢測工具
    雷鋒網(公眾號:雷鋒網) AI 開發者按:Detectron 是 FAIR 在 2018 年初公開的目標檢測平臺,包含了大量業內最具代表性的目標檢測、圖像分割、關鍵點檢測算法,該框架主要基於 python 和 caffe2 實現,開源項目已獲得了超 2.2w
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    選自builtin作者:Vihar Kurama機器之心編譯參與:吳攀、杜偉谷歌的 Tensorflow 與 Facebook 的 PyTorch 一直是頗受社區歡迎的兩種深度學習框架。那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。
  • 深度 | 像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程
    使用深度學習進行目標檢測最大的困難可能是生成一個長度可變的邊框列表。使用深度神經網絡建模時,模型最後一部分通常是一個固定尺寸的張量輸出(除了循環神經網絡)。例如,在圖片分類中,輸出是 (N,) 形狀的張量,N 是類別的數量,其中在第 i 個位置標量含有該圖片屬於類別 i 的概率。RPN 中長度可變列表的問題可以使用錨點解決:使用固定尺寸的參考邊框在原始圖片上一致地定位。
  • 在Linux系統中安裝深度學習框架Pytorch
    設為星標才不會錯過哦     你好呀 我是然怡這篇推文是兩個月前復現深度學習論文時做的筆記一系列的筆記做了好幾篇看著閱讀量很低就沒有再發公眾號很久沒有推文了前幾天對公眾號進行了小改「然怡乾貨鋪」改為「水文sw」頭像也是換了的
  • 【乾貨】史上最全的PyTorch學習資源匯總
    · 開源書籍(https://github.com/zergtant/pytorch-handbook):這是一本開源的書籍,目標是幫助那些希望和使用PyTorch進行深度學習開發和研究的朋友快速入門。但本文檔不是內容不是很全,還在持續更新中。
  • 新手必備 | 史上最全的PyTorch學習資源匯總
    這是一本開源的書籍,目標是幫助那些希望和使用PyTorch進行深度學習開發和研究的朋友快速入門。但本文檔不是內容不是很全,還在持續更新中。(5)最後,為大家推薦一個簡單易上手的PyTorch中文文檔,非常適合新手學習:https://github.com/fendouai/pytorch1.0-cn。
  • Github 2.2K星的超全PyTorch資源列表
    項目地址:https://github.com/jonas-koehler/s2cnn概率/生成庫該部分項目主要涉及概率編程、統計推理和生成模型。1.ptstat:PyTorch 上的概率編程和統計推理。