深度學習目標檢測之 YOLO v3

  • 論文名:《YOLOv3: An Incremental Improvement》
  • 論文地址
    • https://pjreddie.com/media/files/papers/YOLOv3.pdf
    • https://arxiv.org/abs/1804.02767v1
  • 論文代碼
    • https://github.com/yjh0410/yolov2-yolov3_PyTorch
    • keras:https://github.com/qqwweee/keras-yolo3

YOLOv3沒有太多的創新,主要是借鑒一些好的方案融合到YOLO里面。不過效果還是不錯的,在保持速度優勢的前提下,提升了預測精度,尤其是加強了對小物體的識別能力。

YOLO3主要的改進有:

  1. 利用多尺度特征進行對象檢測(類FPN)
  2. 更好的基礎分類網絡(類ResNet)和分類器 darknet-53,見下圖。
  3. 分類器-類別預測:YOLOv3不使用Softmax對每個框進行分類,主要考慮因素有兩個:
    1. Softmax使得每個框分配一個類別(score最大的一個),而對于Open Images這種數據集,目標可能有重疊的類別標簽,因此Softmax不適用于多標簽分類。
    2. Softmax可被獨立的多個logistic分類器替代,且準確率不會下降。 分類損失采用binary cross-entropy loss.

新的網絡結構Darknet-53

darknet-53借用了resnet的思想,在網絡中加入了殘差模塊,這樣有利于解決深層次網絡的梯度問題,每個殘差模塊由兩個卷積層和一個shortcut connections,

1,2,8,8,4代表有幾個重復的殘差模塊,整個v3結構里面,沒有池化層和全連接層,網絡的下采樣是通過設置卷積的stride為2來達到的,每當通過這個卷積層之后

圖像的尺寸就會減小到一半。而每個卷積層的實現又是包含 卷積+BN+Leaky relu,每個殘差模塊之后又要加上一個zero padding,論文中所給的網絡結構如下,由卷積模塊和殘差模塊組成;

在這里插入圖片描述

上圖的Darknet-53網絡采用 256?256?3256*256*3256?256?3 作為輸入,最左側那一列的1、2、8等數字表示多少個重復的殘差組件。每個殘差組件有兩個卷積層和一個快捷鏈路,示意圖如下:

在這里插入圖片描述
darknet-53仿ResNet, 與ResNet-101或ResNet-152準確率接近,但速度更快.對比如下:
在這里插入圖片描述
與darknet-19對比可知,darknet-53主要做了如下改進:

  • 沒有采用最大池化層,轉而采用步長為2的卷積層進行下采樣。
  • 為了防止過擬合,在每個卷積層之后加入了一個BN層和一個Leaky ReLU。
  • 引入了殘差網絡的思想,目的是為了讓網絡可以提取到更深層的特征,同時避免出現梯度消失或爆炸。
  • 將網絡的中間層和后面某一層的上采樣進行張量拼接,達到多尺度特征融合的目的。

模型可視化

具體的全部模型結構可以從這個網站的工具進行可視化分析:

https://lutzroeder.github.io/netron/

從Yolo的官網上下載yolov3的權重文件,然后通過官網上的指導轉化為H5文件,然后可以再這個瀏覽器工具里直接看yolov3的每一層是如何分布的;類似下邊截圖是一部分網絡(最后的拼接部分);

在這里插入圖片描述

利用多尺度特征進行對象檢測

對于多尺度檢測來說,采用多個尺度進行預測,具體形式是在網絡預測的最后某些層進行上采樣拼接的操作來達到;對于分辨率對預測的影響如下解釋:

分辨率信息直接反映的就是構成object的像素的數量。一個object,像素數量越多,它對object的細節表現就越豐富越具體,也就是說分辨率信息越豐富。這也就是為什么大尺度feature map提供的是分辨率信息了。語義信息在目標檢測中指的是讓object區分于背景的信息,即語義信息是讓你知道這個是object,其余是背景。在不同類別中語義信息并不需要很多細節信息,分辨率信息大,反而會降低語義信息,因此小尺度feature map在提供必要的分辨率信息下語義信息會提供的更好。(而對于小目標,小尺度feature map無法提供必要的分辨率信息,所以還需結合大尺度的feature map)
在這里插入圖片描述

YOLO2曾采用passthrough結構來檢測細粒度特征,在YOLO3更進一步采用了3個不同尺度的特征圖來進行對象檢測。網絡的最終輸出有3個尺度分別為1/32,1/16,1/8;

結合上圖看,卷積網絡在79層后,經過下方幾個黃色的卷積層得到一種尺度的檢測結果。相比輸入圖像,這里用于檢測的特征圖有32倍的下采樣。比如輸入是 416?416416*416416?416 的話,這里的特征圖就是 13?1313*1313?13 了。由于下采樣倍數高,這里特征圖的感受野比較大,因此適合檢測圖像中尺寸比較大的對象。

為了實現細粒度的檢測,第79層的特征圖又開始作上采樣(從79層往右開始上采樣卷積),然后與第61層特征圖融合(Concatenation),這樣得到第91層較細粒度的特征圖,同樣經過幾個卷積層后得到相對輸入圖像16倍下采樣的特征圖。它具有中等尺度的感受野,適合檢測中等尺度的對象。

最后,第91層特征圖再次上采樣,并與第36層特征圖融合(Concatenation),最后得到相對輸入圖像8倍下采樣的特征圖。它的感受野最小,適合檢測小尺寸的對象。

concat:張量拼接。將darknet中間層和后面的某一層的上采樣進行拼接。拼接的操作和殘差層add的操作是不一樣的,拼接會擴充張量的維度,而add只是直接相加不會導致張量維度的改變。

9種尺度的先驗框

隨著輸出的特征圖的數量和尺度的變化,先驗框的尺寸也需要相應的調整。YOLO2已經開始采用K-means聚類得到先驗框的尺寸,YOLO3延續了這種方法,為每種下采樣尺度設定3種先驗框,總共聚類出9種尺寸的先驗框。在COCO數據集這9個先驗框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。

分配上,在最小的 13?1313*1313?13 特征圖上(有最大的感受野)應用較大的先驗框(116x90),(156x198),(373x326),適合檢測較大的對象。中等的 26?2626*2626?26 特征圖上(中等感受野)應用中等的先驗框(30x61),(62x45),(59x119),適合檢測中等大小的對象。較大的52?5252*5252?52 特征圖上(較小的感受野)應用較小的先驗框(10x13),(16x30),(33x23),適合檢測較小的對象。

在這里插入圖片描述

感受一下9種先驗框的尺寸,下圖中藍色框為聚類得到的先驗框。黃色框式ground truth,紅框是對象中心點所在的網格。

在這里插入圖片描述

對象分類softmax改成logistic

預測對象類別時不使用softmax,改成使用logistic的輸出進行預測。這樣能夠支持多標簽對象(比如一個人有Woman 和 Person兩個標簽)。

輸入映射到輸出

在這里插入圖片描述

不考慮神經網絡結構細節的話,總的來說,對于一個輸入圖像,YOLO3將其映射到3個尺度的輸出張量,代表圖像各個位置存在各種對象的概率。

我們看一下YOLO3共進行了多少個預測。對于一個416*416的輸入圖像,在每個尺度的特征圖的每個網格設置3個先驗框,總共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 個預測。每一個預測是一個(4+1+80)=85維向量,這個85維向量包含邊框坐標(4個數值),邊框置信度(1個數值),對象類別的概率(對于COCO數據集,有80種對象)。

對比一下,YOLO2采用13*13*5 = 845個預測,YOLO3的嘗試預測邊框數量增加了10多倍,而且是在不同分辨率上進行,所以mAP以及對小物體的檢測效果有一定的提升。

訓練過程

YoloV3 的訓練過程,特別是樣本的選擇和 V1 和 V2 已經完全不一樣了。

在 V1 和 V2 中是看 gd 中心所落的負責區域來確定 gd 由哪個點來負責。由于 V3 中有多個最終的 feature map。使用這種策略可能會導致矛盾(即一個 gd 同時屬于多個點負責)。所以需要新的方式確定樣本由哪個點的區域負責。原則很簡單:

所有預測的 pd 中和 gd 的 IOU 最大的那個就是正樣本。

作者還創新的把預測 pd 分成三類:

  • 正例:產生回歸框 loss 和類別置信度 loss。

    對任意的 gd,與所有的 pd 計算IOU,IOU 最大那個就是正例。一個pd,只能分配給一個gd。比如第一個 gd 已經匹配了一個正例的 pd,那么下一個 gd,需要在剩下的 pd 中尋找 IOU 最大的作為正例。

  • 負例:只產生置信度 loss。

    除正例以外(與 gd 計算后 IOU 最大的檢測框,但是IOU小于閾值,仍為正例),與全部 gd 的 IOU 都小于閾值(論文中為 0.5),則為負例。

  • 忽略:不產生任何 loss。

    除正例以外,與任意一個 gd 的 IOU 大于閾值(論文中為 0.5),則為忽略。

在 YoloV3 中置信域標簽直接設置為 1 和0。而不是 YoloV1 的 IOU 值。原因是假設 iou 是0.8,但學習到的可能只有 0.6 總是會低一些。不如直接將標簽設為 1 (學習到的可能就是 0.8)。

測試過程

由于有三個特征圖,所以需要對三個特征圖分別進行預測。

三個特征圖一共可以出預測 19 × 19 × 3 + 38 × 38 × 3 + 76 × 76 × 3 = 22743 個 pd 坐標以及對應的類別和置信度。

測試時,選取一個置信度閾值,過濾掉低閾值 box,經過 NMS(非極大值抑制),輸出整個網絡的預測結果。注意最后要還原到原始坐標。該改成測試模式的模塊需要改成測試模式(比如 BatchNorm)

小結

YOLO3借鑒了殘差網絡結構,形成更深的網絡層次,以及多尺度檢測,提升了mAP及小物體檢測效果。如果采用COCO mAP50做評估指標(不是太介意預測框的準確性的話),YOLO3的表現相當驚人,如下圖所示,在精確度相當的情況下,YOLOv3的速度是其它模型的3、4倍。
在這里插入圖片描述
對不同的單階段和兩階段網絡進行了測試。通過對比發現,YOLOv3達到了與當前先進檢測器的同樣的水平。檢測精度最高的是單階段網絡RetinaNet,但是YOLOv3的推理速度比RetinaNet快得多。

YOLOv3在mAP@0.5及小目標APs上具有不錯的結果,但隨著IOU的增大,性能下降,說明YOLOv3不能很好地與ground truth切合.

參考:

  • https://www.jianshu.com/p/d13ae1055302
  • https://www.cnblogs.com/ywheunji/p/10809695.html
  • https://zhuanlan.zhihu.com/p/362761373

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

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

相關文章

30本pdf完整版的經典Linux學習和開發教程和資料下載 android arm java 資料大全

史上最牛的Linux內核學習方法論 點擊下載我的arm_linux移植筆記 點擊下載S3C2440完全開發流程 點擊下載Linux系統命令及其使用詳解完整版 點擊下載Linux主要shell命令詳解 點擊下載深入理解Linux內核(第三版 pdf英文版) 點擊下載深入分析Linux內核源代碼教程pdf完整版 點擊下…

Fedex Ship Manager Software安裝

本文出自Simmy的個人blog:西米在線 http://simmyonline.com/archives/552.html 這個軟件的安裝頗費了我一番周章,特地Log之。下載:http://www.fedex.com/apac_english/fsmsoftware/ 安裝完后,接著輸入用戶信息,然后連…

mysql5.7.11解壓版安裝_Mysql5.7.11在windows10上的安裝與配置(解壓版)

第一步my-default.ini 添加配置:#綁定IPv4和3306端bind-address 127.0.0.1port 3306# 設置mysql的安裝目basedir E:\mysql# 設置mysql數據庫的數據的存放目datadirE:\mysql\data# 允許最大連接數max_connections200#設置默認字符集為utf8default-character-setutf…

【轉】博客美化(3)為博客添加一個漂亮的分享按鈕

閱讀目錄 1.社會化分享2.選擇一個分享按鈕3.添加到博客園博客博客園美化相關文章目錄:博客園博客美化相關文章目錄 在前2篇博客“博客美化(1)基本后臺設置與樣式設置”與"博客美化(2)自定義博客樣式細節"中詳細介紹了博客樣式設置的相關問題,當…

深度學習目標檢測之 YOLO v4

論文原文:https://arxiv.org/abs/2004.10934代碼 原版c: https://github.com/AlexeyAB/darknetkeras:https://github.com/Ma-Dan/keras-yolo4pytorch:https://github.com/Tianxiaomo/pytorch-YOLOv4 前言 2020年YOLO系列的作者…

[Android] 年年有魚手機主題

自制的年年有魚手機主題,希望大家喜歡!~ 下載地址:https://yunpan.cn/cqauQbiM97idd (提取碼:d272) 本文轉自haiyang45751CTO博客,原文鏈接: http://blog.51cto.com/haiyang457/1…

mysql 小數做索引_10 分鐘掌握 MySQL 的索引查詢優化技巧

本文的內容是總結一些MySQL的常見使用技巧,以供沒有DBA的團隊參考。如無特殊說明,存儲引擎以InnoDB為準。MySQL的特點了解MySQL的特點有助于更好的使用MySQL,MySQL和其它常見數據庫最大的不同在于存在存儲引擎這個概念,存儲引擎負…

模塊與包

一 模塊介紹 1、什么是模塊? #常見的場景:一個模塊就是一個包含了一組功能的python文件,比如spam.py,模塊名為spam,可以通過import spam使用。#在python中,模塊的使用方式都是一樣的,但其實細說的話&#x…

Linux 狀態命令之 sar

簡介 sar(System Activity Reporter 系統活動情況報告)是目前 Linux 上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁盤 I/O、CPU 效率、內存使用狀…

解決eclipse + pydev 編譯過程中有中文的問題

最近在學習python編程,開發環境設置好了,是用eclipse pydev 來做開發的環境,配置好了之后,需要解決的一個關鍵問題就是老問題了:如何解決代碼中的中文問題。。。 其實但我們在配置編程環境的時候,就需要設…

程序員的思考--終于確定了自己的技術發展方向

經過了將近5年的工作沉淀以后,終于確定了自己的職業發展方向。從現在開始終于可以有的放矢了,不再迷茫了。回想以往,找到這個方向,確實不是一件容易的事情,一路也是迷茫的走過來,隨著知識和工作經驗的積累&…

mysql正在運行安全文件怎么辦_MySQL服務器運行的安全文件化選項,所以它不能執行該語句什么情? 愛問知識人...

MySQL的事務支持不是綁定在MySQL服務器本身,而是與存儲引擎相關1。MyISAM:不支持事務,用于只讀程序提高性能 2。InnoDB:支持ACID事務、行級鎖、并發 3。Berkeley DB:支持事務一個事務是一個連續的一組數據庫操作&#…

C++項目參考解答:累加求圓周率

【項目-累加求圓周率】 用例如以下公式求π的近似值&#xff08;計算直到最后一項的絕對值小于10?5&#xff09; π41?1315?17...【參考解答】 #include <iostream> using namespace std; int main( ) {int n,sign;double total,f;n1;total0;sign1;f1; //用f代表待累加…

[ASP.NET AJAX]類似.NET框架的JavaScript擴展

最近AJAX風靡全世界&#xff0c;在CommunityServer中他運用了自己定義的封裝了js&#xff0c;并且可以跨瀏覽器&#xff0c;在較小的應用程序中&#xff0c;他比較適合&#xff0c;而且使用也比較簡單。但是對微軟的Microsoft AJAX還是一點不了解的我&#xff0c;從今天開始也要…

mysql 連接 指定字符集_關于Mysql連接池配置指定字符集的問題

問題是這樣的&#xff0c;我在寫一個網站&#xff0c;打算使用連接池。我使用J2EE開發&#xff0c;開始使用的是直連的方式&#xff0c;附上代碼public class ConnDb {private String getDriver "com.mysql.jdbc.Driver";private String getUrl "jdbc:mysql:/…

【原】iOS:手把手教你發布代碼到CocoaPods(Trunk方式)

概述 關于CocoaPods的介紹不在本文的主題范圍內&#xff0c;如果你是iOS開發者卻不知道CocoaPods&#xff0c;那可能要面壁30秒了。直奔主題&#xff0c;這篇文章主要介紹如果把你的代碼發布到CocoaPods代碼庫中&#xff0c;讓別人可以使用“pod search yourOpenProject”命令查…

kafka tool 查看指定group下topic的堆積數量_ELK架構下利用Kafka Group實現Logstash的高可用...

系統運維的過程中&#xff0c;每一個細節都值得我們關注下圖為我們的基本日志處理架構所有日志由Rsyslog或者Filebeat收集&#xff0c;然后傳輸給Kafka&#xff0c;Logstash作為Consumer消費Kafka里邊的數據&#xff0c;分別寫入Elasticsearch和Hadoop&#xff0c;最后使用Kiba…

jquery flot pie畫餅圖

具體效果如下&#xff1a; 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> 5 <title>Insert title here</title> 6 <script language"javas…

研發管理:產品研發團隊的早會

百度百科定義:研發管理就是在研發體系結構設計和各種管理理論基礎之上&#xff0c;借助信息平臺對研發過程中進行的團隊建設、流程設計、績效管理、風險管理、成本管理、項目管理和知識管理等的一系列協調活動。[詳細] 產品研發團隊在履行各種產品研發過程中&#xff0c;從大的…

mysql fetch rows_差異mysql_fetch_array()和mysql_fetch_rows()函數_mysql

區別mysql_fetch_array()和mysql_fetch_rows()函數form:http://www.uphtm.com/php/254.html如果我們不仔細看會發現象mysql_fetch_array()和mysql_fetch_rows()函數沒有什么區別&#xff0c;但是細細的看你會發現它們區別還是蠻大了&#xff0c;如果各位對于此函數的區別不了解…