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

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)

 

posted @ 2020-05-02 13:03  吴建明wujianming  阅读(558)  评论(0编辑  收藏  举报