1. 程式人生 > >在YOLO2中增加自己的物體識別(二)

在YOLO2中增加自己的物體識別(二)

在上一篇在YOLO2中增加自己的物體識別(一)中我們已經得到了一個影象集,在你的Images/myobject目錄下, 一個對該影象集的標註資訊,在你的outpath目錄下, 現在把這2個目錄下的jpeg和txt檔案合併到一個資料夾,我這裡是放到darkne目錄下的data\myobject目錄下, 下一步我們就要配置YOLO來進行訓練了。

二、配置YOLO

YOLO的配置主要為3個檔案myobj.data, myobj.name, myobj.cfg.

1. myobj.data

我的myobj.data內容如下
classes= 1
train = data/myobject/train.txt
valid = data/myobject/test.txt
names = data/myobject/myobj.names
backup = backup
classes為你要detect的目標種類個數, 檢測一種的話就是1。 train指向一個txt檔案,用於描述訓練時用哪些圖片進行訓練。 valid用於描述測試時用哪些圖片進行測試。這兩個檔案可以使用如下指令碼生成

import glob, os

# Current directory
current_dir = os.path.dirname(os.path.abspath(__file__))

# 圖片的儲存目錄
path_data = 'data/myobject/'

# Percentage of images to be used for the test set
percentage_test = 10;

# Create and/or truncate train.txt and test.txt
file_train = open('train.txt', 'w')
file_test = open
('test.txt', 'w') # Populate train.txt and test.txt counter = 1 index_test = round(100 / percentage_test) for pathAndFilename in glob.iglob(os.path.join(current_dir, "*.jpg")): title, ext = os.path.splitext(os.path.basename(pathAndFilename)) #file = open(title + '.txt', 'w') #file.write('0 0.5 0.5 1 1'
) #file.close() if counter == index_test: counter = 1 file_test.write(path_data + title + '.jpg' + "\n") else: file_train.write(path_data + title + '.jpg' + "\n") counter = counter + 1

把該指令碼放到data/myobject目錄下,然後執行,就會在該目錄生成2個txt檔案。

2.myobj.names

這個檔案只有一行,也就是你要檢測物體的名稱, 他會在檢測完後顯示在圖片上,每行對應一種物體。我們這裡是myobj

3.myobj.cfg

這個檔案用於描述網路結構, 我們可以直接拿cfg/yolo-voc.cfg來使用, 不過要改幾個地方.
1) batch改為合適值, 一般64,如果你記憶體不夠的話跑起來發現記憶體分配失敗,可以改下點,比如32,16
2)subdivisions, 與上面類似,可以試試8,4,2,越小需要記憶體越大。
3)classes=1
4)倒數的第一個filters=(classes + 5)*5,這裡我們就是30

三、 訓練YOLO

訓練前我們先去YOLO官網下載已經訓練好的權值檔案darknet19_448.conv.23(76M)
然後執行命令./darknet detector train data/myobject/myobj.data data/myobject/myobj.cfg darknet19_448.conv.23
預設情況下,每1000次會將訓練好的權值存放到backup/myobj_1000.weights檔案裡, 所以下次開始訓練時,可以從上一次訓練結果中繼續訓練,命令如下
./darknet detector train data/myobject/myobj.data data/myobject/myobj.cfg backup/myobj_2000.weights, 這裡我們從第2000次開始繼續進行訓練。

四、何時停止訓練

請戳這裡搬運工, 一般來講2000次左右基本就夠了, 當然如果你要更好的精度,那麼需要觀察avg這個值的變化, 如果這個值基本不再變小,那麼訓練就可以停止了。此時,你需要觀察前幾次的avg的值,選出幾個最小的,然後根據avg最前面的數字,找到對應backup目錄下的權值檔案,之後執行如下命令
darknet detector recall data/myobject/myobj.data data/myobject/myobj.cfg backup\yolo-obj_XXXX.weights
根據輸出IOU和Recall 值, 找到最好的weight檔案。一般IOU越大越好,Recall也是越大越好。

五、小結

到這裡我們已經可以使用YOLO對某一類物體進行檢測了, 在此感謝國外友人Nils Tijtgat
的文章, 另:CPU跑慢的要死,一次要10分鐘, 我看國外那哥們的貼圖,只要2s, 喵生灰暗。想把darknet在GPU上執行,請戳這裡。除了Bbox-lable-tool外,這裡還有個YoloMark也可以用於bbox的生成,大家有興趣可以看看。

相關推薦

YOLO2增加自己物體識別

在上一篇在YOLO2中增加自己的物體識別(一)中我們已經得到了一個影象集,在你的Images/myobject目錄下, 一個對該影象集的標註資訊,在你的outpath目錄下, 現在把這2個目錄下的jpeg和txt檔案合併到一個資料夾,我這裡是放到darkne目錄

YOLO2增加自己物體識別

從RCNN, fast RCNN, 到faster RCNN, YOLO, 以及最新的YOLO2, 檢測的速度是越來越快了, 最新的YOLO2據作者說可以達到67Fps, 支援的種類達9000.想看效果的請戳這裡YOLO2 . 這麼快速度,當然很多人估計跟我一樣,想把它用來檢測特定類的物體。這裡,我將根據自己

Android應用使用百度地圖API定位自己的位置

百度地圖SDK為開發者們提供瞭如下型別的地圖覆蓋物: 我的位置圖層(MyLocationOverlay):用於顯示使用者當前位置的圖層(支援自定義位置圖示); Poi搜尋結果圖層(PoiOverlay):用於顯示興趣點搜尋結果的圖層; 路線圖層(RouteOve

Java web常見編碼亂碼問題

catalina 轉換 alt str 檢測 內容 tom 拼搏 image 根據上篇記錄Java web中常見編碼亂碼問題(一), 接著記錄亂碼案例:   案例分析:   2、輸出流寫入內容或者輸入流讀取內容時亂碼(內容中有中文)   原因分析:     a、 如果是

MySQL的日誌類型-General query log

sql 設置 set 線程id lob 進行 mysq 示例 mark 簡介 General query log記錄客戶端的連接和斷開,以及從客戶端發來的每一個SQL語句。 日誌內容格式 General query log可以記錄在文件中,也可以記錄在表中,格式如下:在文件

github刪除已建倉庫

gpo 自己 class 9.png git 點擊 github 復制 post 閱讀指南:(1)在登錄自己的github中,進入將刪除倉庫文件中: (2)進入倉庫的settings中,復制Repository name 中的名字(一會刪除要填寫) (3)點擊刪

UWP實現大爆炸效果

cti setter val sele osi enume rail += ddd 上一回實現了一個寬度不均勻的Panel,這次我們編寫一個簡單的BigbangView主體。 首先創建一個模板化控件,刪掉Themes/Generic.xaml中的<Style Targ

4.ASP.NET全棧開發之在MVC使用服務端驗證

help alt 來講 測試 數據類型 throw 存在 數據 問題 首先聲明,這篇博文是完善.ASP.NET全棧開發之在MVC中使用服務端驗證 的,所以重復內容,我就不過多的闡述,很多問題都是在實踐中去發現,然後再去完善,這篇博文也一樣,建立在已閱 “.ASP.NET

NLPCC2013中文微博細粒度情感識別

token special 環境 美化 lin pil real param annotate 偷懶若幹天後回歸。。在上一篇中我們得到了NLPCC2013的中文微博數據,將其按照8:1:1的比例分成了訓練集,驗證集和測試集。下一步就是對數據進行預處理以及embedding。

Python的Flask基礎入門

第一部分是過濾器 這是我們的py檔案 #1.匯入Flask擴充套件. from flask import Flask#匯入我們的Flask框架 from flask import render_template#我們的返回值有兩種,如果要返回html,就需要匯入這個模組 #2.建立Fla

使用Tensorflow來讀取訓練自己的資料

接上一篇,繼續分析,model.py,也就是模型的構建。兩個卷積層,兩個池化層,以及後面的全連線層怎麼通過tensorflow定義的。 import tensorflow as tf def inference(images, batch_size, n_classess): # c

JDKJCA的簡單使用---RSA加簽驗籤

Signature 類 Signature類是一個引擎類,提供加密的數字簽名演算法,例如DSA或RSAwithMD5。加密安全簽名演算法採用任意大小的輸入和私鑰,並生成一個相對較短(通常是固定大小)的位元組串——簽名。 只有私鑰/公鑰對的所有者才能建立簽名。對於擁有公鑰的任何人來說

Rprophet包說明文件

Prophet 名稱:自動預測過程 版本:0.2.1 日期:2017-11-08 描述:實現了一個時間序列的預測過程,基於能夠擬合年度、周等週期以及假期等因素的非線性趨勢的加法模型。模型要求至少一年以上的週期性歷史資料。prophet模型對於缺失值、趨勢突變以及大量離群點的資料有較好的魯棒性。

Android-谷歌語音識別之離線識別

1/上一篇部落格寫了安卓呼叫本地自帶的谷歌語音識別,但是需要聯網並且在大陸需要翻牆,這文章來講下如何離線進行谷歌的語音識別。 2/因為已經有了上一篇的demo和程式碼,程式碼方面就不多說了。 3/用谷歌離線識別需要下載谷歌離線包,所以一樣需要帶谷歌服務的機子,比如三星。

SpringMVCDemo,遇到的問題

配置上mybatis,增加dao層後,重新寫查詢頁面,結果又遇到不少坑,全是學費。程式碼結構如下: 1、Invalid bound statement (not found) 報錯介面如下。mybatis好久不寫,重溫一下使用。明顯是Mapper.xml與同名的Dao介面映射出現問題導致。 排查

webRTC音訊相關的netEQ:DSP處理 webRTC音訊相關的netEQ:控制命令決策 webRTC音訊相關的netEQ:資料結構

上篇(webRTC中音訊相關的netEQ(四):控制命令決策)講了MCU模組是怎麼根據網路延時、抖動緩衝延時和反饋報告等來決定給DSP模組發什麼控制命令的。DSP模組根據收到的命令進行相關處理,處理簡要流程圖如下。   從上圖看出如果有語音包從packet buffer裡取出來先要做解碼得到PC

python的import模組引用

我們可以使用from import來將指定模組裡所有變數(包含變數名)匯入進來  #繼續採用上面的路徑# from first.first_1.a1 import * print (a + b * c - d + e * f)   如果不想引用模組的所有變數,可以

ExcelVBA程式設計學習筆記

7、VBA中的資料型別 據型別(名稱) 大小(位元組) 描述 Boolean 2 邏輯值True或False Byte 1 0

計算機視覺與模式識別色彩遷移

色彩遷移 這一個學期任務量比較大,主要是計算機視覺這門課和計算機圖形學任務量有點大,所以暑假才有時間更新這系列部落格,這系列部落格主要是利用CImg這個庫來實現一些演算法,而不是應用一些演算法。 下面開始本期的介紹! 1.什麼是色彩遷移? 對於搞CV(Compu

Thread 類的幾個細節

相關部落格: Thread 類中的幾個細節(一) Thread 類中有這樣一個建構函式: Thread public Thread(ThreadGroup group, Runnable target,