1. 程式人生 > >手把手教你用深度學習做物體檢測(三):模型訓練

手把手教你用深度學習做物體檢測(三):模型訓練

本篇文章旨在快速試驗使用yolov3演算法訓練出自己的物體檢測模型,所以會重過程而輕原理,當然,原理是非常重要的,只是原理會安排在後續文章中專門進行介紹。所以如果本文中有些地方你有原理方面的疑惑,也沒關係,可以自行網上搜索相關資料,也可以先留著問題,相信你會在後續文章中找到答案。
        上篇文章《手把手教你用深度學習做物體檢測(二):資料標註》中已經介紹瞭如何準備我們訓練模型需要用到的資料,上篇文章中有個需要注意的地方就是在生成yolov3所需格式的檔案時,務必在unbuntu下生成,我之前在windows下生成然後傳到ubuntu上去的,其中的路徑需要手動修改成unbuntu下的路徑,而且後面在unbuntu下訓練的時候會遇到編碼問題導致報錯。資料以及目錄結構如下圖:       進入下一步前,請確保你準備好了上面的資料並放到了相應的目錄結構下,如果你還不太清楚如何準備這些資料,建議先看看上一篇文章《手把手教你用深度學習做物體檢測(二):資料標註》。          資料準備好之後,我們需要找一個基於yolov3演算法實現的成熟的訓練框架,網上有很多文章都提及到了下面這三個專案: https://github.com/qqwweee/keras-yolo3 ,基於keras編寫 https://github.com/pjreddie/darknet ,基於c++編寫 https://github.com/AlexeyAB/darknet , 基於c++編寫 這裡推薦上面的第三個,也就是AlexeyAB/darknet專案。原因有3點:
  • 該專案最近的修改時間是2019-04-16,也就是說仍然在持續維護,而另外兩個專案最早的也是7個月前了。
  • 該專案的文件非常詳細,比另外兩個專案都詳細很多。
  • 該專案支援在訓練過程中實時觀測損失值、mAP等重要指標的變化趨勢。 
注意:下面的一切操作若無特殊說明,都是在unbuntu18.04桌面版作業系統環境下,並且假設你已經準備好了深度學習所需的硬體及軟體環境,如果沒有,可以參照這篇文章《如何在阿里雲租一臺GPU伺服器做深度學習?》。
  ok,讓我們進入模型訓練正式內容。-首先,下載AlexeyAB/darknet專案。-然後,進入專案目錄,參考官網編譯該專案。-接著,建立names-data目錄 。-將2007_test.txt和2007_train.txt兩個檔案放到 names-data目錄下。-下載預訓練的權重檔案:  http://pjreddie.com/media/files/darknet53.conv.74 ,放置到names-data目錄下,訓練會在該檔案的基礎之上進行,這樣會比較快收斂,若暫時不明白也不要緊,繼續往後就行了。-拷貝cfg/yolov3-voc.cfg檔案到  names-data目錄下,重新命名為:yolo-obj.cfg,該檔案中有基礎需要修改如下:     - names-data目錄下建立voc.names檔案,內容是你的目標類別,舉例如下:   - names-data目錄下建立backup目錄   -names-data目錄下建立voc.data檔案,內容如下:   -確保VOCdevkit目錄的路徑同2007_test.txt、2007_train.txt兩個檔案中記錄的圖片路徑所在目錄一致。   -接下來,開啟終端,輸入訓練命令:
./darknet detector train names-data/voc.data names-data/yolo-obj.cfg names-data/darknet53.conv.74 -gpus 1 -map
# 如果中途中斷了,可以從backup目錄下,找到最新的.weights檔案或任意迭代週期生成的.weights檔案,在此基礎上繼續訓練,命令如下:
./darknet detector train names-data/voc.data names-data/yolo-obj.cfg names-data/backup/yolo-obj_last.weights -gpus 1 -map
訓練過程開始後,除了終端會持續顯示訓練情況,還會額外出現一個視窗以圖形的方式實時展示損失值和mAP的變化情況:   我的目標類別是12類,每類大概有800張,迭代到3000次以後,平均損失值開始收斂,在0.5左右,另外由於測試樣本和訓練樣本來此同一批次採集,只是拍攝角度距離不同,並且沒有引入負樣本,所以mAP的值可以接近100%。這裡損失值、mAP什麼的如果你暫時還不清楚具體的意義,也沒關係,在後續的文章中會有介紹,這裡可以先直觀上理解為平均損失值越小越好,mAP越接近1越好就行了。訓練時間在RTX-2060上大概是3個小時左右。訓練結束後,我得到下面的模型檔案:   ok,到此模型訓練過程就結束了,此時你一定想要試試模型的識別情況怎麼樣,你可以使用AlexeyAB/darknet專案提供的命令:
--檢測圖片
./darknet detector test names-data/voc.data names-data/yolo-obj.cfg names-data/backup/yolo-obj_3000.weights -ext_output names-data/images/IMG_0728.JPG

--檢測視訊
./darknet detector demo names-data/voc.data names-data/yolo-obj.cfg names-data/backup/yolo-obj_3000.weights -ext_output names-data/videos/food52hd.mp4 -out_filename names-data/videos/food52hd_detect.mp4
  此時,如果順利,你將會看到目標被檢測出來了,但是有一個問題,就是所有的中文都顯示成了亂碼,如果你想快速知道類別檢測的對不對,可以將names-data目錄下的voc.names檔案內容改為英文,此時你將會看到類別正常顯示出來了,但是沒有顯示對應的置信度,置信度可以直觀上理解為該目標為當前顯示類別的概率以及該矩形檢測框位置的置信度,所以如果有置信度的顯示,便於我們進一步瞭解目標檢測的情況。

關於中文亂碼和置信度缺失的問題,由於本篇文章已經夠長的了,所以將會在下一篇《手把手教你用深度學習做物體檢測(四):模型使用》中進行闡述,下一篇文章中,我們會基於python來實現一個模型使用程式,以及為什麼非要用python來重新實現一個模型使用程式的原因。

 ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O,88~   名句分享
 趙客縵胡纓,吳鉤霜雪明。銀鞍照白馬,颯沓如流星。
十步殺一人,千里不留行。事了拂衣去,深藏身與名。
閒過信陵飲,脫劍膝前橫。將炙啖朱亥,持觴勸侯嬴。
三杯吐然諾,五嶽倒為輕。眼花耳熱後,意氣素霓生。
救趙揮金槌,邯鄲先震驚。千秋二壯士,煊赫大梁城。
縱死俠骨香,不慚世上英。誰能書閤下,白首太玄經。 —— 《俠客行》【唐】李白   為您推薦
如何在阿里雲租一臺GPU伺服器做深度學習? 手把手教你用深度學習做物體檢測(二):資料標註 手把手教你用深度學習做物體檢測(一): 快速感受物體檢測的酷炫 ubuntu16.04安裝Anaconda3 Unbuntu下持續觀察NvidiaGPU的狀態  

相關推薦

手把手深度學習物體檢測()模型訓練

本篇文章旨在快速試驗使用yolov3演算法訓練出自己的物體檢測模型,所以會重過程而輕原理,當然,原理是非常重要的,只是原理會安排在後續文章中專門進行介紹。所以如果本文中有些地方你有原理方面的疑惑,也沒關係,可以自行網上搜索相關資料,也可以先留著問題,相信你會在後續文章中找到答案。    

手把手深度學習物體檢測(四)模型使用

上一篇《手把手教你用深度學習做物體檢測(三):模型訓練》中介紹瞭如何使用yolov3訓練我們自己的物體檢測模型,本篇文章將重點介紹如何使用我們訓練好的模型來檢測圖片或視訊中的物體。   如果你看過了上一篇文章,那麼就知道我們用的是 AlexeyAB/darknet專案,該專案雖然提供了物體檢測的

手把手深度學習物體檢測(二)資料標註

  “本篇文章將開始我們訓練自己的物體檢測模型之旅的第一步—— 資料標註。”   上篇文章介紹瞭如何基於訓練好的模型檢測圖片和視訊中的物體,若你也想先感受一下物體檢測,可以看看上篇文章:《手把手教你用深度學習做物體檢測(一):快速感受物體檢測的酷炫 》。   其實,網上關於資料標註的文章已有很多,但

手把手深度學習物體檢測(五)YOLOv1介紹

之前寫物體檢測系列文章的時候說過,關於YOLO演算法,會在後續的文章中介紹,然而,由於YOLO歷經3個版本,其論文也有3篇,想全面的講述清楚還是太難了,本週終於能夠抽出時間寫一些YOLO演算法相關的東西。本篇文章,我會先帶大家完整的過一遍YOLOv1的論文,理解了YOLOv1才能更好的理解它的後續版本,YO

手把手深度學習物體檢測(七)YOLOv3介紹

YOLOv3 論文:《 YOLOv3: An Incremental Improvement 》 地址: https://arxiv.org/pdf/1804.02767.pdfyolov3 相比之前版本的改進 網路的特徵提取部分 由 Darknet-19改成了&n

深度學習命名實體識別(四)——模型訓練

通過本文你將瞭解如何訓練一個人名、地址、組織、公司、產品、時間,共6個實體的命名實體識別模型。 準備訓練樣本 下面的連結中提供了已經用brat標註好的資料檔案以及brat的配置檔案,因為標註內容較多放到brat里加載會比較慢,所以拆分成了10份,每份包括3000多條樣本資料,將這10份檔案和相應的配置檔案

零基礎可上手 | 手把手Cloud AutoML毒蜘蛛分類器

原作:Matt Fraser安妮 編譯自 Shine Solutions量子位 出品 | 公眾號

超有趣!手把手Python實現實時“人臉檢測

  Instagram 的聯合創始人兼首席技術官 Mike Kreiger 說:“計算機視覺和機器學習其實已開始流行起來,但是對於大多數人來說,計算機看了影象後看到了什麼這方面還是比較模糊。”     近年來,計算機視覺這個神奇的領

手把手matlab深度學習(一)- --CNN

1.使用深度學習做目標檢測 上一篇部落格已經講解了怎麼用matlab匯入資料。 [trainingImages,trainingLabels,testImages,testLabels] = helperCIFAR10Data.load('cifar10Data');

手把手Python實踐深度學習|深度學習視頻教程

視頻 ref ati pan 人工神經網絡 com 深度學習 encoder auto 手把手教你用Python實踐深度學習網盤地址:https://pan.baidu.com/s/1mkoC9ELXDglvTNN_xPUWlQ 提取碼: zgpy備用地址(騰訊微雲):ht

深度學習入門篇——手把手 TensorFlow 訓練模型

Tensorflow在更新1.0版本之後多了很多新功能,其中放出了很多用tf框架寫的深度網路結構,大大降低了開發難度,利用現成的網路結構,無論fine-tuning還是重新訓練方便了不少。最近筆者終於跑通TensorFlow Object Detection API的ssd_mobilenet_v1模型,

深度學習入門篇--手把手 TensorFlow 訓練模型

歡迎大家前往騰訊雲技術社群,獲取更多騰訊海量技術實踐乾貨哦~ 作者:付越 導語 Tensorflow在更新1.0版本之後多了很多新功能,其中放出了很多用tf框架寫的深度網路結構(https://github.com/tensorflow/mode

手把手 | 幾行Python和消費資料客戶細分

    細分客戶群是向客戶提供個性化體驗的關鍵。它可以提供關於客戶行為、習慣與偏好的相關資訊,幫助企業提供量身定製的營銷活動從而改善客戶體驗。在業界人們往往把他吹噓成提高收入的萬能藥,但實際上這個操作並不複雜,本文就將帶你用簡單的程式碼實現這一專案。 客戶

手把手 幾行Python和消費資料客戶細分

  細分客戶群是向客戶提供個性化體驗的關鍵。它可以提供關於客戶行為、習慣與偏好的相關資訊,幫助企業提供量身定製的營銷活動從而改善客戶體驗。在業界人們往往把他吹噓成提高收入的萬能藥,但實際上這個操作並不複雜,本文就將帶你用簡單的程式碼實現這一專案。 我們需要建立什麼?

【Python量化】手把手python股票分析入門

內容來自:微信公眾號:python金融量化 關注可瞭解更多的金融與Python乾貨。 目前,獲取股票資料的渠道有很多,而且基本上是免費的,比如,行情軟體有同花順、東方財富等,入口網站有新浪財經、騰訊財經、和訊網等。Python也有不少免費的開源api可以獲取交易行情資料,如pandas自

手把手GAN實現半監督學習

引言 本文主要介紹如何在tensorflow上僅使用200個帶標籤的mnist影象,實現在一萬張測試圖片上99%的測試精度,原理在於使用GAN做半監督學習。前文主要介紹一些原理部分,後文詳細介紹程式碼及其實現原理。前文介紹比較簡單,有基礎的同學請掠過直接看第二

手把手R實現標記化(附程式碼、學習資料、語料庫)

作者:Rachael Tatman翻譯:樑傅淇本文長度為1600字,建議閱讀4分鐘標記化是自然語

手把手圖靈機器人微信公眾號自動回覆助手

本文首發於我的個人部落格:尾尾部落 閱讀這篇文章,你將會學會以下內容: 如何用flask搭建微信公眾平臺服務 如何將在微信公眾平臺呼叫圖靈機器人 如何用uwsgi+supervisor+nginx部署flask應用 實驗

手把手C#疫情傳播模擬

手把手教你用C#做疫情傳播模擬 姐妹篇:手把手教你用C#做疫情傳播模擬 產品經理版 在上篇文章中,我介紹了用C#做的疫情傳播模擬程式的使用和配置,演示了其執行效果,但沒有著重講其中的程式碼。 今天我將抽絲剝繭,手把手分析程式的架構,以及妙趣橫生的細節。 首先來回顧一下執行效果: 注意看,程式中的資訊,