1. 程式人生 > >檢測9000類物體的YOLO9000

檢測9000類物體的YOLO9000

YOLO9000

原文為Joseph Redmon與Ali Farhadi的文章“YOLO9000: Better, Faster, Stronger”。本想總結一下,看完發現整篇文章多餘的話有點少。YOLO的實時性眾所周知,所以還等什麼,皮皮蝦我們走~

摘要

多尺度訓練YOLOv2;權衡速度和準確率,執行在不同大小影象上。YOLOv2測試VOC 2007 資料集:67FPS時,76.8mAP;40FPS時,78.6mAP。

聯合訓練物體檢測和分類,可檢測未標籤檢測資料的物體的類別。ImageNet檢測驗證集上,YOLO9000僅用200類中的44類檢測資料獲得19.7mAP;對COCO中缺少的156類檢測資料獲得16.0

mAP。

這裡寫圖片描述

1. 簡介

神經網路引入後,檢測框架變得更快更準確。然而,大多數檢測方法受限於少量物體。相比分類和加標籤等其它任務的資料集,目前物體檢測的資料集有限。
將檢測擴充套件到分類層面。然而,標註檢測影象相比其它任務更加昂貴。因此,提出新方法擴充套件目前檢測系統的範圍。對物體分類的分層檢視可合併不同的資料集。
檢測和訓練資料上聯合訓練物體檢測器,用有標籤的檢測影象來學習精確定位,同時用分類影象來增加詞彙和魯棒性。

原YOLO系統上生成YOLOv2檢測器;在ImageNet中超過9000類的資料和COCO的檢測資料上,合併資料集和聯合訓練YOLO9000。

2. 更好

相比Fast R-CNN對YOLO誤差分析,顯示YOLO有顯著的定位誤差。YOLO與其它基於區域建議的方法召回率相對較低。因此,保持分類準確率的同時,著重改善召回率和定位。

計算機視覺一般傾向更大更深的模型。訓練更大網路或整合多個模型通常會有更好的效果。然而,我們希望YOLOv2檢測器保留速度的同時更加精確,因此,簡化網路來易於學習表示。結果見表2

這裡寫圖片描述

2.1 塊歸一化(Batch Normalization)

無需其它形式的正則,塊歸一化收斂時顯著變好。塊歸一化有助於模型正則,可從未過擬合的模型中刪除dropout。YOLO上所有卷積層上新增塊歸一化,mAP提高2%

2.2 分類器輸入更高解析度

所有領先的檢測方法都使用ImageNet上預訓練好的分類器。從AlexNet起,大多分類器的輸入影象解析度都小於256×256
- 原YOLO:224

×224大小的影象上訓練分類器,檢測時解析度提高至448。網路須同時切換至學習物體檢測,並調整至新的輸入解析度。
- YOLOv2:ImageNet上按448×448解析度,微調分類網路10個週期(epochs);檢測資料上微調網路。高解析度的分類網路使mAP提高4%。

2.3 用錨箱(Anchor Boxes)的卷積

YOLO用卷積特徵提取器頂部的全連線層來直接預測邊界框的座標。
Faster R-CNN用精心挑選的先驗來預測邊界框。Faster R-CNN中的區域建議網路(RPN)僅用卷積層直接預測錨箱的偏移和置信度。因預測層為卷積層,RPN預測特徵圖中每個位置上錨箱的偏移。
預測偏移而非座標,簡化了問題,且使網路更易學。

刪除YOLO的全連線層,用錨箱預測邊界框:刪除一池化層使網路卷積層的輸出有更高的解析度。將網路輸入影象的解析度從448×448縮小至416×416,此時特徵圖有奇數個位置,出現了一中心單元。
輸入影象解析度為416×416,YOLO卷積層按32倍數下采樣影象,輸出特徵圖大小為13×13

錨箱的使用從空間位置中解耦出類別預測,並預測每個錨箱的類別和物體(objectness):
- 物體預測:同YOLO,仍為預測建議框與真實框的IOU;
- 類別預測:給定已存在物體,預測該類的條件概率。

使用錨箱,準確度略降。YOLO對每幅圖僅預測98個建議框,而用錨箱模型可預測上千個建議框。無錨箱時的中間模型得69.5mAP和81%召回率;有錨箱時的模型得69.2mAP和88%召回率。mAP略減,但召回率的提高說明模型仍可能改進。

2.4 維度聚類

YOLO中用錨箱會碰到兩個問題。第1個問題:錨箱的維度為手動挑選,網路可學習合適地調整錨箱,但為網路挑選更好的先驗能更容易學到更好的檢測器。

訓練集邊界框上用K-means聚類來自動找好的先驗:用標準K-means(歐幾里德距離)時,更大的邊界框會產生更大的誤差。而獲得好的IOU分數的先驗應與建議框的大小無關。因此,使用如下距離測量:

d(box,centroid)=1IOU(box,centroid)
選多個k值,畫出最近中心的平均IOU,如下圖。權衡模型複雜度和高召回率,選擇k=5。聚類的中心與手動挑選的錨箱明顯不同,窄長的邊界框更多。

這裡寫圖片描述

比較表1中聚類策略的最近先驗與手動挑選的錨箱的平均IOU。5個先驗中心(61%)與9個錨箱(60.9%)的效果接近。9個先驗中心的平均IOU高得多(67.2%)。
K-means生成的邊界框有更好的表示,任務更易學。

這裡寫圖片描述

2.5 直接預測位置

YOLO中用錨箱時遇到的第2個問題:模型不穩定,尤其是早期迭代時。大多不穩定來自預測錨箱的位置(x,y)。區域建議網路預測值txty,中心座標(x,y)計算如下:

x=(txwa)+xay=(tyha)+ya
如,tx=1時,x=wa+xa,預測的位置右移一個錨箱寬度;tx=1時,x=xawa,預測的位置左移相同的寬度。
該公式無約束,使錨箱可到達影象中任意位置。隨機初始化的模型要花很長時間穩定,才可預測出合理的偏移。
除了預測偏移,同YOLO一樣,預測相對網格單元的位置座標。真實邊界框的位置範圍落入[0,1]之間。Logistic啟用約束網路預測落入該範圍。

對輸出特徵圖中的每個單元,網路預測5個邊界框。網路預測每個邊界框的5個座標tx,ty,tw,thto。若單元從影象的左上角偏移(cx,cy),且邊界框有先驗pw,ph,則預測為:

bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=ph

相關推薦

檢測9000物體YOLO9000

YOLO9000 原文為Joseph Redmon與Ali Farhadi的文章“YOLO9000: Better, Faster, Stronger”。本想總結一下,看完發現整篇文章多餘的話有點少。YOLO的實時性眾所周知,所以還等什麼,皮皮蝦我們走~

R-FCN每秒30幀實時檢測3000物體,馬里蘭大學Larry Davis組最新目標檢測工作

【導讀】美國馬里蘭大學、復旦大學和Gobasco人工智慧實驗室聯合提出R-FCN-3000實時3000類目標檢測框架,對R-FCN框架中的物體檢測和分類進行解耦。本文對R-FCN體系結構進行修改,其中位置敏感濾波器在不同的目標類之間共享來進行定位。對於細粒度的分類,這些位

檢測終端

移動終端 android ipad navi window code 移動端 color 是否 js檢測: var ua = navigator.userAgent.toLocaleLowerCase(); var isMobile = /iPhone|iPad|iPod

python模塊之imghdr檢測圖片

logs python模塊 資料 .cn href 類型 manager 表示 response 1. imghdr是什麽 imghdr是一個用來檢測圖片類型的模塊,傳遞給它的可以是一個文件對象,也可以是一個字節流。 能夠支持的圖片格式: 2. 如何使用 提

檢測raid型和磁盤壞道腳本

hostname inux tex img 磁盤信息 second har inf printf #!/bin/sh #腳本功能: #安裝工具MegaCli64 #Host Information:主機名和ip地址 #Raid Information:raid信息和充電狀

/物體的方法呼叫 u3d學習總結筆記本

1.訊息推送 :遊戲物件.SendMessage //無視修飾符限制public/private 2.獲取指令碼 :遊戲物件.GetComponents<指令碼元件>().方法();//獲取自身所有元件 3.拖拽 //====================

i春秋:警惕您站上的空位元組截斷目錄路徑檢測繞過上傳漏洞

截斷目錄繞過上傳檢測 首先開啟BurpLoader,選擇 Proxy->Options ,設定BurpLoader代理地址,預設為127.0.0.1、埠:8080。 接著修改IE的代理設定,修改代理地址以及埠(設定與在BurpLoader中設定的代理地址相同:127.0.0.1、埠:8080)。

yolo2 檢測到的物體輸出2

說明 檢測到的物體被box所標記,輸出box所在的位置,並存儲到txt中。 上次是在src/image.c的程式碼中修改的,相當於是在畫出檢測出的物體的框的同時把座標存入了txt,這次修改的是examples/detector.c檔案。 先來看一下主函式 examples/d

yolo2檢測到的物體位置輸出

說明 檢測到的物體被box所標記,輸出box所在的位置,並存儲到txt中。(待完善,如何根據每個圖片名字儲存不同的txt) 進入src/image.c,修改void draw_detections函式。 void draw_detections(image im, int

UGUI射線檢測與普通物體檢測

UGUI物體檢測與普通物體檢測有所不同(UGUI射線檢測已經被封裝好): 1.Graphic Raycaster 主要用於UI上的射線檢測,掛有這個元件的物體,必須要掛上Canvas這個元件(當掛上Graphic Raycaster時Canvas也會自動掛上)。 Ign

[Java工具]spring常用工具 2.特殊字元轉義和方法入參檢測工具

特殊字元轉義 由於 Web 應用程式需要聯合使用到多種語言,每種語言都包含一些特殊的字元,對於動態語言或標籤式的語言而言,如果需要動態構造語言的內容時,一個我們經常會碰到的問題就是特殊字元轉義的問題。下面是 Web 開發者最常面對需要轉義的特殊字元型別: HTML 特

檢測com中CLSID為{F9364159-6AED-4F9C-8BAF-D7C7ED6160A8}的元件時失敗,錯誤80040154

         自己查了很多資料,都沒查到關於我這個的解決方法。遇到這種問題,網上的解決方法是首先在好的電腦的登錄檔中找這個CLSID(登錄檔裡面的資料夾CLSID包含了所有的CLSID),找到之後查出對應的dll檔案(這時候可能會有個問題,你

【OpenCV】OpenCV輪廓檢測,計算物體旋轉角度

OpenCV輪廓檢測,計算物體旋轉角度 效果還是有點問題的,希望大家共同探討一下 // FindRotation-angle.cpp : 定義控制檯應用程式的入口點。 // // findContours.cpp : 定義控制檯應用程式的入口點。 /

Spring 的優秀工具盤點,第 2 部分: 特殊字元轉義和方法入參檢測工具

特殊字元轉義 由於 Web 應用程式需要聯合使用到多種語言,每種語言都包含一些特殊的字元,對於動態語言或標籤式的語言而言,如果需要動態構造語言的內容時,一個我們經常會碰到的問題就是特殊字元轉義的問題。下面是 Web 開發者最常面對需要轉義的特殊字元型別: HTML 特

關於spring中Assert的應用(方法入參檢測工具

Web 應用在接受表單提交的資料後都需要對其進行合法性檢查,如果表單資料不合法,請求將被駁回。類似的,當我們在編寫類的方法時,也常常需要對方法入參進行合 法性檢查,如果入參不符合要求,方法將通過丟擲異常的方式拒絕後續處理。舉一個例子:有一個根據檔名獲取輸入流的方法:Input

檢測某個方法是否屬於某個中--解析php函數method_exists()與is_callable()的區別

檢查 -1 元素 高級 ech 9.png true strong 原創 php函數method_exists() 與is_callable()的區別在哪?在php面相對象設計過程中,往往我們需要在調用某一個方法是否屬於某一個類的時候做出判斷,常用的方法有 meth

Spark 數據導入時的檢測相關問題

spark 大數據 hadoop sqlserverSpark 可以讀取文本,csv和rmdb中的數據,並且帶有類型自動檢測功能public final static String DATA_SEPARATOR_TAB = "\t";session.read().format("csv").option("d

為什麽用Object.prototype.toString.call(obj)檢測對象型?

fin date regexp 對象 boolean on() obj all function console.log(Object.prototype.toString.call("jerry"));//[object String]console.log(Objec

cocos 射線檢測 3D物體 (Sprite3D點擊)

get director 轉化 cocos hello dir 調用 true 得到 看了很多朋友問怎麽用一個3D物體做一個按鈕,而且網上好像還真比較難找到答案, 今天翻了一下cocos源碼發現Ray 已經封裝了intersects函數,那麽剩下的工作其實很簡單了, 從屏幕

一篇文章看懂物體檢測的發展脈絡 轉

現實生活 有關 攝像頭 層次 contex 人的 圖像特征 其實在 展示 轉 https://zhuanlan.zhihu.com/p/28399320 第一,什麽是物體檢測,如何去評價一個物體裏系統的好壞。 第二,物體檢測整個的框架是怎麽樣的?它一般包含了圖像的分類