1. 程式人生 > >深度學習(六十八)darknet使用

深度學習(六十八)darknet使用

這幾天因為要對yolo進行重新訓練,需要用到imagenet pretrain,由於網路是自己設計的網路,所以需要先在darknet上訓練imagenet,由於網上都沒有相關的說明教程,特別是圖片路徑是怎麼和類別標籤對應起來的,讓我百思不得其解,所以最後就自己去查看了darknet的原始碼,發現原來作者是用了字串匹配,來查詢圖片路徑字串中是否有與類別標籤字串匹配的子字串,以此判斷該類別標籤的。

1、darknet對於圖片分類訓練、驗證命令為:

./darknet classifier train cfg/imagenet1k.data cfg/extraction.cfg extraction.weights

./darknet classifier valid cfg/imagenet1k.data cfg/extraction.cfg extraction.weights

2、資料格式:資料路徑配置主要讀取自:cfg/imagenet1k.data 

classes=1000
train  = imagenet/darknet_train.txt
valid  = imagenet/darknet_val.txt
backup = backup/
labels = data/imagenet.labels.list
names  = data/imagenet.shortnames.list
top=5

darknet_train.txt,darknet_val.txt的訓練格式只有圖片路徑,比如:
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10026.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10027.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10029.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10040.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10042.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10043.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10048.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10066.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10074.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_1009.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10095.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10108.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10110.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10120.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10124.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10150.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10159.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10162.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10183.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10194.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10211.JPEG
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10218.JPEG
那麼darknet是怎麼知道每一行圖片路徑,對應的類別標籤的。其主要是從:
data/imagenet.labels.list
讀取標籤字串,然後用類別標籤字串,匹配上面每一行的圖片路徑,查詢是否有子字串,以此確定類別標籤,所以訓練的時候,一定要確保圖片路徑包含了類別標籤,比如:n01440764等就是類別標籤。

3、由於imagenet的val圖片是放在一起的,路徑不包含標籤,所以需要讀取val標籤.xml檔案,把val的圖片根據標籤,重新存過一遍,放在對應的類別標籤檔案:

#coding=utf-8
import os
import shutil
from BeautifulSoup import BeautifulSoup
#train.txt可通過執行指令碼caffe/data/get_ilsvrc_aux.sh下載獲得
'''with open("../imagenet/train.txt") as f:
    with open("../imagenet/darknet_train.txt",'w') as w:
        for l in f.readlines():
            w.writelines('/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/'+l.split()[0]+'\n')'''


#val
dataroot='/home/research/disk1/imagenet/ILSVRC2015/'
vallabel=dataroot+'Annotations/CLS-LOC/val'
valimage=dataroot+'Data/CLS-LOC/val'
with open("../imagenet/darknet_val.txt",'w') as w:
    for l in os.listdir(vallabel):

        xml = ""
        with open(os.path.join(vallabel,l)) as f:
            xml = f.readlines()
        xml = ''.join([line.strip('\t') for line in xml])

        label=BeautifulSoup(xml).find('name').string
        filename=BeautifulSoup(xml).find('filename').string+'.JPEG'

        saveroot='../temp/'+label
        if os.path.exists(saveroot) is False:
            os.makedirs(saveroot)
        shutil.copy(os.path.join(valimage,filename),os.path.join(saveroot,filename))
        w.writelines('/home/research/disk1/compress_yolo/temp/' + filename+ '\n')




相關推薦

深度學習darknet使用

這幾天因為要對yolo進行重新訓練,需要用到imagenet pretrain,由於網路是自己設計的網路,所以需要先在darknet上訓練imagenet,由於網上都沒有相關的說明教程,特別是圖片路徑是怎麼和類別標籤對應起來的,讓我百思不得其解,所以最後就自己去查看了dark

深度學習基於多尺度深度網路的單幅影象深度估計

基於多尺度深度網路的單幅影象深度估計作者:hjimce一、相關理論本篇博文主要講解來自2014年NIPS上的一篇paper:《Depth Map Prediction from a Single Image using a Multi-Scale Deep Network》,

深度學習NNPACK 移植與實驗

一、Ubuntu下使用:1、克隆下載NNPACKgit clone https://github.com/Maratyszcza/NNPACK.git2、安裝nijia,並編譯Install ninja build systemsudo apt-get install nin

Linux學習總結文本編輯腳本

追加 else 直接 另一個 then 總結 定向 結束 into 有時候我們要借助腳本來編輯文本,請看下面的題目。題目要求:在文本文檔1.txt第五行(假設文件行數大於5)後面增加如下兩行內容:# This is a test file.# Test insert lin

【轉】JMeter學習內存溢出解決方法

不能 -xms 百度 解決 code apache 超過 軟件測試 內存 使用jmeter進行壓力測試時遇到一段時間後報內存溢出outfmenmory錯誤,導致jmeter卡死了,先嘗試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m

Linux學習iptables (二) iptables規則語法

star amp accept log saving linux 意思 root bit 查看iptables規則: [root@ruanwenwu-0002 ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets,

python學習URL編碼和解碼&簽名規則需求練習

ufw utf rem n) obj split color sea 輸入 1、url編碼和url解碼 打開瀏覽器,輸入"python基礎教程",點擊搜索後,地址欄會有一長串的類似於 %DFBGN這種 就是url編碼對應的搜索內容,具體如下: https://www.so.

JMeter學習記憶體溢位解決方法

使用jmeter進行壓力測試時遇到一段時間後報記憶體溢位outfmenmory錯誤,導致jmeter卡死了,先嚐試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m -Xmn256m -XX:PermSize=128m -Xss256k",但結果執行時間增加了,

ElasticSearch最佳入門實踐優化寫入流程實現NRT近實時filesystem cache,refresh

現有流程的問題,每次都必須等待fsync將segment刷入磁碟,才能將segment開啟供search使用,這樣的話,從一個document寫入,到它可以被搜尋,可能會超過1分鐘!!!這就不是近實時的搜尋了!!!主要瓶頸在於fsync實際發生磁碟IO寫資料進磁碟,是很耗時的。

前端學習 DOM-HTTPDom

HTTP 全稱:Hypertext Transfer Protocol,超文字傳輸協議 應用層協議 基於TCP/IP 規定了客戶端與伺服器的資料通訊格式 用於傳輸超媒體文件 HTTP會話流程 建立連結 傳送請求,等待應答 處理請求,返

深度學習——L2 Normalization, Attention1

L2 Normalization L2 Normalization本身並不複雜,然而多數資料都只提到1維的L2 Normalization的計算公式: x=[x1,x2,…,xd]y=[y1,y2,…,yd]y=x∑di=1x2i‾‾‾‾‾‾‾√=xxT

深度學習圖片翻譯WGAN實驗測試

圖片翻譯WGAN實驗測試WGAN相比於GAN的優點在於:具有更高的穩定性。在原始的WGAN中,作者通過一堆的理論,提出了WGAN,理論證明n多頁,不過程式碼實現就兩行:(1)去掉了判別網路的判別的概念,

深度學習——Normalization進階, CTC

Normalization進階 和Batch Normalization類似的概念還有Weight Normalization和Layer Normalization。 Batch Normalization 從上圖可以看出,BN是對input tensor的每個通道進

深度學習Dropout淺層理解與實現

Dropout淺層理解與實現 作者:hjimce 一、相關工作     本來今天是要搞《Maxout Networks》和《Network In Network》的,結果發現maxout和dropo

系統學習深度學習--GoogLeNetV4與Inception-ResNet V1,V2

[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,top5 error 3.08% 上面那篇論文,主要貢獻如下: 1、在Inception v3

深度學習視覺化理解卷積神經網路反池化 pooling unpooling

本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Understanding Convolutional Networks》,可以說是CNN領域視覺化理解的開山之作,這篇文獻告訴我們CNN的每一層到底學習到了什麼特徵,然後作者通過視覺化進行調整網路,提高了精度。最近兩年深層

深度學習視覺化理解卷積神經網路

視覺化理解卷積神經網路作者:hjimce一、相關理論本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Understanding Convolutional Netw

深度學習Batch Normalization 學習筆記

Batch Normalization 學習筆記 作者:hjimce 一、背景意義 本篇博文主要講解2015年深度學習領域,非常值得學習的一篇文獻:《Batch Normalization: Acc

深度學習cuda8.0+ubuntu16.04+theano、caffe、tensorflow環境搭建

cuda8.0+ubuntu16.04+theano、caffe、tensorflow環境搭建目前自己撘過深度學習各種庫、各種環境,已經搭建了n多臺電腦,發現每臺電腦配置安裝方法各不相同,總會出現各不相同的錯誤,真是心塞。筆記本和桌上型電腦有差別,桌上型電腦之間的安裝方法又各

深度學習tensorflow andorid yolo物體檢測測試

一、修改tensorflow/workspace檔案,取消android相關注釋:# Uncomment and update the paths in these entries to build t