日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【darknet速成】Darknet图像分类从模型自定义到测试

發(fā)布時(shí)間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【darknet速成】Darknet图像分类从模型自定义到测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎來(lái)到專欄《2小時(shí)玩轉(zhuǎn)開源框架系列》,這是我們第12篇文章,前面已經(jīng)說(shuō)過(guò)了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer,deeplearning4j,matconvnet,lasagne。

今天說(shuō)darknet,也是最后一個(gè)框架了,本文所用到的數(shù)據(jù),代碼請(qǐng)參考我們官方git

https://github.com/longpeng2008/LongPeng_ML_Course

作者&編輯 | 言有三

?

1 Darknet是什么

首先不得不夸獎(jiǎng)一下Darknet的主頁(yè)風(fēng)格不錯(cuò)。

官網(wǎng)地址:https://pjreddie.com/darknet/

GitHub: https://github.com/pjreddie/darknet

Darknet本身是Joseph Redmon為了Yolo系列開發(fā)的框架。

Joseph Redmon,一個(gè)從look once,到look Better, Faster, Stronger,到An Incremental Improvement,也就是從Yolo v1,干到Y(jié)olo v2,Yolo v3的男人,頭像很應(yīng)景。

Darknet幾乎沒有依賴庫(kù),是從C和CUDA開始撰寫的深度學(xué)習(xí)開源框架,支持CPU和GPU。

咱們的第一個(gè)開源框架說(shuō)的是Caffe,現(xiàn)在這最后一個(gè)Darknet跟caffe倒是頗有幾分相似之處,只是更加輕量級(jí)。

?

2 Darknet結(jié)構(gòu)解讀

首先我們看下Darknet的代碼結(jié)構(gòu)如下:

cfg,data,examples,include,python,src,scripts幾個(gè)子目錄。

2.1 data目錄

以上就是data目錄的內(nèi)容,包含了各種各樣的文件。圖片就是測(cè)試文件了,不必說(shuō)。我們首先看看imagenet.labels.list和imagenet.shortnames.list里面是什么。

imagenet.labels.list是:

n02120505

n02104365

n02086079

n02101556

·············

看得出來(lái)就是imagenet的類別代號(hào),與之對(duì)應(yīng)的imagenet.shortnames.list里是:

kit fox? ?

English setter? ?

Siberian husky? ?

Australian terrier? ?

·············

可知這兩個(gè)文件配套存儲(chǔ)了imagenet1000的類別信息。

接著看9k.labels,9names,9k.trees,里面存儲(chǔ)的就是Yolo9000論文中對(duì)應(yīng)的9418個(gè)類別了。coco.names,openimages.names,voc.names都類似。

2.2 cfg目錄

cfg,下面包含兩類文件,一個(gè)是.data,一個(gè)是.cfg文件。我們打開imagenet1k.data文件看下,可知它配置的就是訓(xùn)練數(shù)據(jù)集的信息:

classes=1000 ##分類類別數(shù)

train? = /data/imagenet/imagenet1k.train.list ##訓(xùn)練文件

valid? = /data/imagenet/imagenet1k.valid.list ##測(cè)試文件

backup = /home/pjreddie/backup/ ##訓(xùn)練結(jié)果保存文件夾

labels = data/imagenet.labels.list #標(biāo)簽

names? = data/imagenet.shortnames.list

top=5

另一類就是.cfg文件,我們打開cifar.cfg文件查看。

##---------1 優(yōu)化參數(shù)配置---------##

[net]

batch=128

subdivisions=1

height=28

width=28

channels=3

max_crop=32

min_crop=32

##數(shù)據(jù)增強(qiáng)參數(shù)

hue=.1

saturation=.75

exposure=.75

##學(xué)習(xí)率策略

learning_rate=0.4

policy=poly

power=4

max_batches = 5000 ##迭代次數(shù)

momentum=0.9 ##動(dòng)量項(xiàng)

decay=0.0005 ##正則項(xiàng)

##---------2 網(wǎng)絡(luò)參數(shù)配置---------##

[convolutional]

batch_normalize=1? ##是否使用batch_normalization

filters=128

size=3

stride=1

pad=1

activation=leaky ##激活函數(shù)

[convolutional]

batch_normalize=1

filters=128

size=3

stride=1

pad=1

activation=leaky

[convolutional]

batch_normalize=1

filters=128

size=3

stride=1

pad=1

activation=leaky

[maxpool]

size=2

stride=2

[dropout]

probability=.5

[convolutional]

batch_normalize=1

filters=256

size=3

stride=1

pad=1

activation=leaky

[convolutional]

batch_normalize=1

filters=256

size=3

stride=1

pad=1

activation=leaky

[convolutional]

batch_normalize=1

filters=256

size=3

stride=1

pad=1

activation=leaky

[maxpool]

size=2

stride=2

[dropout]

probability=.5

[convolutional]

batch_normalize=1

filters=512

size=3

stride=1

pad=1

activation=leaky

[convolutional]

batch_normalize=1

filters=512

size=3

stride=1

pad=1

activation=leaky

[convolutional]

batch_normalize=1

filters=512

size=3

stride=1

pad=1

activation=leaky

[dropout]

probability=.5

[convolutional]

filters=10

size=1

stride=1

pad=1

activation=leaky

[avgpool]

[softmax]

groups=1

包含兩部分,第一部分就是優(yōu)化參數(shù)的定義,類似于caffe的solver.prototxt文件。第二部分就是網(wǎng)絡(luò)定義,類似于caffe的train.prototxt文件,不同的是網(wǎng)絡(luò)層用[]來(lái)聲明,batch normalization以及激活函數(shù)等配置進(jìn)了[convolutional]里面。

最后的avgpool不需要配置池化半徑,softmax不需要配置輸入輸出,在最后設(shè)置group參數(shù)。

你可能好奇,那殘差網(wǎng)絡(luò)怎么弄呢?

[shortcut]? ?

activation=leaky? ?

from=-3? ?

如上,通過(guò)一個(gè)from=-3參數(shù)來(lái)進(jìn)行配置,就是往后退3個(gè)block的意思了。

2.3 python目錄

下面只有兩個(gè)文件,即darknet.py和proverbot.py。前者就是python調(diào)用yolo模型的案例,后者沒什么用。

2.4 include,src,examples目錄

include和src就是具體的函數(shù)實(shí)現(xiàn)了,卷積等各類操作都在這里。examples就是高層任務(wù)的定義,包括classifier,detector,代碼的解讀就超過(guò)本文的內(nèi)容了,以后詳解。

?

3 數(shù)據(jù)準(zhǔn)備和模型定義

3.1 數(shù)據(jù)準(zhǔn)備

前面已經(jīng)把該介紹的都介紹了,下面就開始準(zhǔn)備數(shù)據(jù)進(jìn)行訓(xùn)練。跟caffe一樣,數(shù)據(jù)準(zhǔn)備的流程非常簡(jiǎn)單。

首先,在data目錄下建立我們自己的任務(wù),按照如下目錄,把文件準(zhǔn)備好

├── genedata.sh

├── labels.txt

├── test

├── test.list

├── train

└── train.list

使用如下命令生成文件

find `pwd`/train -name \*.jpg > train.list

find `pwd`/test -name \*.jpg > test.list

其中每一行都存儲(chǔ)一個(gè)文件,而標(biāo)簽是通過(guò)后綴獲得的。

/Users/longpeng/Desktop/darknet/data/mouth/train/60_smile.jpg

/Users/longpeng/Desktop/darknet/data/mouth/train/201_smile.jpg

/Users/longpeng/Desktop/darknet/data/mouth/train/35_neutral.jpg

/Users/longpeng/Desktop/darknet/data/mouth/train/492_smile.jpg

標(biāo)簽的內(nèi)容存在labels.txt里面,如下

neutral

smile

3.2 配置訓(xùn)練文件路徑和網(wǎng)絡(luò)

去cfg目錄下建立文件mouth.data和mouth.cfg,mouth.data內(nèi)容如下:

classes=2

train? = data/mouth/train.list

valid? = data/mouth/test.list

labels = data/mouth/labels.txt

backup = mouth/

top=5

mouth.cfg內(nèi)容如下:

[net]

batch=16

subdivisions=1

height=48

width=48

channels=3

max_crop=48

min_crop=48

hue=.1

saturation=.75

exposure=.75

learning_rate=0.01

policy=poly

power=4

max_batches = 5000

momentum=0.9

decay=0.0005

[convolutional]

batch_normalize=1

filters=12

size=3

stride=1

pad=1

activation=leaky

[maxpool]

size=2

stride=2

[convolutional]

batch_normalize=1

filters=24

size=1

stride=1

pad=1

activation=leaky

[maxpool]

size=2

stride=2

[convolutional]

batch_normalize=1

filters=48

size=3

stride=1

pad=1

activation=leaky

[maxpool]

size=2

stride=2

[connected]

output=128

activation=relu

[connected]

output=2

activation=linear

[softmax]

在這里我們用上了一點(diǎn)數(shù)據(jù)增強(qiáng)操作,大家在后面會(huì)看到它的威力。

?

4 模型訓(xùn)練

使用如下命令進(jìn)行訓(xùn)練:

./darknet classifier train cfg/mouth.data cfg/mouth.cfg

訓(xùn)練結(jié)果如下:

上面每一行展示的分別是:batch數(shù)目,epoch數(shù)目,損失,平均損失,學(xué)習(xí)率,時(shí)間,見過(guò)的樣本數(shù)目。

將最后的結(jié)果提取出來(lái)進(jìn)行顯示,損失變化如下,可知收斂非常完美。

訓(xùn)練完之后使用如下腳本進(jìn)行測(cè)試。

./darknet classifier valid cfg/mouth.data cfg/mouth.cfg mouth/mouth_50.weights

一個(gè)樣本的結(jié)果如下:

darknet/data/mouth/test/27_smile.jpg, 1, 0.006881, 0.993119,

99: top 1: 0.960000, top 5: 1.000000

依次表示樣本darknet/data/mouth/test/27_smile.jpg,被分為類別1,分類為0和1的概率是0.006881, 0.993119,該樣本是第99個(gè)測(cè)試樣本,此時(shí)top1和top5的平均準(zhǔn)確率分為是0.96和1。

到這里,我們只用了不到500個(gè)樣本,就完成了一個(gè)精度不錯(cuò)的分類器的訓(xùn)練,如此輕量級(jí)的darknet,我決定粉了。

總結(jié)

本文講解了如何使用darknet深度學(xué)習(xí)框架完成一個(gè)分類任務(wù),框架固然小眾,但是速度真快,而且非常輕便,推薦每一個(gè)玩深度學(xué)習(xí),尤其是計(jì)算機(jī)視覺的朋友都用起來(lái)。

本系列完整文章:

第一篇:【caffe速成】caffe圖像分類從模型自定義到測(cè)試

第二篇:【tensorflow速成】Tensorflow圖像分類從模型自定義到測(cè)試

第三篇:【pytorch速成】Pytorch圖像分類從模型自定義到測(cè)試

第四篇:【paddlepaddle速成】paddlepaddle圖像分類從模型自定義到測(cè)試

第五篇:【Keras速成】Keras圖像分類從模型自定義到測(cè)試

第六篇:【mxnet速成】mxnet圖像分類從模型自定義到測(cè)試

第七篇:【cntk速成】cntk圖像分類從模型自定義到測(cè)試

第八篇:【chainer速成】chainer圖像分類從模型自定義到測(cè)試

第九篇:【DL4J速成】Deeplearning4j圖像分類從模型自定義到測(cè)試

第十篇:【MatConvnet速成】MatConvnet圖像分類從模型自定義到測(cè)試

第十一篇:【Lasagne速成】Lasagne/Theano圖像分類從模型自定義到測(cè)試

第十二篇:【darknet速成】Darknet圖像分類從模型自定義到測(cè)試

感謝各位看官的耐心閱讀,不足之處希望多多指教。后續(xù)內(nèi)容將會(huì)不定期奉上,歡迎大家關(guān)注有三公眾號(hào) 有三AI

總結(jié)

以上是生活随笔為你收集整理的【darknet速成】Darknet图像分类从模型自定义到测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。