欢迎来到“两小时开源框架系列”专栏,这是我们的第12篇文章。caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer,deeplearning4j,matconvnet,lasagne前面都提到过。
今天,darknet也是最后一个框架。关于本文中使用的数据和代码,请参考我们的官方git
https://github.com/longpeng2008/yousan.ai
作者&:编辑|有三个字
1 Darknet是什么首先,我得表扬一下Darknet的主页,风格不错。
官网地址:https://pjreddie.com/darknet/
https://github.com/pjreddie/darknet
Darknet本身就是约瑟夫·雷德蒙为Yolo系列开发的框架。
约瑟夫·雷德蒙(Joseph Redmon),一个从《看一次变得更好、更快、更强》到《增量改进》,也就是从Yolo v1到Yolo v2和Yolo v3的男人,他的肖像很好。
Darknet几乎不依赖于库。是用C和CUDA编写的深度学习开源框架,支持CPU和GPU。
我们的第一个开源框架是caffe,但是现在最后一个Darknet和Caffe很像,但是更轻量级。
2 Darknet结构解读首先,我们来看一下Darknet的代码结构,如下所示:
cfg有几个子目录,数据,例子,包括,python,src,S..
2.1数据目录
Imagenet.labels.list为:
n02120505
n02104365
n02086079
n02101556
我看得出是imagenet的类代码,对应的imagenet.shortnames.list是:
小狐
英语二传手
西伯利亚哈士奇
澳大利亚梗
可以看出,这两个文件存储了imagenet1000的类别信息。
再看9k.labels、9k . name、9k.trees,里面存储了Yolo9000论文对应的9418个类别。Coco.names,openimages.names和voc.names都差不多。
2.2 cfg目录
Cfg,下面有两种类型的文件,一种是。另一个是。cfg文件。当我们打开imagenet1k.data文件时,可以看到它配置了训练数据集的信息:
类别=1000 ##类别数量
train =/data/imagenet/imagenet 1k . train . list # #训练文件
valid =/data/imagenet/imagenet 1k . valid . list # #测试文件
backup =/home/pjreddie/backup/# #培训结果保存文件夹
labels = data/imagenet . labels . list #标签
name = data/imagenet . short name . list
top=5
另一种是。cfg文件。让我们打开cifar.cfg文件进行查看。
# #-1优化参数配置# #
[净]
批次=128
细分=1
高度=28
宽度=28
通道=3
max_crop=32
min_crop=32
# #数据增强参数
色调=.1
饱和度=.75
曝光=.75
# #学习速度策略
学习率=0.4
政策=poly
功率=4
Max _ beats = 5000 # #次迭代
动量=0.9 ##动量项
衰减=0.0005 ##常规项目
# #-2网络参数配置# #
[卷积]
Batch_normalize=1 ##是否要使用Batch_normalize
过滤器=128
尺寸=3
stride=1
pad=1
激活=泄漏##激活功能
[卷积]
batch_normalize=1
过滤器=128
尺寸=3
stride=1
pad=1
激活=泄漏
[卷积]
batch_normalize=1
过滤器=128
尺寸=3
stride=1
pad=1
激活=泄漏
[maxpool]
尺寸=2
stride=2
[辍学]
概率=.5
[卷积]
batch_normalize=1
过滤器=256
尺寸=3
stride=1
pad=1
激活=泄漏
[卷积]
batch_normalize=1
过滤器=256
尺寸=3
stride=1
pad=1
激活=泄漏
[卷积]
batch_normalize=1
过滤器=256
尺寸=3
stride=1
pad=1
激活=泄漏
[maxpool]
尺寸=2
stride=2
[辍学]
概率=.5
[卷积]
batch_normalize=1
过滤器=512
尺寸=3
stride=1
pad=1
激活=泄漏
[卷积]
batch_normalize=1
过滤器=512
尺寸=3
stride=1
pad=1
激活=泄漏
[卷积]
batch_normalize=1
过滤器=512
尺寸=3
stride=1
pad=1
激活=泄漏
[辍学]
概率=.5
[卷积]
过滤器=10
size=1
stride=1
pad=1
激活=泄漏
[avgpool]
[softmax]
组=1
它由两部分组成。第一部分是优化参数的定义,类似caffe的solver.prototxt文件。第二部分是网络定义,类似caffe的train.prototxt文件,只是网络层是用[],批量归一化和激活函数是用[卷积]配置的。
最终的avgpool不需要配置池半径,softmax也不需要配置输入输出,所以组参数设置在最后。
你可能很好奇,残网怎么弄?
[快捷方式]
激活=泄漏
from=-3
如上所述,用from=-3参数配置意味着返回3个块。
2.3 python目录
下面只有两个文件,分别是darknet.py和proverbot.py..前者是python调用yolo模型的情况,后者没有用。
2.4包含、src、示例目录
Include和src是具体函数,卷积等运算在这里。例子是高级任务的定义,包括分类器和检测器。代码的解释超出了本文的内容,后面会详细说明。
3 数据准备和模型定义3.1数据准备
之前介绍的都介绍过了,就开始准备培训资料了。和caffe一样,数据准备的过程非常简单。
首先,在数据目录中设置我们自己的任务,按照下面的目录准备文件
├──基因数据
├──标签
├──试验
├──测试列表
├──火车
└──火车.列表
使用以下命令生成文件
查找“pwd ”/ train-name *。jpg >。train.list
查找` pwd`/test -name *。jpg >。test.list
每行存储一个文件,标签通过后缀获得。
/Users/long Peng/Desktop/darknet/data/mouth/train/60 _ smile . jpg
/Users/long Peng/Desktop/darknet/data/mouth/train/201 _ smile . jpg
/Users/long Peng/Desktop/darknet/data/mouth/train/35 _ neutral . jpg
/Users/long Peng/Desktop/darknet/data/mouth/train/492 _ smile . jpg
标签的内容存储在labels.txt中,如下所示
中立的
微笑
3.2配置培训文件路径和网络
转到cfg目录并创建文件mouth.data和mouth . CFG mouth . data的内容如下:
classes = 2
train = data/mouth/train.list
valid = data/mouth/test.list
labels = data/mouth/labels.txt
backup = mouth/
top=5
mouth.cfg内容如下:
[净]
批次=16
细分=1
高度=48
宽度=48
通道=3
max_crop=48
min_crop=48
色调=.1
饱和度=.75
曝光=.75
学习率=0.01
政策=poly
功率=4
最大批次= 5000
动量=0.9
衰变=0.0005
[卷积]
batch_normalize=1
过滤器=12
尺寸=3
stride=1
pad=1
激活=泄漏
[maxpool]
尺寸=2
stride=2
[卷积]
batch_normalize=1
过滤器=24
size=1
stride=1
pad=1
激活=泄漏
[maxpool]
尺寸=2
stride=2
[卷积]
batch_normalize=1
过滤器=48
尺寸=3
stride=1
pad=1
激活=泄漏
[maxpool]
尺寸=2
stride=2
[已连接]
输出=128
激活=relu
[已连接]
输出=2
激活=线性
[softmax]
这里我们用一点数据增强操作,后面会看到它的威力。
4 模型训练使用以下命令进行训练:
。/darknet分类器train CFG/mouth . data CFG/mouth . CFG
培训结果如下:
上面每一行显示:批号、纪元号、损耗、平均损耗、学习率、时间、看到的样本数。
提取并显示最终结果,损耗变化如下,说明收敛完美。
培训结束后,使用以下脚本进行测试。
。/darknet分类器有效CFG/mouth . data CFG/mouth . CFG mouth/mouth _ 50 . weights
样本的结果如下:
darknet/data/mouth/test/27 _ smile . jpg,1,0.006881,0.993119,
99:前1: 0.960000,前5: 1.000000
样本darknet/data/嘴部/test/27 _ smile.jpg被归为1类,被归为0和1的概率分别为0.006881和0.993119,这是第99个测试样本,top1和top5的平均准确率分别为0.96和1。
到目前为止,我们已经在不到500个样本中完成了精度良好的分类器的训练。有了这么轻便的暗网,我决定粉一下。
总结本文阐述了如何使用darknet深度学习框架来完成一个分类任务。虽然框架小,但是真的很快,很轻。建议玩深度学习特别是计算机视觉的都要用。
1.《darknet 【darknet速成】Darknet图像分类从模型自定义到测试》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《darknet 【darknet速成】Darknet图像分类从模型自定义到测试》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/725801.html