1. 程式人生 > >YOLO系列之YOLO-Lite:實時執行在CPU上的目標檢測演算法

YOLO系列之YOLO-Lite:實時執行在CPU上的目標檢測演算法

實時目標檢測一直是yolo系列的追求之一,從yolo v1開始,作者就在論文中強調real-time。在後期的v2和v3的發展過程中,慢慢在P&R(尤其是recall rate)上下不少功夫。同時,計算量的增大也犧牲了yolo的實時性

tiny-yolo是輕量級的yolo,在不那麼要求mAP的場景下,tiny-yolo可以作為v2甚至v3的代替結構。事實上,對於無GPU的裝置來講,tiny-yolo依然很難達到實時

北卡的研究者針對無GPU的情況下,研究了一種實時性的yolo改進版本——yolo-lite。實驗證明,yolo-lite速度比tiny-yolo v2快8.8倍

作者想研究一種non-GPU的實時檢測演算法,所以需要選擇一種基準演算法,在基準演算法上進行實時性優化。毫無疑問,選擇本來就在速度上佔據很大優勢的one-stage檢測演算法yolo是理所應當的。這就是所謂的,站在巨人的肩膀上。

以yolo為起點,所以這個演算法的名字叫yolo-lite。其研發團隊與最開始的yolo團隊並無什麼聯絡。

yolo lite網路結構

整個結構就像簡化版的yolo v2,用一個通體的CNN來做目標檢測。其實沒啥好重點研究的,還是採用主流的leaky relu作為主要的啟用函式,保留了v2的最大池化來調整張量尺寸,而不是用的v3那種通過卷積步長來調整尺寸。是一箇中規中矩的卷積神經網路。

有以下幾點改進:

 1. 把416x416的輸入尺寸替換成224x224的輸入尺寸;輸入尺寸更小意味著需要的FLOP量也越小;

2. 更少的層數以及更淺的網路;刪繁就簡,大大減少weights數量;

3. 去除BN層。yolo-tiny都是保留有BN層的,而yolo-lite卻完全去除了BN層。BN層能夠在訓練時加快收斂,同時,能夠提高訓練效果。讀過yolo v2論文的童鞋可以發現,BN層的加入直接使得yolo v2的mAP上升了5%。BN一度被認為是神器,Joseph團隊自從v2使用了BN之後,就再也沒拋棄BN了。而yolo-lite的研究者發現,BN層並不能很大幅度的提升演算法效能,尤其是在模型網路層數很淺的情況下。但是BN層卻會增加很多計算開銷,於是yolo lite的作者直接去掉了BN層。

實驗結果

mAP是被吊打了,但幀率卻大大提高。

作者表示,還可以做以下改進:

1. 可以加入shuffle-net中的depth-wise卷積;

2. 可以使用Image-net的預訓練模型;

3. 可以用減枝演算法進一步壓縮模型;

總結

yolo-lite帶來的啟示是“刪繁就簡”,如果不是為了刷榜(COCO),而是在實際專案中,這種“就簡”的思維用處很大。首先,COCO資料集是檢測80分類,然而我們實際專案中往往用不到這麼多類別的檢測。直接用人家在COCO資料集上訓練出來的模型,其實有很多冗餘。對於簡單的專案,丟簡單的模型,反而不容易造成過擬合。

BN層可能對小模型的幫助並沒有那麼大,如果在小任務如單目標檢測上,可以考慮去掉BN層。

相關推薦

YOLO系列YOLO-Lite實時執行CPU目標檢測演算法

實時目標檢測一直是yolo系列的追求之一,從yolo v1開始,作者就在論文中強調real-time。在後期的v2和v3的發展過程中,慢慢在P&R(尤其是recall rate)上下不少功夫。同時,計算量的增大也犧牲了yolo的實時性。 tiny-yolo是輕量級的

Domain Adaptive Faster R-CNN經典域自適應目標檢測演算法,解決現實中痛點,程式碼開源 | CVPR2018

> 論文從理論的角度出發,對目標檢測的域自適應問題進行了深入的研究,基於H-divergence的對抗訓練提出了DA Faster R-CNN,從圖片級和例項級兩種角度進行域對齊,並且加入一致性正則化來學習域不變的RPN。從實驗來看,論文的方法十分有效,這是一個很符合實際需求的研究,能解決現實中場景多樣

Yolo-lite:實時的適用於移動裝置的目標檢測演算法(比ssd和mobilenet更快)

YOLO-LITE: A Real-Time Object Detection Algorithm Optimized for Non-GPU Computers 論文:Yolo-lite paper 專案:Yolo-lite 摘要:   作者提出了一種可以應用於行動式裝置中執行的

Office 365 系列十一使用 Windows PowerShell 管理 O365 平臺

命令管理o365 命令管理office 365 正如之前我們說的,通過 O365 管理中心、Exchange 管理中心、Lync 管理中 心 SharePoint 管理中心能做的事情和能夠實現的需求是遠遠滿足不了客戶的時 間需求的。可以使用用於 Windows PowerShell 的 Azu

skyfans每天一個Liunx命令系列十四tcpdump

今天我們繼續來學習PERFORMANCE MONITORING AND STATISTICS(效能監測與統計),今天學習的是什麼命令呢,那就是tcpdump(獲取資料包資訊),通常我們運維人員稱之為抓包命令. 此命令是我們作為一個運維人員必須要知道並且會的命令。 Ready Go!!!

skyfans每天一個Liunx命令系列十二mpstat、vmstat、iostat

今天我們繼續來學習PERFORMANCE MONITORING AND STATISTICS(效能監測與統計),今天學習的是什麼命令呢,那就是mpstat、vmstat、iostat Ready Go!!! 命令使用方法:命令 + 時長+次數,例如檢視處理器相關內容,每2秒收集一次,

skyfans每天一個Liunx命令系列十一htop

今天我們繼續來學習PERFORMANCE MONITORING AND STATISTICS(效能監測與統計),今天學習的是什麼命令呢,那就是htop(顯示管理程序內容相關資訊增強版),什麼叫增強版,那就是更漂亮了! 題外話:IG的S8比賽,這個命令是給予IG的希望,希望我更新完這章之後

skyfans每天一個Liunx命令系列十五lsof

今天我們繼續來學習PERFORMANCE MONITORING AND STATISTICS(效能監測與統計),今天學習的是什麼命令呢,那就是lsof(列出系統上的所有開啟檔案) Ready Go!!! 文章目錄 今天我們繼續來學習PERFORMANCE MON

skyfans每天一個Liunx命令系列十六id

截止到上一章,我們終於學完了PERFORMANCE MONITORING AND STATISTICS(效能監測與統計)的命令。 那今天我們來學習什麼類的命令呢,那就是USER INFORMATION AND MANAGEMENT(使用者資訊和管理),今天學習的是什麼命令呢,那就是id(顯示

skyfans每天一個Liunx命令系列十九usermod

今天我們繼續來學習USER INFORMATION AND MANAGEMENT(使用者資訊和管理),今天學習的是什麼命令呢,那就是usermod(修改使用者帳號) Ready Go!!! usermod --help -c, --comment COMMENT 修改使用者賬

skyfans每天一個Liunx命令系列十八userdel

今天我們繼續來學習USER INFORMATION AND MANAGEMENT(使用者資訊和管理),今天學習的是什麼命令呢,那就是userdel(刪除使用者) 注意:本章內容由於涉及到刪除內容,請在實驗中謹慎操作,切記不可在實際生產環境中執行,否則出現一切後果自負!!!!! Rea

目標檢測演算法另一分支的發展(one stage檢測演算法YOLO、SSD、YOLOv2/YOLO 9000、YOLOv3

目標檢測可以理解為是物體識別和物體定位的綜合,不僅僅要識別出物體屬於哪個分類,更重要的是得到物體在圖片中的具體位置。 目前的目標檢測演算法分為兩類: 一類是two-stage,two-stage檢測演算法將檢測問題劃分為兩個階段,首先產生候選區域(region proposals),然後

Java 併發程式設計系列帶你瞭解多執行

早期的計算機不包含作業系統,它們從頭到尾執行一個程式,這個程式可以訪問計算機中的所有資源。在這種情況下,每次都只能執行一個程式,對於昂貴的計算機資源來說是一種嚴重的浪費。 作業系統出現後,計算機可以執行多個程式,不同的程式在單獨的程序中執行。作業系統負責為各個獨

【Java進階面試系列二】哥們,那你說說系統架構引入訊息中介軟體有什麼缺點?

歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至週五早8點半!精品技術文章準時送上! 一、前情回顧 上篇文章「Java進階面試系列之一」你們系統架構中為何要引入訊息中介軟體?,給大家講了講訊息中介軟體引入系統架構的作用,主要是解決哪些問題的。 其比較常見的實踐場景是: 複雜系統

QtConcurrent系列run函式建立多執行

        在Qt多執行緒程式設計中,我們一般使用QThread,QRunnable等類來實現多執行緒。除此之外,QT還提供了一個更高階的實現多執行緒的方式,那就是QtConcurrent框架,QtConcurrent框架中提供了許多高階的,效能更好的多執行緒API函式,

【轉載】迷 crontab 異常執行、不報錯、無日誌

問題說明 : 谷歌雲服務 gce debian例項crontab不執行,經檢視發現crontab時區與系統時區不一致,系統時區為utc+8,crontab為utc。 修改後重啟cron服務沒有立即生效,第二天檢視crontab服務時區已正常,但仍無法執行任務,查閱到以下文

理解yolo系列目標檢測演算法

在計算機視覺任務中,如果說做的最成熟的是影象識別領域,那麼緊隨其後的應該就是目標檢測了。筆者接觸目標檢測也有一段時間了,用mobilenet_ssd演算法做過手機端的實時目標檢測,也用faster-rcnn做過伺服器端的二維碼檢測,儘管一直都知道yolo的效果也

敏捷開發一千零一問系列十四敏捷開發加班嗎?

這是敏捷開發一千零一問系列的第十四篇。(在這裡提問,之一,之二,之三,問題總目錄)正逢週末,又是愚人節,群中有人正在加班,想起上次培訓中間休息的時候,討論起這個“敏捷開發加班嗎”的問題,雖然後來沒有作為課後投票入選,但這裡也完整回答一下。問題敏捷開發加班嗎?樓下有人問到“敏捷

常用目標檢測演算法R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

一、目標檢測常見演算法         object detection,就是在給定的圖片中精確找到物體所在位置,並標註出物體的類別。所以,object detection要解決的問題就是物體在哪裡以及是什麼的整個流程問題。

Java併發程式設計系列十九原子操作類

原子操作類簡介 當更新一個變數的時候,多出現資料爭用的時候可能出現所意想不到的情況。這時的一般策略是使用synchronized解決,因為synchronized能夠保證多個執行緒不會同時更新該變數。然而,從jdk 5之後,提供了粒度更細、量級更輕,並且在多核