深度學習之 OHEM (Online Hard Example Mining)

  • 論文 《Training Region-based Object Detectors with Online Hard Example Mining》
  • 鏈接 https://arxiv.org/pdf/1604.03540.pdf

Astract

摘要主要講了四點:

  • (1) 訓練過程需要進行參數的空間搜索
  • (2) 簡單樣本與難分辨樣本之間的類別不平衡是亟需解決的問題
  • (3) 自動地選擇難分辨樣本來進行訓練不僅效率高而且性能好
  • (4) 提出了OHEM算法,不僅效率高而且性能好,在各種數據集上表現優越

1 Introduction

(1) 分類器

由于目標檢測套用圖像分類的分類思想,但圖像分類的數據集和目標檢測的數據集存在天然的差距,目標檢測的目標框和背景框之間存在嚴重的不平衡。

在滑動窗口檢測器尤為嚴重,在DPM中甚至達到1:100,000,雖然在其他檢測器中有所減緩,但依然高達1:70

(2) hard negative mining

參考:深度學習之 hard negative mining (難例挖掘)

當然,這個類別不平衡問題并不是新問題,之前有個hard nagetive mining的算法是解決這個類別不平衡問題的,它的關鍵思想是逐漸地增加分辨錯誤的樣本。這個算法需要迭代地交替訓練,用樣本集更新模型,然后再固定模型 來選擇分辨錯的目標框并加入到樣本集中在傳統目標檢測中,用SVM做分 類器也用到hard negative mining這個算法來訓練;在一些淺層的神經網絡和 提升決策樹中也用hard negative mining來進行訓練。除此之外,使用深度學習的目標檢測算法也用到了hard negative mining

(3) why current state-of-the-art object detectors do not use hard negative mining?

那為什么不用hard negative mining,這主要是技術上的難度,hard negative mining需要交替地訓練,而這對于使用線上優化的算法來說是不可能的,例如SGD(隨機梯度下降算法)。使用SGD來訓練網絡需要上萬次更新網絡,如果每迭代幾次就固定模型一次,這樣的速度會慢得不可想象

(4) online hard example mining(OHEM)

那OHEM是怎樣解決類別不平衡的呢,OHEM是選擇損失較大的候選ROI, 具體為什么選擇損失較大的候選ROI,這個后面再仔細說

作者總結了一下,使用了OHEM之后,不僅避免了啟發式搜索超參數,而且提高了mAP。作者發現,訓練集越大越困難,OHEM的效果就越好

2 Related work

我們來回顧一下相關的工作

(1) Hard example mining

a. SVMs

優化SVMs時,維持一個工作樣本集。交替訓練,先訓練模型收斂于當前的工作集,然后固定模型,去除簡單樣本(能夠輕易區分的),添加困難樣本(不能夠區分的),這樣的訓練方式能使模型達到全局最優

b. non-SVMs

除了優化SVMs類的模型,也優化非SVMs類的模型,例如淺層神經網絡和提升決策樹

(2) ConvNet-based object detection

基于卷積網絡的檢測模型已經得到了很大的發展,例如R-CNN、OverFeat。 OverFeat是基于滑動窗口的檢測模型,R-CNN是基于選擇性搜索的檢測模型。 除此之外,還有Fast R-CNN,作者的研究工作就是在Fast R-CNN上展開的

(3) Hard example selection in deep learning

在深度學習方面相關的研究工作有三篇論文,這三篇論文的關注點在于圖像分類或者圖像識別,而OHEM關注點在目標檢測

3 Overview of Fast R-CNN

我們回顧一下Fast R-CNN網絡框架,如下圖

在這里插入圖片描述

(1) framework

圖片和候選框做為Fast R-CNN的輸入,Fast R-CNN分為兩部分,一部分是卷積網絡,包括卷積和池化層,另一部分是RoI網路,包括RoI池化層、全連接層和兩個損失層(一個是分類,一個檢測框回歸)

(2) inference

在測試的時候,圖片輸入到卷積網絡得到特征層,選擇性搜索算法得到RoIs, 對于每個RoI,得到其對應的特征向量,然后每個特征向量輸入到全連接層并得到兩個輸出,一個是概率,一個檢測框的坐標

(3) 那為什么選擇Fast R-CNN做為基礎的目標檢測器呢?

作者給出了幾點原因:

a. more broadly applicable

Fast R-CNN由兩部分組成,一是卷積網絡,二是RoI網絡,而這種結構也被其他的檢測模型沿用,例如SPPnet 和 MR-CNN

b. allow for training the entire conv network

雖然Fast R-CNN和SPPnet、MR-CNN在結構上相似,但Fast R-CNN允許更新整個卷積網絡,而SPPnet、MR-CNN卻固定住卷積網絡

c. SVM or not

SPPnet、MR-CNN使用SVM做分類器,Fast R-CNN不使用SVM

(4) How it trains

Fast R-CNN是使用SGD來優化模型的,每個RoI的損失包括分類損失和回歸損失,其中不斷降低分類損失使得模型分類更準確,不斷降低回歸損失使得預測標注框更準確。

SGD是以mini-batch為單位來更新模型的。對于每個mini-batch,先從數據集中取N張,然后每張圖片采樣B/N個RoIs

a. Foreground RoIs

一個RoIs怎樣才算作一個目標RoI(也就是含有目標的RoI)呢,在R-CNN, SPPnet, and MR-CNN等把RoI與真實框的交叉比(IOU)大于等于0.5即判定為目標RoI,在本文中也是這樣的設置

b. Background RoIs

而如果要被判定為背景RoI,則要求該RoI與真實框的交叉比大于等于 bg_lo這個閾值并且小于0.5。雖然這樣的設置能加快收斂和檢測準確度, 但這樣的設置會忽略不怎么出現但又十分重要的比較難分辨的背景。因此,在本文的OHTM方法中,作者去掉了這樣的設置。

c. Balancing fg-bg RoIs

為了解決目標框和背景框之間的不平衡,Fast R-CNN設置在一個 mini-batch中,它們之間的比例是1:3。作者發現,這樣的一個比例對于Fast R-CNN的性能是十分重要的,增大或者減小這個比例,都會使模型的性能有所下降,但使用OHEM便可以把這個比例值去掉。

4 Our approach

作者認為Fast R-CNN之前選擇RoI的方法不僅效率低而且也不是最優的,于是作者提出了OHEM,OHEM不僅效率高而且性能也更優

(1) Online hard example mining

我們知道,基于SVM的檢測器,在訓練時,使用hard example mining來選擇樣本需要交替訓練,先固定模型,選擇樣本,然后再用樣本集更新模型, 這樣反復交替訓練直到模型收斂

a. main observation

作者認為可以把交替訓練的步驟和SGD結合起來。之所以可以這樣,作者認為雖然SGD每迭代一次只用到少量的圖片,但每張圖片都包含上千個RoI,可以從中選擇hard examples,這樣的策略可以只在一個mini-batch中固定模型,因此模型參數是一直在更新的。

更具體的,在第t次迭代時,輸入圖片到卷積網絡中得到特征圖,然后把特征圖和所有的RoIs輸入到RoI網絡中并計算所有RoIs的損失,把損失從高到低排序,然后選擇B/N個RoIs。這里有個小問題,位置上相鄰的RoIs通過RoI網絡后會輸出相近的損失,這樣損失就翻倍。作者為了解決這個問題,使用了NMS(非最大值抑制)算法,先把損失按高到低排 序,然后選擇最高的損失,并計算其他RoI這個RoI的IoU(交叉比),移除IoU大于一定閾值的RoI,然后反復上述流程直到選擇了B/N個RoIs。

(2) Implementation details

how to implement OHEM in the FRCN detector

主要有兩種方法

a. An obvious way

直接修改損失層,然后直接進行hard example selection。損失層計算所有的RoIs,然后按損失從大到小排序,當然這里有個NMS(非最大值抑制) 操作,選擇hard RoIs并non-hard RoIs的損失置0。雖然這方法很直接,但效率是低下的,不僅要為所有RoI分配內存,還要對所有RoI進行反向傳播,即使有些RoI損失為0。

b. A better way

在這里插入圖片描述
為了解決這個問題,作者提出了上面這樣的架構。這個架構有兩個相同的RoI網絡,不同的是其中一個只可讀,另一個可讀可寫。我們看到(a) 是只可讀的,只對所有RoI做前向計算,所以只需分配內存給前向計算操作,(b)既可讀也可寫,對被選擇的hard RoIs不僅做前向計算也做反向傳播計算。

對于一次SGD迭代,計算過程如下:先計算出特征圖,可讀RoI網絡對所有RoI執行前向計算并計算每個RoI的損失,然后選擇hard RoIs。把這些hard RoIs輸入到可讀可寫的RoI網絡中執行前向前向計算和反向傳播更新網絡,并把可讀可寫的RoI網絡的參數賦值給只可讀的網絡,一次迭代就完成了。

這個方式和第一種方式在內存空間是差不多的,但第二種方式的速度快了兩倍。

5 Analyzing online hard example mining

(1) Experimental setup

在本文的實驗中使用兩種標準的卷積網絡,一種是VGG_CNN_M_1024,另一種是VGG16。論文實驗使用的超參數沿用Fast R-CNN的默認設置。

在這里插入圖片描述

(2) OHEM vs. heuristic sampling

為了檢驗hard example mining的重要性,我們做了兩組實驗,一組Fast R-CNN 帶有hard example mining,bg_lo=0.1,另一組沒有hard example mining,即 bg_lo=0。我們發現,對于VGGM網絡,mAP降低2.4點,VGG16基本沒變化。而使用OHEM,相對于使用了hard example mining的Fast R-CNN,mAP 提高了2.4點,相對于沒有使用hard example mining的Fast R-CNN,mAP提 高了4.8點。

(3) Robust gradient estimates

而在實驗中,存在一個這樣的疑慮,每個mini-batch只取兩張圖片會不會造成梯度不穩定和收斂慢,因為在一張圖片中選擇RoI會使RoIs之間的相關性很大。Fast R-CNN的作者認為在訓練過程不存在這樣的問題,而在OHEM中,由于是在一張圖片中選擇損失大的RoI,這樣可能造成RoIs之間的相關性更大。為了解答這個疑慮,我們把N設置為1,通過做實驗發現,傳統的Fast R-CNN大概降低一個點,而OHEM卻沒有太大變化,這說明使用了OHEM的Fast R-CNN是魯棒的。

(4) Why just hard examples, when you can use all?

那為什么只選擇hard examples呢,因為easy examples的損失很小,對梯度影響很小。為了用事實說話,作者做了一個這樣的實驗,把mini-batch的B分別設置為128和2048,結果表明,B為2048的相對于128的,mAP提高了一個點。不過,這提高的一個點對于使用了OHEM的Fast R-CNN來說是無關緊要的,因為OHEM的mAP提高更大,并且用更小的mini-batch收斂速 度會更快。

(5) Better optimization

作者為了分析使用了不同訓練方法的Fast R-CNN的訓練損失的情況,做了這樣的實驗,每優化20K步就記錄一下所有RoIs的平均損失,結果顯示, bg_lo=0(即沒有使用hard example mining)的訓練損失最高,bg_lo=0.1(使用 hard example mining)的損失有所降低,增大mini-batch(即設置bg_lo=0, B=2048),損失更低,最后,使用了OHEM的Fast R-CNN損失最低,這表明 Fast R-CNN使用了OHEM會訓練得更好。

(6) Computational cost

使用了OHEM的Fast R-CNN相對于沒有使用OHEM的Fast R-CNN在內存和每迭代一次所花的時間都有所增加,不過,作者認為這一點增加影響不大。

6 Conclusion

  • (1) 簡化訓練過程
  • (2) 更好的訓練收斂和檢測準確度的提高

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

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

相關文章

音視頻 詳解

avi文件格式詳解 AVI是音頻視頻交錯(Audio Video Interleaved)的英文縮寫,它是Microsoft公司開發的一種符合RIFF文件規范的數字音頻與視頻文件格式,原先用于Microsoft Video for Windows (簡稱VFW)環境,現在已被Windows 95/98、OS/2等多數操…

c6011取消對null指針的引用_C++| 函數的指針參數如何傳遞內存?

函數的參數是一個一級指針,可以傳遞內存嗎?如果函數的參數是一個一級指針,不要指望用該指針去申請動態內存。看下面的實例:#include using namespace std;void GetMemory(char *p, int num){p (char *)malloc(sizeof(char) * num…

Servlet執行時要實現的方法

Servlet執行時要實現的方法 public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy() 本文轉自sucre03 5…

axios 設置攔截器 全局設置帶默認參數(發送 token 等)

應用場景:1,每個請求都帶上的參數,比如token,時間戳等。2,對返回的狀態進行判斷,比如token是否過期代碼如下:[javascript] view plain copyaxios.interceptors.request.use( config &g…

深度學習目標檢測之 YOLO v2

論文名:《YOLO9000: Better, Faster, Stronger》原文:https://arxiv.org/pdf/1612.08242v1.pdf代碼:http://pjreddie.com/darknet/yolo/ YOLO v2 斬獲了CVPR 2017 Best Paper Honorable Mention。在這篇文章中,作者首先在YOLOv1的…

tcpmp 編譯 源代碼分析

TCPMP源代碼分析 TCPMP源代碼分析 播放器主要由核心框架模塊(common工程)和解碼器、分離器插件組成。TCPMP的插件非常多,其中主要的插件有:interface插件實現了TCPMP的界面,ffmpeg是系統主要的音視頻解碼模塊&#xff…

使用zerorpc踩的第一個坑:

Server端代碼:注意s.run() 和 s.run的區別,一個括號搞死我了.如果不加括號,服務端服務是不會啟動的,客戶端就會報連接超時的錯誤 Server端在本機所有IP上監聽4242端口的tcp協議 import zerorpcclass HelloRPC(object):   def __…

django存入mysql數據庫_django如何存數據到一個mysql數據表里面

讓我們聊聊這個話題, django如何存數據至mysql數據表里面,你會用什么方法?正常情況下,我們form邏輯處理后,直接form.save(),是,這個方法沒毛病;但有沒有其他的方法呢?假如…

【Luogu】P3343地震后的幻想鄉(對積分概率進行DP)

題目鏈接 神難qwq。配合rqy的博客食用。 首先我們學到有一個概率函數$p(x)$表示某事件發生概率取值小于x的函數。這個函數有什么特點呢? 那就是$\int_{-∞}^{∞}p(x)dx1$ 這個是顯然的 然后我們令p(x)為首次聯通的時間的概率分布函數 這其實等價于生成樹的最大權邊等…

深度學習目標檢測之 YOLO v3

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

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 來做開發的環境,配置好了之后,需要解決的一個關鍵問題就是老問題了:如何解決代碼中的中文問題。。。 其實但我們在配置編程環境的時候,就需要設…