數據科學工具包:手把手用YOLO做目標檢測

2020-12-09 雷鋒網

作為目前機器學習領域最火熱的研究方向之一,計算機視覺相關的技術一直備受關注。其中,目標檢測是計算機視覺領域常見的問題之一,如何平衡檢測的質量和算法的速度很重要。對於這個問題,計算機視覺工程師、VirtusLab 創始人 Piotr Skalski 發表了自己的心得,分享了關於他最喜歡的計算機視覺算法 YOLO 的實踐資料。以下便是他的全文。

前言

YOLO 是我最喜歡的計算機視覺算法之一,在很長一段時間裡,我計劃著專為它寫一篇博文。然而,我不希望它成為另一篇詳細解釋 YOLO 背後工作原理的文章,網上有很多文章都很好地涵蓋了它理論方面的知識。除此之外,如果你想加深對這個架構的理解,直接從原始碼獲取信息並閱讀源文件(https://arxiv.org/abs/1506.02640)也是一個好主意。

基於 YouTube-8M 數據集的籃球場球員移動檢測

這一次,我將向你展示如何快速地、以相對較低的代價和不那麼強大的機器創建目標檢測模型,這個模型能夠檢測任何你選擇的對象。如果你需要在工作中快速測試你的想法,或者只是有一小段時間建立在家構建你的項目,這是一個很好的方法。去年,我有機會進行了幾個這樣的實驗,本文中出現的所有可視化結果都是出自這些項目。

注意:這一次,我們將主要使用開源庫和工具,因此我們網站上的編碼量將是最小的。但是,為了鼓勵你使用 YOLO 並為你的項目提供一個起點,我還提供了腳本,允許你下載我的預訓練模型以及所有配置文件和測試數據集。像往常一樣,你會在我的 GitHub 上找到所有的內容:https://github.com/SkalskiP/ILearnDeepLearning.py/tree/master/02_data_science_toolkit/02_yolo_object_detection。

YOLO

所有不知道 YOLO 是什麼的人不要擔心,也不要去任何地方找資料!我現在簡要地解釋一下我說的是什麼。

YOLO 是一種實時目標檢測算法,它是第一個平衡所提供檢測的質量和速度的算法。通常,這類最強大的模型,都是建立在卷積神經網絡的基礎上,這次也不例外。所謂「目標檢測模型」,我們的意思是,我們不僅可以用它來找出給定照片中存在的對象,還可以用它來指示它們的位置和數量。除其他外,這種模型在機器人和汽車工業中都有應用,因此檢測速度至關重要。自2015年以來,該算法已經進行了三次迭代,還有為 TinyYOLO 等行動裝置設計的變體。移動版本的精度有限,但計算要求也較低,運行速度更快。

數據集

和深度學習一樣,創建模型的第一步是準備一個數據集。有監督的學習是查看標記的示例並在數據中發現不明顯的模式。我必須承認創建一個數據集是一個相當乏味的任務,因此我準備了一個腳本,允許你下載我的象棋數據集,並查看 YOLO 如何在這個例子中工作。

但那些想要建立自己的數據集的人面臨著挑戰。為了實現這個目標,我們需要收集一組圖像並創建匹配的標籤文件。圖片應該包含我們想識別的對象,並且,數據集中所有對象的類的分布應該類似。如你所見,在我的第一個項目——籃球探測器中,我使用了遊戲視頻中的框架。

籃球數據集的圖像樣本

標籤文件應該與圖像具有相同的名稱,但顯然具有不同的擴展名,並且應該位於並行目錄中。最佳數據結構如下所示。除了 images 和 labels 目錄之外,我們還必須準備 class_names.txt 文件,該文件定義我們計劃檢測的對象類的名稱。這個文件的每一行代表一個類,應該包含一個或多個沒有空格的單詞。

標記

不幸的是,YOLO 需要一個特定的標籤格式,這是大多數免費標籤工具不支持的。為了消除從 VOC XML、VGG JSON 或其他廣泛使用的格式解析標籤的需要,我們將利用 makesense.ai(https://www.makesense.ai/),這裡是我在 GitHub 上開發的一個免費開源項目(https://github.com/SkalskiP/make-sense )。編輯器不僅支持直接導出到 YOLO 格式,而且直觀,不需要安裝,可以在瀏覽器中工作。此外,它還支持多種功能,旨在加快你的標籤工作。可以使用 MakeSense 查看人工智慧支持的標記過程。

AI 支持使用 makesense.ai 進行標記

工作完成後,我們可以下載一個 .zip 文件,其中包含 .txt 文件。每一個這樣的文件都對應於一個標記的圖像,並描述照片中可見的對象。如果我們打開其中一個文件,我們會發現,每一行都是 class_idx x_center y_center width height 式。其中 class_idx 表示 class_names.txt 文件中指定標籤的索引(從 0 開始計數)。其餘參數描述圍繞單個對象的邊界框,它們可以取 0 到 1 之間的值。幸運的是,大多數時候我們不需要考慮這些細節,因為編輯器會為我們處理所有的事情。YOLO 格式的標籤示例如下所示。

環境設置

YOLO 最初是在一個叫做 Darknet 的深度學習的小框架中寫的。從那時起,許多其它實現已經創建,其中大多數使用兩個非常流行的 Python 平臺:Keras 和 PyTorch。在所有可用的解決方案中,有一個是我特別喜歡的(https://github.com/ultralytics/yolov3)。它提供了一個用於訓練和檢測的高級 API,但也具有很多有用的特性。在使用它時,我們的所有工作歸結為準備一個數據集和創建幾個配置文件,然後其餘的工作就交給庫了。

環境設置也非常簡單——可以歸結為運行幾個命令,你可以在下面找到這些命令(假設你的計算機上已經安裝了 Python 和 Git)。最好從項目目錄中執行命令,以實現上面所示的結構。值得一提的是,環境也可以通過 Docker 創建(這對 Windows 用戶特別有用)。你可以在這裡(https://github.com/ultralytics/yolov3/wiki/Docker-Quickstart)找到更多關於這個主題的說明。

# Clone frameworkgit clone https://github.com/ultralytics/yolov3.git# Enter framework catalogue [Linux/MacOS]cd ./yolov3# Setup Python environmentpip install -U -r requirements.txt

配置

如前一段所述,我們現在需要做的就是創建幾個配置文件。它們定義了訓練集和測試集的位置、對象類的名稱,並提供了所用神經網絡的架構指南。

西洋棋數據集標註參考圖片

首先,我們需要將數據集分割成訓練集和測試集。我們使用兩個 .txt 文件來完成這項工作,它們中的每一個都包含指向數據集中特定圖像的路徑。為了加快工作速度,我準備了一個 Python 腳本,它將自動為我們創建這些文件。你只需指示數據集的位置並定義訓練集和測試集之間的分割百分比。train.txt/test.txt 文件的片段如下所示。

./dataset/images/image_1.png./dataset/images/image_2.png./dataset/images/image_3.png...

.data 是我們需要提供的最終文件。讓我們用下一個項目的例子來討論它的內容——象棋檢測器。在本例中,我有 12 個惟一的對象類想要識別。接下來,我們給出定義哪些照片屬於訓練集,哪些照片屬於測試集的文件的位置,最後給出前面討論的帶有標籤名稱的文件的位置。為了使一切正常工作,chess.data、chess_train.txt、chess_test.txt 和 chess.names 文件應移動到 project/yolov3/data 目錄。

classes=12train=./data/chess_train.txtvalid=./data/chess_test.txtnames=./data/chess.names

訓練

現在我們準備開始訓練。如前所述,我們使用的庫有一個高級 API,因此終端中的一個命令和幾個參數就足以啟動這個過程。然而,在下面還有幾件大大增加我們取得最終成功的機率的事情。

python3 train.py--data ./data/project.data --cfg ./cfg/project.cfg --weights ./weights/yolov3.pt

首先,我們可以應用遷移學習,我們不必從頭開始訓練。我們可以使用在不同數據集上訓練的模型的權重,從而縮短我們自己的網絡的學習時間。我們的模型可以使用基本的形狀知識,並專注於將這些信息連結到我們想要識別的新類型的對象。其次,庫執行數據增強,因此它根據我們提供的照片生成新的示例。因此,即使我們只有一個很小的數據集——幾百張圖片,我們也可以訓練我們的模型。我們使用的庫還為我們提供了一個由於增強而創建的圖像示例。下面你可以看到在我的籃球探測器的訓練過程中創建的示例。

訓練集數據增強的可視化

檢測

最後,快樂的時刻來了!我們致力於創建模型的工作得到了回報,現在可以用它來找到我們在任何照片中想要尋找的對象。同樣地,這是一個非常簡單的任務,我們可以用終端中的一個簡單命令來完成。執行之後,我們將在輸出目錄中找到預測的結果。值得一提的是,我們還可以對自己拍攝的視頻進行實時預測,這在項目演示中尤其有用。

python3 detect.py--data ./data/project.data --cfg ./cfg/project.cfg --weights ./weights/best.py --source ./data/sample

基於 TinyYOLO 的象棋檢測

結論

如果你完成了上面的所有內容,那麼恭喜你!非常感謝你花時間閱讀這篇文章。我希望我能證明訓練你自己的定製 YOLO 模型並不困難,我的建議將對你未來的實驗有所幫助。

via:https://towardsdatascience.com/chess-rolls-or-basketball-lets-create-a-custom-object-detection-model-ef53028eac7d

雷鋒網雷鋒網雷鋒網

相關焦點

  • PP-YOLO超越YOLOv4-目標檢測的進步
    YOLO發展史YOLO最初是由Joseph Redmon編寫的,用於檢測目標。目標檢測是一種計算機視覺技術,它通過在目標周圍畫一個邊界框來定位和標記對象,並確定一個給定的框所屬的類標籤。和大型NLP transformers不同,YOLO設計得很小,可為設備上的部署提供實時推理速度。
  • 視覺工具包torchvision重大更新:支持分割模型、檢測模型,還有許多數據集
    這次,工具包裡增加了許多新模型:做語義分割的,做目標檢測的,做實例分割的……也增加了許多數據集,比如ImageNet,CelebA訓練/評估腳本現在,reference/文件夾地下,提供了訓練和評估用的腳本,支持許多任務:分類、語義分割、目標檢測、實例分割,以及人物關鍵點檢測。這些腳本可以當做log:寫著某一個特定的模型要怎樣訓練,並且提供了基線。有了這份快速指引,便於順利展開研究。
  • 惠普推出數據科學軟體包 簡化數據科學工作
    以「Z by HP Data Science Software」軟體包的形式,惠普今天為部分移動工作站和筆記本電腦提供了全新的 Ubuntu Linux 發行版本。這不僅僅只是在設備上預裝了 Ubuntu 20.04 LTS OEM 版本,而且還預裝了各種數據科學軟體包。
  • AI內參|目標檢測算法YOLO更新;Zoom集成AI會議速記功能
    新技術、新產品和新應用1、目標檢測算法YOLO後繼有人,YOLO v4正式更新第一條重磅的技術消息是,知名目標檢測項目YOLO,現在有了繼承人。今年2月,YOLO之父Jeseph Redmon因「無法忽視工作帶來的負面影響」,突然宣布隱退,讓學術界唏噓不已,許多人擔心這個強大的目標檢測算法研究會因此偃旗息鼓。這次的YOLO v4在性能上相比前代也有巨大提升,在保持和前代相同運行速度下,精確度大幅提高。
  • 在數據科學領域中,你需要多少數學知識?
    引言  如果你有心學習數據科學,那麼你一定會在腦海中想過下面的問題:  沒有或者只有很少的數學知識,我能做一個數據科學家嗎? 數據科學必需的數學工具有哪些?  有很多優秀的包可用於建立預測模型或者數據可視化。
  • 做seo網站優化有哪些好用的數據分析工具?
    做seo網站優化的時候,少不了數據分析這一工作。這是因為網站的很多數據,我們無法直接通過肉眼查看,也難以通過計算得出結論。所以說,合理的使用數據分析工具,對我們的優化工作有著很大的幫助。下面推薦幾個做seo網站優化時,好用的數據分析工具。
  • 如何基於Flutter和Paddle Lite實現實時目標檢測
    很早之前接觸到了飛槳(PaddlePaddle)以及PaddleDetection工具,被他們的簡單易用吸引,同時,這些工具極大降低了訓練模型的門檻並減少了所需時間,非常適合新手入門。在很多實際應用場景也有不俗的表現。
  • 國家微生物科學數據中心推出免費一站式生物信息分析雲平臺
    國家微生物科學數據中心面向微生物領域的科學家,提供免費的一站式生物信息分析雲平臺。該平臺可提供包括生物信息在線分析工具、計算資源、公共參考數據的整合在線服務。圖形化操作界面,用戶無需任何編程基礎,無需配置Linux作業系統,無需安裝複雜的生物信息分析軟體,無需下載龐大的生物資料庫,一鍵就能搞定生物數據分析,並且每項分析都可以自定義分析參數,實現在滑鼠點擊之間即可在國家微生物科學數據中心在線進行生物信息數據分析,挖掘出準確、詳細、專業的分析結果。
  • 43000張圖片和5項原則:用數據科學方法評選十大最火表情包
    目前仍然沒有什麼獨立指標能用以評估表情包(memes)的瀏覽人數,所以筆者自己摸索出了一些方法!本文將說明如何用約43000張圖片的數據集和五項數據科學原則,來計算得出表情包的火爆程度排名。1.明確定義估算對象對文字信息的理解因人而異。
  • YOLO-v4目標檢測實時手機實現,全自動實時移動端AI框架
    目前,這項技術已經廣泛應用在多種類型的人工智慧(AI)任務中,包括但不限於:Yolo-v4 目標檢測、實時相機風格遷移、AI 實時換臉、相機超解析度拍攝、視頻實時上色等,並且成功落地。以上任務全部在手機端上實現。
  • 數據科學 Top10 清單(工具、技術、應用……)
    字幕組雙語原文:數據科學 Top10 清單(工具、技術、應用... 你需要的都在這!)英語原文:The List of Top 10 Lists in Data Science翻譯:雷鋒字幕組(李珺毅)毫無疑問,數據科學是21世紀「最吸引人」的職業道路,由具有強烈求知慾和技術專長的人組成,他們能夠從海量數據中挖掘出有價值的見解。
  • 愛站SEO工具包
    愛站SEO工具包是愛站推出的一款功能豐富的SEO優化工具,愛站SEO工具包提供了豐富的SEO功能,非常適合網站優化人員下載使用的SEO優化工具。
  • 微軟北大提出AI換臉工具和假臉檢測工具
    微軟亞洲研究院和北京大學最近聯合發表2篇重量級學術論文,提出了FaceShifter和FaceX-Ray——前者是一種高保真、能夠感知遮擋的AI「換臉工具」,後者則是針對偽造人臉圖像的通用檢測工具,在取得業界領先的性能的同時,所需數據量也少得多。戳右邊連結上 新智元小程序 了解更多!
  • 目標檢測之度量標準
    怎麼去評估一個目標檢測器的有效性?這個問題可能在不同的時期有不同的答案。在早期的檢測社區,在檢測性能上沒有一個廣泛被接受的評估標準。在最近幾年,目標檢測被廣泛使用的評估標註是「Average Precision(AP)」,其最初是在VOC2007中被引進的。AP被定義為在不同的召回率下的平均檢測準確性,是對一個特定類別下的評估。為了比較所有目標種類的性能,mean AP(mAP)經常被用來作為性能最終的度量,是在所有目標種類上做平均。
  • 適用於需要處理大型數據集的NI LabVIEW多核分析和稀疏矩陣工具包...
    適用於需要處理大型數據集的NI LabVIEW多核分析和稀疏矩陣工具包介紹 技術編輯archive1 發表於 2017-11-18 01:29:01   NI LabVIEW多核分析和稀疏矩陣工具包提供了高性能的
  • 融合視頻目標檢測與單目標、多目標跟蹤,港中文開源視頻感知平臺
    首個開源一體化視頻目標感知平臺對視頻內的目標進行感知識別一直是學界、業界都非常關心的問題。這個問題在學界常被細分為不同的子問題,比如視頻目標檢測、多目標跟蹤與單目標跟蹤。具體來說,視頻目標檢測只需對視頻內的每一幀進行檢測,不要求對不同幀中的同一目標進行關聯。多目標檢測在完成視頻目標檢測的基礎上,更加側重於對視頻內的同一目標進行關聯。
  • YOLO 什麼你竟然還不知道YOLO的意思
    「You only live once, but if you do it right, once is enough」                                                                     ——Mae West想起曾經讀大學的時候,有個朋友跟我說過這麼一句話,「大兄弟,趁年輕,做愛做的事
  • 好用的數據可視化工具都有哪些?
    今天,說起數據可視化,我們就不得不談一下數據可視化工具了。主要說到的這個工具也是最近在數據分析圈比較受追捧的一個軟體——Python。Echarts是一個用於繪製圖表的類庫,是百度開源的一個數據可視化JS庫,用它生成的圖表特別棒,圖表動態元素的添加讓整個圖表都變得生動起來。而且,Echarts可直接調用繪製的圖表多種多樣,特別豐富,繪製起來也簡單易操作。估計大家看到成品出來後可以會大吃一驚。
  • NASA免費開放軟體下載:從機器人系統到數據處理工具
    Livingstone 2(用於複雜系統的自動診斷和離散控制)和 Skunkworks(支持開發和運算時間工具的套件)16. 任務分析低推力優化器(Mission Analysis Low-Thrust Optimizer (MALTO))17. 任務仿真工具包(Mission Simulation Toolkit (MST))18.
  • 1.86ms超高速鐵軌缺陷檢測!我給PP-YOLO打99.99分!
    除了可以直接進行目標檢測,同時也是人臉檢測、行人檢測、文字檢測、關鍵點檢測、實例分割等複雜應用的基礎技術。而說到目標檢測算法,就不得不提 YOLO 系列。YOLO 作為單階段模型的代表之一,相較於更早提出的兩階段目標檢測算法,不僅擁有更快的預測速度,對於背景圖像(非物體)中的部分被包含在候選框的情況誤檢率更低,還擁有更好的算法通用性。