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

【darknet 学习笔记-02】目标检测test_detector源码分析 在01中已经实现了对图片中的物体的检测与识别,本节分析目标检测test_detector的执行过程,对源码进行分析。 终端输入的命令如下,本节即分析该命令的执行过程。 ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg darknet的主程序入口在darknet/example/darknet.c 中,在01中我们打印出来... 阅读详情

欢迎来到专栏《2小时玩转开源框架系列》,这是我们第12篇文章,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer,deeplearning4j,matconvnet,lasagne。

今天说darknet,也是最后一个框架了,本文所用到的数据,代码请参考我们官方git

https://github.com/longpeng2008/LongPeng_ML_Course

作者&编辑 | 言有三

 

1 Darknet是什么

首先不得不夸奖一下Darknet的主页风格不错。

官网地址:https://pjreddie.com/darknet/

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

Darknet本身是Joseph Redmon为了Yolo系列开发的框架。

Joseph Redmon,一个从look once,到look Better, Faster, Stronger,到An Incremental Improvement,也就是从Yolo v1,干到Yolo v2,Yolo v3的男人,头像很应景。

Darknet几乎没有依赖库,是从C和CUDA开始撰写的深度学习开源框架,支持CPU和GPU。

咱们的第一个开源框架说的是Caffe,现在这最后一个Darknet跟caffe倒是颇有几分相似之处,只是更加轻量级。

 

2 Darknet结构解读

首先我们看下Darknet的代码结构如下:

cfg,data,examples,include,python,src,scripts几个子目录。

2.1 data目录

以上就是data目录的内容,包含了各种各样的文件。图片就是测试文件了,不必说。我们首先看看imagenet.labels.list和imagenet.shortnames.list里面是什么。

imagenet.labels.list是:

n02120505

n02104365

n02086079

n02101556

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

看得出来就是imagenet的类别代号,与之对应的imagenet.shortnames.list里是:

kit fox   

English setter   

Siberian husky   

Australian terrier   

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

可知这两个文件配套存储了imagenet1000的类别信息。

接着看9k.labels,9names,9k.trees,里面存储的就是Yolo9000论文中对应的9418个类别了。coco.names,openimages.names,voc.names都类似。

2.2 cfg目录

cfg,下面包含两类文件,一个是.data,一个是.cfg文件。我们打开imagenet1k.data文件看下,可知它配置的就是训练数据集的信息:

classes=1000 ##分类类别数

train  = /data/imagenet/imagenet1k.train.list ##训练文件

valid  = /data/imagenet/imagenet1k.valid.list ##测试文件

backup = /home/pjreddie/backup/ ##训练结果保存文件夹

labels = data/imagenet.labels.list #标签

names  = data/imagenet.shortnames.list

top=5

另一类就是.cfg文件,我们打开cifar.cfg文件查看。

##---------1 优化参数配置---------##

[net]

batch=128

subdivisions=1

height=28

width=28

channels=3

max_crop=32

min_crop=32

##数据增强参数

hue=.1

saturation=.75

exposure=.75

##学习率策略

learning_rate=0.4

policy=poly

power=4

max_batches = 5000 ##迭代次数

momentum=0.9 ##动量项

decay=0.0005 ##正则项

##---------2 网络参数配置---------##

[convolutional]

batch_normalize=1  ##是否使用batch_normalization

filters=128

size=3

stride=1

pad=1

activation=leaky ##激活函数

[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

包含两部分,第一部分就是优化参数的定义,类似于caffe的solver.prototxt文件。第二部分就是网络定义,类似于caffe的train.prototxt文件,不同的是网络层用[]来声明,batch normalization以及激活函数等配置进了[convolutional]里面。

最后的avgpool不需要配置池化半径,softmax不需要配置输入输出,在最后设置group参数。

你可能好奇,那残差网络怎么弄呢?

[shortcut]   

activation=leaky   

from=-3   

如上,通过一个from=-3参数来进行配置,就是往后退3个block的意思了。

2.3 python目录

下面只有两个文件,即darknet.py和proverbot.py。前者就是python调用yolo模型的案例,后者没什么用。

2.4 include,src,examples目录

include和src就是具体的函数实现了,卷积等各类操作都在这里。examples就是高层任务的定义,包括classifier,detector,代码的解读就超过本文的内容了,以后详解。

 

3 数据准备和模型定义

3.1 数据准备

前面已经把该介绍的都介绍了,下面就开始准备数据进行训练。跟caffe一样,数据准备的流程非常简单。

首先,在data目录下建立我们自己的任务,按照如下目录,把文件准备好

├── genedata.sh

├── labels.txt

├── test

├── test.list

├── train

└── train.list

使用如下命令生成文件

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

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

其中每一行都存储一个文件,而标签是通过后缀获得的。

/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

标签的内容存在labels.txt里面,如下

neutral

smile

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内容如下:

[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]

在这里我们用上了一点数据增强操作,大家在后面会看到它的威力。

 

4 模型训练

使用如下命令进行训练:

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

训练结果如下:

上面每一行展示的分别是:batch数目,epoch数目,损失,平均损失,学习率,时间,见过的样本数目。

将最后的结果提取出来进行显示,损失变化如下,可知收敛非常完美。

训练完之后使用如下脚本进行测试。

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

一个样本的结果如下:

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个测试样本,此时top1和top5的平均准确率分为是0.96和1。

到这里,我们只用了不到500个样本,就完成了一个精度不错的分类器的训练,如此轻量级的darknet,我决定粉了。

总结

本文讲解了如何使用darknet深度学习框架完成一个分类任务,框架固然小众,但是速度真快,而且非常轻便,推荐每一个玩深度学习,尤其是计算机视觉的朋友都用起来。

本系列完整文章:

第一篇:【caffe速成】caffe图像分类从模型自定义到测试

第二篇:【tensorflow速成】Tensorflow图像分类从模型自定义到测试

第三篇:【pytorch速成】Pytorch图像分类从模型自定义到测试

第四篇:【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试

第五篇:【Keras速成】Keras图像分类从模型自定义到测试

第六篇:【mxnet速成】mxnet图像分类从模型自定义到测试

第七篇:【cntk速成】cntk图像分类从模型自定义到测试

第八篇:【chainer速成】chainer图像分类从模型自定义到测试

第九篇:【DL4J速成】Deeplearning4j图像分类从模型自定义到测试

第十篇:【MatConvnet速成】MatConvnet图像分类从模型自定义到测试

第十一篇:【Lasagne速成】Lasagne/Theano图像分类从模型自定义到测试

第十二篇:【darknet速成】Darknet图像分类从模型自定义到测试

感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注有三公众号 有三AI!

darknet版yolov3安全帽目标检测训练权重 darknet-master(tank-2).zip darknet版yolov3人、安全帽、坦克三个类别的目标检测训练权重,配置文件为data/voc.names ; cfg/voc.data ; cfg/yolov3-voc.cfg ; 类别名按顺序依次为tank、hat、person;训练好的权重保存在backup文件夹中;附附训练loss图和map曲线图,并包含训练数据集 立即下载

相关推荐

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 515

【darknet学习笔记】修改训练图像分类加载数据类型

修改darknet源代码,使其能够直接训练二进制图像数据 classifier.c文件中数据类型为CLASSIFICATION_DATA args.type = CLASSIFICATION_DATA; data.c文件中的load_thread()函数中调用load_data_augment()函数: void *load_thread(void *ptr) { //sra...

haimianjie2012的专栏 806

5分钟搞懂语义通信:如何用深度学习让AI理解你的真实意图?

本文深入解析了语义通信如何利用深度学习技术,实现从传统‘比特保真’到‘语义保真’的范式转移。通过介绍基于神经网络的端到端系统架构、编解码技术及实战案例,阐明AI如何理解并高效传递信息核心意图,为6G时代的人机交互奠定基础。

weixin_29191669的博客 266

目标检测:1 基于Darknet的YOLO目标检测之test

YOLO目标检测 Darknet的好处是依赖少,执行效率高,如果不显示图片连opencv都可以省略。 Test 根据darknet官网 第一步: 1、先下载darknet中的文件 2、进入darknet文件夹下 3、make是编译,将里边的文件编译生成需要的文件 git clone https://github.com/pjreddie/darknet cd darknet m...

weixin_38730719的博客 1492

Zynq工程IP核封装:XCI引用与约束继承实战指南

IP核封装是FPGA系统设计中实现模块复用、团队协作与技术资产沉淀的关键环节。其本质是将功能逻辑、时序约束、接口协议和硬件配置统一抽象为可配置、可验证、可演进的标准化组件。核心原理在于通过XCI文件保留IP核的参数化定义能力,依托Vivado IP Packager实现约束继承、端口自动映射与时钟域解耦,从而保障跨项目集成的时序可信性与约束完备性。该技术广泛应用于Zynq SoC视频处理、高速接口(如HDMI/TMDS)、多时钟域控制系统等场景,尤其在需要长期维护与版本迭代的工业级嵌入式开发中具有不可替代的

weixin_42593701的博客 126

山景BP10_128DBG开发板ADC_Key驱动

最近在学习山景BP10_128DBG开发板,想使用开发板上的按键。看了看原理图和之前用过的按键好像有点不一样。常见的按键都是判断IO口是否被拉低或拉高来判断按键是否被按下。山景BP10_128DBG开发板上的按键是ADC按键,每个按键按下之后ADC的采样值是不同的,通过ADC采样回来的值进而判断哪个按键按下。这种方式核心思想就是用一个ADC通道来节约IO口,对于IO紧张的芯片是一个不错的解决思路。

weixin_56646002的博客 1311

内涵:目标检测之DarkNet-DarkNet源码解读<二>训练篇

1. 引言   本篇文章是介绍DarkNet的第三篇文章。第一篇文章主要是介绍DarkNet的使用,重点在于熟悉DarkNet训练集的数据标签形式和相关的使用指令。第二篇文章主要是介绍DarkNet的test线的源码:包括List数据结构;网络多链的实现;回调函数机制和检测的前向后处理。本文是第三篇文章,按照设计,DarkNet就会以这三篇文章作为主脉络,后续若再有相关的关于DarkNet的文章,也仅仅是对这三篇文章的一个补充。   作为DarkNet的最后一条主线文章,本篇文章依旧延续前两篇的风格:从入口

1317

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

A20802013的博客 2万+

darknet使用detector训练与测试自己的数据

看过几篇博客和官网的介绍,总结出自己切实可行的pipline,思路如下: 第一:下载官网源码,训练测试,检测测试,如果没有问题,进行下一步。 第二:开始做满足其训练的数据,包括图像和带有标注的标准xml格式文件,这一步耗时微长一些,用到了 一下三个工具:             1、P图工具             2、生成xml文件工具     3、转换图像格式工具 第三:数据替换

Allyli0022的专栏 8629

生成模型实战 | 基于Transformer生成音乐

本文介绍了基于Transformer架构的音乐生成方法,将音乐视为一系列事件序列进行处理。与将音乐表示为多维图像的MuseGAN不同,该方法使用类似GPT的仅解码器模型,基于先前事件预测下一个音乐事件。模型使用MIDI格式的钢琴音乐数据,通过分词处理将音符转换为note-on、note-off、time-shift和velocity四种事件类型,共388个独特词元,映射为索引序列后输入网络。训练完成后,可通过调整温度参数控制生成音乐的新颖性,从而创作出风格类似训练数据且连贯逼真的音乐作品。

盼小辉丶的博客 5890

如何在 Linux 上安装 RTX 5090 / 5080 /5070 Ti / 5070 驱动程序 — 详细指南

Linux 上的 NVIDIA 5090 是 AI、游戏和渲染的强大引擎,但需要耐心。如果稳定性是首要考虑因素,请坚持使用开源驱动程序,并关注 NVIDIA 论坛以获取未来更新。

iCloudEnd的博客 6918

coco训练集darknet_【darknet速成】Darknet图像分类从模型自定义到测试

欢迎来到专栏《2小时玩转开源框架系列》,这是我们第12篇文章,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer,deeplearning4j,matconvnet,lasagne。今天说darknet,也是最后一个框架了,本文所用到的数据,代码请参考我们官方git https://github.com/lon...

weixin_39747383的博客 370

YOLOv11损失函数进阶:融合SmoothL1与FocalLoss,让检测精度再涨10%的实战教程

在YOLOv11的这里的beta参数控制“L1与L2的过渡阈值”,默认设为1.0即可兼容多数场景。同样在# 计算动态alpha(基于类别样本数,需提前统计self.class_counts)# 交叉熵基础# FocalLoss权重else:使用前需统计数据集的(每个类别的样本数),并传入的alpha参数。损失函数是YOLOv11精度的“灵魂”——SmoothL1让边界框回归“稳、准、狠”,改进FocalLoss让类别分类“雨露均沾”。从代码改造到实战落地,本教程已为你搭建了一条精度跃升的路径。

m0_64661770的博客 213

darknet框架_【杂谈】超过12个,150页深度学习开源框架指导手册与GitHub项目,初学CV你值得拥有...

之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息。开源框架背景现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,deeplearning4j,matconvnet等。如何选择...

weixin_39745269的博客 92

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

darknet框架_【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

之前我们公众号输出了很多深度学习开源框架相关的内容,现在整理成技术手册给大家分享以方便阅读,下面是详细信息。开源框架背景现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,deeplearning4j,matconvnet等。如何选择...

weixin_39634438的博客 123

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

darknet框架_【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息。开源框架背景现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,deeplearning4j,matconvnet等。如何选择...

weixin_39780962的博客 88

【好专栏】深度学习框架不会用?12大主流深度学习框架快速入门,你值得拥有!...

欢迎来到【好专栏】,本次我们给大家推荐一个专栏,名为《12 大深度学习开源框架快速入门》,这个专栏为介绍了深度学习的 12 大主流框架,附带实践案例,能够让读者快速掌握深度学习框架的使用...

Leong Blog 516

【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息。开源框架背景现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的...

hacker_long的专栏 697

Darknet 最新教程 批量测试

Darknet 最新教程 批量测试

我才是真的李成贤的博客 1259

darknet(YOLO)源码解析--测试(一)

代码小白,第一次认真看大段大段的代码,基础知识严重欠缺,如有错误望指正。进入正题: 测试命令示例:$./darknet detector test cfg/voc.data cfg/tiny-yolo-voc.cfg results/tiny-yolo-voc_6000.weights data/images.jpg一、main函数目前最新版本的darknet中,darknet.c和detecto

jocelyn870的博客 9170

darknet 使用 分类器+darknet下resnet50猫狗大战教程

由于我手里的数据集共20,000张,所以本文就按照这样来写,官网的数据25,000张。 由于官网是全英文,阅读起来对很多朋友不是很方便,而查阅相关中文博客时,写的也不够详细,对很多初学者来说不容易,这就是我写这篇博客的目的。我也是按照官网的步骤来写的。 系统:我使用的是ubuntu14.04   先将20,000张数据集(包括10,000张猫和10,000张狗)分成两部分,训练集16,00...

Obama_优快云的博客 6715

Darknet概述

优点 Darknet是一个比较小众的深度学习框架,没有社区,主要靠作者团队维护,所以推广较弱,用的人不多。而且由于维护人员有限,功能也不如tensorflow等框架那么强大,但是该框架还是有一些独有的优点: 1.易于安装:在makefile里面选择自己需要的附加项(cuda,cudnn,opencv等)直接make即可,几分钟完成安装; 2.没有任何依赖项:整个框架都用C语言进行编写,可以不依赖...

搬砖笔记 9万+

darknet分类网络,训练,C++调用分类器

Darknet 分类器 Darknet出名的为目标检测网络,但是遗忘了其中的构建基础的分类网络方式,没有得到很好的利用 大致步骤可参考 训练过程和标注样本数据的方式参考如下文章: https://blog.youkuaiyun.com/u011576009/article/details/70146766 中间出现的需要生成和修改的文件为, 数据集准备 train.list 格式为路径指向训练文件,/home/ubuntu/data/train/D250252_00001.jpg的形式 其中D250252为类别号

Fox的博客 1080

YOLOv3使用笔记——darknet分类、计算accuracy

https://pjreddie.com/darknet/train-cifar/ 1.数据集准备 本文以darknet19训练开关门数据集为例 根目录data文件夹下新建一个door文件夹用于存放数据集,标签文件。 新建label.txt,分两类开门与关门 open closed 新建train、test文件夹分别用于存放训练集和测试集 其中图片名格式如下:00001_open....

Gotta-C的博客 1万+

darknet 框架实现图像分类&检测

一 Windows darknet安装 源码:https://github.com/AlexeyAB/darknet 适用windows系统。 配置与编译darknet VS 工程。(省略) 二 darknet框架训练分类模型 直接调用编译好的.\build\darknet\x64\darknet.exe,在cmd中采用以下命令: darknetclassifier trai...

ghy_111的博客 5508

darknet test Segmentation fault (core dumped)

做测试的时候(test) 出现Segmentation fault (core dumped) 并且显示不出来图片 原因:因为标签是用了中文,导致darknet不能显示,并且报错 解决方法: 修改你的标签,具体只要改一下 xxx.names(在官网中对应的是coco.names) 文件就行了。 另外可以修改源码来使得darknet 支持显示中文标签。 ...

lswdecsdn的博客 1051
上一篇: 【杂谈】三人行必有AI,你会在其一吗?
下一篇: 【Lasagne速成】Lasagne/Theano图像分类从模型自定义到测试
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值