AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)

ImageNet分类

您可以使用Darknet为1000级ImageNet挑战赛分类图像。如果你还没有安装Darknet,你应该先安装。

使用预先训练的模型分类

下面是安装Darknet、下载分类权重文件和在图像上运行分类器的命令:

git clone https://github.com/pjreddie/darknet.git

cd darknet

make

wget https://pjreddie.com/media/files/darknet19.weights

./darknet classifier predict cfg/imagenet1k.data cfg/darknet19.cfg darknet19.weights data/dog.jpg

本例使用Darknet19模型,您可以在下面阅读更多有关它的信息。运行此命令后,您将看到以下输出:

ayer     filters    size              input                output

0 conv     32  3 x 3 / 1   256 x 256 x   3   ->   256 x 256 x  32  0.113 BFLOPs

1 max          2 x 2 / 2   256 x 256 x  32   ->   128 x 128 x  32

2 conv     64  3 x 3 / 1   128 x 128 x  32   ->   128 x 128 x  64  0.604 BFLOPs

3 max          2 x 2 / 2   128 x 128 x  64   ->    64 x  64 x  64

4 conv    128  3 x 3 / 1    64 x  64 x  64   ->    64 x  64 x 128  0.604 BFLOPs

5 conv     64  1 x 1 / 1    64 x  64 x 128   ->    64 x  64 x  64  0.067 BFLOPs

6 conv    128  3 x 3 / 1    64 x  64 x  64   ->    64 x  64 x 128  0.604 BFLOPs

7 max          2 x 2 / 2    64 x  64 x 128   ->    32 x  32 x 128

8 conv    256  3 x 3 / 1    32 x  32 x 128   ->    32 x  32 x 256  0.604 BFLOPs

9 conv    128  1 x 1 / 1    32 x  32 x 256   ->    32 x  32 x 128  0.067 BFLOPs

10 conv    256  3 x 3 / 1    32 x  32 x 128   ->    32 x  32 x 256  0.604 BFLOPs

11 max          2 x 2 / 2    32 x  32 x 256   ->    16 x  16 x 256

12 conv    512  3 x 3 / 1    16 x  16 x 256   ->    16 x  16 x 512  0.604 BFLOPs

13 conv    256  1 x 1 / 1    16 x  16 x 512   ->    16 x  16 x 256  0.067 BFLOPs

14 conv    512  3 x 3 / 1    16 x  16 x 256   ->    16 x  16 x 512  0.604 BFLOPs

15 conv    256  1 x 1 / 1    16 x  16 x 512   ->    16 x  16 x 256  0.067 BFLOPs

16 conv    512  3 x 3 / 1    16 x  16 x 256   ->    16 x  16 x 512  0.604 BFLOPs

17 max          2 x 2 / 2    16 x  16 x 512   ->     8 x   8 x 512

18 conv   1024  3 x 3 / 1     8 x   8 x 512   ->     8 x   8 x1024  0.604 BFLOPs

19 conv    512  1 x 1 / 1     8 x   8 x1024   ->     8 x   8 x 512  0.067 BFLOPs

20 conv   1024  3 x 3 / 1     8 x   8 x 512   ->     8 x   8 x1024  0.604 BFLOPs

21 conv    512  1 x 1 / 1     8 x   8 x1024   ->     8 x   8 x 512  0.067 BFLOPs

22 conv   1024  3 x 3 / 1     8 x   8 x 512   ->     8 x   8 x1024  0.604 BFLOPs

23 conv   1000  1 x 1 / 1     8 x   8 x1024   ->     8 x   8 x1000  0.131 BFLOPs

24 avg                        8 x   8 x1000   ->  1000

25 softmax                                        1000

Loading weights from darknet19.weights...Done!

data/dog.jpg: Predicted in 0.769246 seconds.

42.55%: malamute

22.93%: Eskimo dog

12.51%: Siberian husky

2.76%: bicycle-built-for-two

1.20%: mountain bike

Darknet在加载配置文件和权重时显示信息,然后对图像进行分类并打印图像的前10个类。海藻是一种混合品种的狗,但她有很多软弱无力,所以我们认为这是一个成功的!

您也可以尝试使用其他图像,如秃鹰图像:

./darknet classifier predict cfg/imagenet1k.data cfg/darknet19.cfg darknet19.weights data/eagle.jpg

生成:

...

data/eagle.jpg: Predicted in 0.707070 seconds.

84.68%: bald eagle

11.91%: kite

2.62%: vulture

0.08%: great grey owl

0.07%: hen

不错!

如果未指定图像文件,则在运行时将提示您输入图像。这样,您就可以在一行中对多个对象进行分类,而无需重新加载整个模型。使用命令:

./darknet classifier predict cfg/imagenet1k.data cfg/darknet19.cfg darknet19.weights

然后您将得到一个提示,如下所示:

....

25: Softmax Layer: 1000 inputs

Loading weights from darknet19.weights...Done!

Enter Image Path:

每当你厌倦了分类图像,你可以使用Ctrl-C退出程序。

在ImageNet上验证

到处都可以看到这些验证集编号。也许你想再检查一下这些模型的实际工作情况。我们来吧!

首先需要下载验证图像和cls loc注释。你可以把它们弄到这里,但你得记帐!下载完所有内容后,您应该有一个包含ILSVRC2012_bbox_val_v3.tgz和ILSVRC2012_img_val.tar的目录。首先我们打开包装:

tar -xzf ILSVRC2012_bbox_val_v3.tgz

mkdir -p imgs && tar xf ILSVRC2012_img_val.tar -C imgs

现在我们有了图像和注释,但我们需要标记图像,以便Darknet能够评估其预测。我们使用这个bash脚本来实现这一点。它已经在脚本/子目录中了。我们只需再次获取并运行它:

wget https://pjreddie.com/media/files/imagenet_label.sh

bash imagenet_label.sh

这将生成两个内容:一个名为labeled/的目录,其中包含指向图像的重命名符号链接;另一个名为inet.val.list的文件,其中包含标记图像的路径列表。我们需要将此文件移动到Darknet中的data/子目录:

mv inet.val.list <path-to>/darknet/data

现在你终于可以验证你的模型了!先把darknet重新make出来。然后运行验证例程,如下所示:

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

注意:如果不使用OpenCV编译Darknet,那么就无法加载所有ImageNet图像,因为其中一些图像是stbúu image.h不支持的奇怪格式。

如果不使用CUDA编译,您仍然可以在ImageNet上验证,但这将需要相当长的时间。不推荐。              预先训练的模型

这里有各种用于ImageNet分类的预训练模型。准确度在ImageNet上测量为单crop验证准确度。GPU计时是在Titan X上测量的,CPU计时是在单核Intel i7-4790K(4 GHz)上运行的。在OPENMP中使用多线程应该与cpu的比例成线性关系。

Alxnet

开始创新的模式!最初的模型是疯狂的分裂GPU的事情,所以这是一些后续工作的模型。

·       Top-1 Accuracy: 57.0%

·       Top-5 Accuracy: 80.3%

·       Forward Timing: 3.1 ms/img

·       CPU Forward Timing: 0.29 s/img

·       cfg file

·       weight file (238 MB)

Darknet参考模型

这个模型设计得很小但是很强大。它获得了与AlexNet相同的前1名和前5名的性能,但参数只有1/10。它主要使用卷积层,而没有在末端的大型完全连接层。它的速度大约是AlexNet在CPU上的两倍,这使得它更适合一些视觉应用。

·       Top-1 Accuracy: 61.1%

·       Top-5 Accuracy: 83.0%

·       Forward Timing: 2.9 ms/img

·       CPU Forward Timing: 0.14 s/img

·       cfg file

·       weight file (28 MB)

VGG-16

牛津大学的视觉几何小组为ILSVRC-2014比赛开发了VGG-16模型。它具有很高的分类精度和广泛的应用前景。我把这个版本改编自Caffe预先训练的模型。它被训练为另外6个阶段,以适应特定于darknet的图像预处理(而不是平均减法darknet调整图像介于-1和1之间)。

·       Top-1 Accuracy: 70.5%

·       Top-5 Accuracy: 90.0%

·       Forward Timing: 9.4 ms/img

·       CPU Forward Timing: 4.36 s/img

·       cfg file

·       weight file (528 MB)

Extraction

开发了这个模型作为GoogleNet模型的一个分支。它不使用“初始”模块,只使用1x1和3x3卷积层。

·       Top-1 Accuracy: 72.5%

·       Top-5 Accuracy: 90.8%

·       Forward Timing: 4.8 ms/img

·       CPU Forward Timing: 0.97 s/img

·       cfg file

·       weight file (90 MB)

Darknet19

我修改了提取网络,使之更快更准确。这个网络是一种融合了darknet参考网络和特征提取以及众多论文(如网络中的网络、初始和批量规范化)的思想。

·       Top-1 Accuracy: 72.9%

·       Top-5 Accuracy: 91.2%

·       Forward Timing: 6.2 ms/img

·       CPU Forward Timing: 0.87 s/img

·       cfg file

·       weight file (80 MB)

Darknet19 448x448

我用一个更大的输入图像大小448x448,为10多个时期训练了Darknet19。该模型性能明显更好,但速度较慢,因为整个图像更大。

·       Top-1 Accuracy: 76.4%

·       Top-5 Accuracy: 93.5%

·       Forward Timing: 11.0 ms/img

·       CPU Forward Timing: 2.96 s/img

·       cfg file

·       weight file (80 MB)

Resnet 50

出于某种原因,人们喜欢这些网络,即使他们是如此缓慢。

·       Top-1 Accuracy: 75.8%

·       Top-5 Accuracy: 92.9%

·       Forward Timing: 11.4 ms/img

·       CPU Forward Timing: 1.13 s/img

·       cfg file

·       weight file (87 MB)

Resnet 152

出于某种原因,人们喜欢这些网络,即使他们是如此缓慢。

·       Top-1 Accuracy: 77.6%

·       Top-5 Accuracy: 93.8%

·       Forward Timing: 28.6 ms/img

·       CPU Forward Timing: 3.31 s/img

·       cfg file

·       weight file (220 MB)

Densenet 201

我Densenet!他们是如此深沉,如此疯狂,工作如此出色。像Resnet一样,仍然很慢,因为它们有很多层,但至少它们工作得很好!

·       Top-1 Accuracy: 77.0%

·       Top-5 Accuracy: 93.7%

·       Forward Timing: 32.6 ms/img

·       CPU Forward Timing: 1.38 s/img

·       cfg file

·       weight file (67 MB)

AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)的更多相关文章

  1. AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(六) 1. Tiny Darknet 听过很多人谈论SqueezeNet. SqueezeNet很酷,但它只是优化参数计数.当大多数高 ...

  2. AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(五) RNNs in Darknet 递归神经网络是表示随时间变化的数据的强大模型.为了更好地介绍RNNs,我强烈推荐Andrej K ...

  3. AlexeyAB DarkNet YOLOv3框架解析与应用实践(四)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(四) Nightmare 从前,在一所大学的大楼里,西蒙尼亚.维达第和齐瑟曼有一个很好的主意,几乎和你现在坐的大楼完全不同.他们想,嘿 ...

  4. AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(二) 版本3有什么新功能? YOLOv3使用了一些技巧来改进训练和提高性能,包括:多尺度预测.更好的主干分类器等等.全部细节都在我们的 ...

  5. AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(一) Darknet:  C语言中的开源神经网络 Darknet是一个用C和CUDA编写的开源神经网络框架.它速度快,易于安装,支持C ...

  6. mybatis 3.x源码深度解析与最佳实践(最完整原创)

    mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...

  7. iScroll框架解析——Android 设备页面内 div(容器,非页面)overflow:scroll; 失效解决(转)

    移动平台的活,兼容问题超多,今儿又遇到一个.客户要求在弹出层容器内显示内容,但内容条数过多,容器显示滚动条.按说是So easy,容器设死宽.高,CSS加属性 overflow:scroll; -we ...

  8. nodejs 实践:express 最佳实践(三) express 解析

    nodejs 实践:express 最佳实践(三) express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固, ...

  9. .NET Core 多框架支持(net45+netstandard20)实践中遇到的一些问题总结

    .NET Core 多框架支持(net45+netstandard20)实践中遇到的一些问题总结 前言 本文主要是关于.NET Standard 代码 在多框架 和 多平台 支持自己实践过程中遇到的一 ...

随机推荐

  1. http文件下载与404

    # http文件下载与404 if (!file_exists($file_path)) { header('HTTP/1.1 404 Not Found'); header("status ...

  2. Vue学习(三)-Vue-router路由的简单使用

    一.Vue-Router环境的安装: 如果使用vue-cli脚手架搭建,项目创建过程中会提示你自否选择使用vue-router,选择使用即可, 二.路由学习 1.路由的配置    vue-cli项目自 ...

  3. 从苏宁电器到卡巴斯基第27篇:难忘的三年硕士时光 V

    一发不可收拾 安全领域的公司都喜欢在看雪或者是吾爱破解这样的网站上发布招聘贴,因为这样的话很容易就能够招到适合的人才,也算是精准营销了.而像我这种想进入安全圈的,也会在这里发布自己的求职简历,以期望能 ...

  4. hdu1556 线段树段更新(简单题)

    题意: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个 ...

  5. CVE-2012-0158:Microsoft Office MSCOMCTL.ocx 栈溢出漏洞调试分析

    0x01 Lotus Blossom 行动 在 2015 年 6 月,国外安全厂商 Palo Alto Networks 的威胁情报团队 Unit42 发现了一起针对东南亚政府的一次间谍行为,试图获取 ...

  6. 实时计算框架:Flink集群搭建与运行机制

    一.Flink概述 1.基础简介 Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算.Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算.主要特性包 ...

  7. SQLyog连接数据库报错 plugin caching_sha2_password could not be loaded

    错误如图所示: 问题描述: 下载新版的 mysql 8.0.11 安装. 为了方便安装查看,我下载了sqlyog 工具 连接 mysql. 配置新连接报错:错误号码 2058 问题分析: mysql ...

  8. dubbo服务暴露原理-远程暴露

    1.与本地暴露相比,远程暴露也大同小异 我们已经到了第三个关键词Procotol我们来看看他的继承体系图 按照经典图的路线,我们下一个关键词应该就是Server了,从方法名openServer(url ...

  9. JavaScript 原始值与包装对象

    前言 随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript. 同时我也发现,有不少开发者对于 JavaScript 最基本的原始值和包装对象都没有很清晰的理解. ...

  10. Zookeeper详细使用解析!分布式架构中的协调服务框架最佳选型实践

    Zookeeper概念 Zookeeper是分布式协调服务,用于管理大型主机,在分布式环境中协调和管理服务是很复杂的过程,Zookeeper通过简单的架构和API解决了这个问题 Zookeeper实现 ...