YOLOv3 實練(以VOC2007、2012資料集為例)
訓練裝置:Lenovo 拯救者;
GPU:1070ti;
視訊記憶體:8GB;第一次訓練:採用預設引數,以預訓練好的darknet53.conv.74.1為預載入權重開始訓練;視訊記憶體,卒;報錯:out of memory;
第二次訓練:更改引數,將batch降低一些試試,從64改成了48,當天執行平穩,於是去辦了點事兒,兩天回來後;視訊記憶體,卒;報錯:out of memory;提示已經訓練了2w來個batch;
第三次訓練:
先看看了引數到底什麼含義(batch,subdivision),具體詳見:https://blog.csdn.net/hrsstudy/article/details/65447947?utm_source=itdadao&utm_medium=referral
於是增大了subdivision,這樣每次載入視訊記憶體的圖片數減少。並且監控GPU視訊記憶體使用情況(70%左右的佔用率),兩天後,又卒。原因不詳;可能是多尺度?或者是隨機的resizing?引起的?反正沒有辦法,只好,繼續降低batch,或者增大subdivision第四次訓練:再不訓練出來點啥,沒法交代了,於是bacth用了32,subdivision用了16(沒理解錯的話應該是等效於每次載入兩張圖片);這次,視訊記憶體沒崩。訓練用時大約3天,週三中午1:00左右首次訓練完成。但是,發現有問題,當我用訓練好的引數去預測單張圖片,發現物體框畫的很不錯,但是label標籤不對,比如person會標成bird,原因不詳,多測試了幾張發現,標籤有規律的錯亂。所有person都會標成bird,於是猜測label生成或者index什麼地方有錯誤。然後使用valid命令生成驗證結果,驗證結果存在result資料夾裡,全部都是txt檔案,按照20個類別,每個類別生成一個txt,對照發現,txt生成的label標籤沒問題。不太懂為什麼(回頭翻原始碼看吧)。
第五次訓練:在第四次訓練的過程中,旁邊新機器裝了ubuntu和cuda,兩臺機器同時開始訓練。嘗試調大了batch,batch設定為60(約等於預設選項64),subdivision=20;其他引數未變(尚不知道影響方向)。目前正在訓練中,肉眼可推斷,其收斂速度快於第四次訓練,原因可能主要是batch比較大的原因。其梯度下降方向更加明確。
測試MAP指標
- 摸索中,參考的方法有:
最終採用官方測試版本:https://zhuanlan.zhihu.com/p/31852482(目前在裝matlib
第四次訓練結果如下:
- aeroplane:AP=0.750
- bicycle:AP=0.778
- bird:AP=0.607
- boat:AP=0.577
- bottle:AP=0.544
- bus:AP=0.775
- car:AP=0.844
- cat:AP=0.738
- chair:AP=0.532
- cow:AP=0.660
- dining tables:AP=0.683
- dog:AP=0.704
- horse:AP=0.794
- motorbike:AP=0.772
- person:AP=0.798
- potted plant:AP=0.443
- sheep:AP=0.637
- sofa:AP=0.692
- train:AP=0.776
- tvmonitor:AP=0.686
總迭代次數大於60000次。loss中期下降的比較慢,到45000次左右才相對上比較顯著的下降。
- 總結:batch比較小;收斂速度變慢。
第五次訓練結果
- aeroplane:AP=0.855
- bicycle:AP=0.855
- bird:AP=0.756
- boat:AP=0.700
- bottle:AP=0.665
- bus:AP=0.876
- car:AP=0.877
- cat:AP=0.894
- chair:AP=0.643
- cow:AP=0.835
- dining tables:AP=0.736
- dog:AP=0.859
- horse:AP=0.869
- motorbike:AP=0.862
- person:AP=0.833
- potted plant:AP=0.562
- sheep:AP=0.753
- sofa:AP=0.780
- train:AP=0.864
- tvmonitor:AP=0.778
平均ap值:0.7926
對比之下,明顯發現AP值高很多,而且整體都高很多,原因有兩方面,一方面是batch的值由32改成60(接近與預設初始值),另一方面是batch增大後,max_batches = 50200不變,所以總的迭代次次數增大將近一倍。
另外就是本次訓練loss下降的非常好看,平滑並且持續穩定的下降,直到batch大於45000才無明顯變化跡象。
總體來說,基本是按照預設引數訓練的效果好很多,(batch改成60,是為了subdivision改成20,能夠被3整除)。第六次訓練更改了學習率和學習率衰減方式。看一看效果。
第六次訓練
在第五次訓練的基礎上調整了學習率,和學習率變化。
具體引數如下:
- learning_rate=0.0015
- policy=steps
- steps=3000,25000,42000
效果上可以說是非常差了,分析原因可能是在3000個batch的時候就將學習率調整為0.00075,太小的學習率使網路無法收斂。(25000次之後損失幾乎無明顯下降)。
結果就不附了。總之就是很差了。
第七次訓練
在第五次訓練的基礎上,去掉了darknet53後面層的bacth normalization層,一方面是,想看一下去掉部分BN層的效果,另外一方面,處於對BN層的不完全理解下,感覺在最後分類的時候,如果對input不進行歸一化(BN做的事情),會不會加大可分離性(引數的間距無BN的約束後,有肯能會更加離散,當然也有可能會方差更小)。
結果最後的AP值為0.794,非常輕微的優於第五次的結果,感覺更像沒什麼區別。
相關推薦
YOLOv3 實練(以VOC2007、2012資料集為例)
訓練裝置:Lenovo 拯救者; GPU:1070ti; 視訊記憶體:8GB; 第一次訓練:採用預設引數,以預訓練好的darknet53.conv.74.1為預載入權重開始訓練;視訊記憶體,卒;報錯:out of memory; 第二次訓練:更改引數
FCN語義分割訓練資料(以siftflow和voc2012資料集為例)
截至目前,現已經跑通了siftflow-fcn32s,voc-fcn32s,並製作好了自己的資料集,現在就等大批資料的到來,進而針對資料進行引數fine-tuning,現對我訓練的訓練流程和訓練過程中遇到的問題,做出總結和記錄,從而對以後的學習作鋪墊。 通過這篇分析語義分割
VS 2013 統一修改所有工程的目錄配置(以 boost、opencv3 的安裝為例)
在 vs2013安裝配置C++boost庫 一文中我們介紹了,如何在vs2013環境裡配置安裝boost庫。在配置vs2013時,我們只是介紹瞭如何對當前專案或者某一專案進行boost相關庫等檔案目錄的設定,也即如果再新建一個工程,我們需重新配置工程中的bo
Linux(Centos)下調整分區大小(以home和根分區為例)
vertical speech col 信息 卸載 記錄 jsb 大小 control 在安裝新系統的時候,有時候沒法預估或者說錯誤的劃分了分區大小,常常會導致我們後面的操作出現極大地不方便,比如某個分區分的太小了,導致 軟件安裝的時候會報安裝空間不夠,這就很麻煩。在
u-boot原始碼目錄分析(以jz2440 u-boot1.1.6為例)
一、檔案的分析 arm_config.mk。字尾是.mk,是一個Makefile檔案,將來在某個Makefile中會去呼叫它。 Changelog檔案,修改記錄檔案,該檔案記錄了這個uboot專案的版本變遷以及每個版本較上個版本修改的記錄。 config.mk。和arm_
基於GDAL庫,讀取.nc文件(以海洋表溫數據為例)
調試 cfi 主函數 != mes stdstring 微軟 detail back 對於做海洋數據處理的同學,會經常遇到nc格式的文件,nc文件的格式全稱是NetCDF,具體的詳細解釋請查詢官網【https://www.unidata.ucar.edu/softwar
【資料庫】關於日期的處理(以greenplum和postgresql和hive為例)
那個啥,本人菜鳥一隻,如果有什麼說錯的地方還請大家批評指出!! 好,開始說正事,日期處理和判斷是十分常見的,本文就自己使用的資料庫,和hive資料倉庫來說說,我使用到的一些日期的處理和判斷,當然技術能力有限,我也很菜,所以如果有說錯或者遺漏的還請大家多多包涵,望能批評指出,也讓我的水平提高提高!
json 資料持久化(以賬號和使用者名稱的儲存為例)
以賬號和使用者名稱的儲存為例 一、建立公共類使用者,定義使用者類的欄位:如賬號、密碼等 二、建立公共類列表,在列表類內定義一個使用者類型別的列表,定義列表需要匯入名稱空間System.Collections.Generic 三、儲存使用者 1.建立一個註冊方法 2. 判斷輸入框是否為
名人問題 演算法解析與Python 實現 O(n) 複雜度 (以Leetcode 277. Find the Celebrity為例)
1. 題目描述 Problem Description Leetcode 277. Find the Celebrity Suppose you are at a party with n people (labeled from 0 to n -
矩陣快速冪(以斐波那契數列為例)
小 M 玩數列 【問題描述】 小 W 發現了一個神奇的數列: () = ( − 1) + ( − 2) { ≥ 3, (1) = 1, (2) = 1} ,這就是著名的 Fibonacci Se
Matlab繪製三維曲面(以二維高斯函式為例)
寒假學習了一下Python下的NumPy和pymatlab,感覺不是很容易上手。來學校之後,決定繼續看完數字影象處理一書。還是想按照上學期的模式,邊看邊實現書中的演算法。上學期看的時候,是用C語言實現的,發現寫程式太耗時間了,所以決定還是學習下Matlab吧(寒假莫有學會Python中的那些庫應用。。。)
DDR3詳解(以Micron MT41J128M8 1Gb DDR3 SDRAM為例)
首先,我們先了解一下記憶體的大體結構工作流程,這樣會比較容量理解這些引數在其中所起到的作用。這部分的講述運用DDR3的簡化時序圖。 DDR3的內部是一個儲存陣列,將資料“填”進去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Co
spark最新原始碼下載並匯入到開發環境下助推高質量程式碼(Scala IDEA for Eclipse和IntelliJ IDEA皆適用)(以spark2.2.0原始碼包為例)(圖文詳解)
不多說,直接上乾貨! 前言 其實啊,無論你是初學者還是具備了有一定spark程式設計經驗,都需要對spark原始碼足夠重視起來。 本人,肺腑之己見,想要成為大資料的大牛和頂尖專家,多結合原始碼和操練程式設計。 好一段時間之前,寫過這篇部落格
Servlet容器啟動過程(以Tomcat中啟動Servlet容器為例)
一、Tomcat的總體結構中的Service模組及Container容器(引入) tomcat啟動server伺服器(包含多個服務模組)對外提供Service服務,Service模組由Container元件連線多個Connector構成。 Service
phpmailer實現簡單的郵件傳送(以網易郵箱smtp伺服器為例)
1、描述 第一次做到用php做到傳送郵件的功能。 Google了一下,php內建函式裡面有一個mail()函式。但是使用mail的話,會涉及到很多問題,我也沒有仔細研究過,反正都是和smtp協議息息相關。 於是,就去GitHub上開源的檔案傳送封裝好的專案
外部類與內部類之間的訪問(程式碼是連結串列資料結構為例)
外部類與內部類之間的訪問 內部類相當於外部類的一個成員,和其它成員處於同一個級別,因此可以在內部類中直接訪問外部類的各個成員(包括私有屬性)。 需要注意的是在外部類中要想訪問內部類的各個成員(這裡也包括內部類的私有屬性)就必須先例項化內部類,然後才能訪問。對
keras實現多個模型融合(非keras自帶模型,這裡以3個自己的模型為例)
該程式碼可以實現類似圖片的效果,多個模型採用第一個輸入。 圖片來源:https://github.com/keras-team/keras/issues/4205 step 1:重新定義模型(這是我自己的模型,你們可以用你們自己的),與預訓練不一樣,這裡定義模型inp
基於資料探勘的高校個性化學生管理方案研究——以A高校資料集為例(未發表,使用或引用前請提前告知)
基於資料探勘的高校個性化學生管理方案研究——以A高校資料集為例 馬 鑫 摘 要:高校資訊系統中儲存著大量產生頻率非常迅速且型別繁雜的資料,傳統的高校學生管理模式已很難適用於我國現階段高校學生管理。依據資料探勘演算法理論,採用k-prototypes聚類演算法代替傳統的人工貼標
清清楚楚地搭建MongoDB資料庫(以搭建4.0.4版本的副本集為例)
資料的目錄檔案層次設計 我們一般採用多例項的方式,而不是將所有的資料庫儘可能地放在一個例項中。 主要基於以下考慮: 1:不同業務線對應的資料庫放在不同的例項上,部分操作的運維時間容易協調等到。 2:相互獨立,減少相互干擾。不會因為某個業務的激增或某個開發Team的程式碼問題,拖累太多的
設計模式-builder模式(以微信訊息的路由為例講解)
今天要講一個簡單的模式–builder模式。 你可能會覺得,builder模式有什麼好講的?本來我也這樣覺得,但當我有幸拜讀某位大神通過builder模式寫了一個開發工具包的初始化操作,嗯程式碼的樣子很叼 這位大神是誰呢? 就是這位仁兄啦,是碼雲上一個很火的微