在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
JDK中JCA的簡單使用(二)---RSA加簽驗籤
Signature 類 Signature類是一個引擎類,提供加密的數字簽名演算法,例如DSA或RSAwithMD5。加密安全簽名演算法採用任意大小的輸入和私鑰,並生成一個相對較短(通常是固定大小)的位元組串——簽名。 只有私鑰/公鑰對的所有者才能建立簽名。對於擁有公鑰的任何人來說
R中prophet包說明文件(二)
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) 如果不想引用模組的所有變數,可以
Excel中VBA程式設計學習筆記(二)
7、VBA中的資料型別 據型別(名稱) 大小(位元組) 描述 Boolean 2 邏輯值True或False Byte 1 0
計算機視覺與模式識別(二)色彩遷移
色彩遷移 這一個學期任務量比較大,主要是計算機視覺這門課和計算機圖形學任務量有點大,所以暑假才有時間更新這系列部落格,這系列部落格主要是利用CImg這個庫來實現一些演算法,而不是應用一些演算法。 下面開始本期的介紹! 1.什麼是色彩遷移? 對於搞CV(Compu
Thread 類中的幾個細節(二)
相關部落格: Thread 類中的幾個細節(一) Thread 類中有這樣一個建構函式: Thread public Thread(ThreadGroup group, Runnable target,