高大上的YOLOV3对象检测算法,使用python也可轻松实现

高大上的YOLOV3对象检测算法,使用python也可轻松实现,第1张

继续我们的目标检测算法的分享,前期我们介绍了SSD目标首樱检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装,本期我们简单介绍一下如何使用python来进行YOLOV3的对象检测算法

YOLOV3的基础知识大家可以参考往期文章,本期重点介绍如何使用python来实现

1、初始化模型

14-16 行:

模型的初始化依然使用cv下的DNN模型来加载模型,需要注意的是CV的版本需要大于3.4.2

5-8行:

初始化模型在coco上的label以便后期图片识别使用

10-12行:

初始化图片显示方框的颜色

2、加载图片,进行图片识别

输入识别的图片进行图片识别,这部分代码跟往期的SSD 以及RCNN目标检测算法类似

19-20行:输入图片,获取图片的长度与宽度

25-29行:计算图片的blob值,输入神经网络,进行前向反馈预测图片

只不过net.forward里面是ln, 神经网络的所有out层

3、遍历所有的out层,获取检测图片的label与置信度

遍历out层,获取检测到的label值以及置信度,检测到这里YOLOV3以及把所有的检测计算完成,但是由于yolov3对重叠图片或者靠的比较近的图片检测存在一定的问题,使用YOLOV3使用非最大值抑制来抑制弱的重叠边界

竟然把墨镜识别了手机,体现了YOLOV3在重叠图片识别的缺点

4、应用非最大值抑制来抑制弱的重叠边界,显示图片

56: 使用 非最大值抑制来抑制弱的重叠边界

58-59行:遍历所有图片

61-62行:提取检测图片的BOX

64-68行:显示图片信息

70-71行:显示图片

利用python来实现YOLOV3,与SSD 以及RCNN代码有很多类似的地方,大家可以参考往期的文章进行对比学习,把代码执行一遍

进行视频识别的思路:从视频中提取图片,进行图片识别,识别完成后,再把识别的结果实时体现在视频中,这部分代码结合前期的视频识别,大家可以参考多进程视频实时识别篇,因为没有多进程,检测速度很慢,视频看着比较卡

1、初始化模型以及视频流

2、从视频中提取图片吵余,进行图片的blob值计算,进行神经网络的预测

3、提取检测到图片的置信度以及ID值

4、 应用非最大值抑制来抑制弱的重叠边界,显示图片

5、关闭资源,显示图片处理信息

每个目标检测算法都有自己的优缺点,个人感觉,在精度要求不是太高的情况下SSD检测算法可以实现较快的速度实现,毕竟精者碰丛度差不多的情况下,我们希望速度越快越好

一、前期环境以及准备

1、安装python

在caffe中,python2和python3的接口都有。但frcnn中只能支持python2.7,所以千万不要装成python3。为了方便,不用自己去pip一大堆库,我建议安装anaconda2,里面已经安装了很多第三方的库。

另附python,Windows的第三方库 ,里面很全。或许有一些库你要去官网上下载。

2、安装(更新)显卡驱动和cuda

NVIDIA的显卡驱动安装应该不用我说了吧,到官网上下载吧。我要说明一点的是,我的1080ti在安装显卡驱动时,说和Windows不匹配。怎么解决呢?更新Windows,到官网上下驱动,再安装。成功!还有就是记得更新你的显卡驱动,以防老的驱动不支持cuda。

CUDA安装的话,也是傻瓜试的安装。提醒一点的是,不要改变他的安装路径,默认路径。然后去NVIDIA的官网上下载cudnn库,这个库的话需祥局李要去NVIDIA注册一个账号,然后问你用这个来腊腊完成什么工作之类的巴拉巴拉。这个库长什么样呢?下载完解压缩,得到一个cuda的文件夹,谨迟里面有3个文件夹

然后打开你的CUDA文件夹,默认路径是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

把cudnn库里面的3个文件夹里面的文件,分别加到cuda里面对应的文件夹。

然后打开cuda需要编译的部分,默认路径是C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0

因为我用的VS2015,那么我就用打开2015的那个,然后改成release运行。

至此,显卡计算的环境就搭建完成了。

3、cmake和git

cmake的话,我建议直接下载编译好的能运行的文件(到官网上下载),然后解压文件,把bin的路径添加到Path中。

git:因为frcnn里面有很多linux的脚本,你可以不用,但用的话会很方便的。所以我建议安装git。同样,傻瓜式的安装,直接到官网上下载。

二、py-faster-rcnn

1、编译caffe的python接口GPU版本(如果你编译过了就不用了)

因为frcnn的编译过程用需要用到python的caffe包,所以必须要先编译一次caffe。如果你已经编译过caffe的py接口就不用了。

下载微软的Caffe,git的地址

你可以用git直接下载,或者在git的地址里下载,随便你。

[plain] view plain copy

git clone

cd caffe

git checkout windows

打开caffe\scripts,然后编辑build_win.cmd文件

第7行的VERSION是你VS的版本,VS2015对应的是14,VS2013对应的应该是12;第8行改为0;第9行改为0(如果你不用GPU,那就还是1);13行的python_version是你的python版本,2.x就是2,3.x就是3;24,28行是你的python的安装目录,如果你是anaconda就改你的anaconda的目录,否则就不改。

同样69-95行同样修改。以上2张图是我的cmake文件配置。

进入caffe\scripts,打开cmd,直接执行build_win.cmd。注意他会自动下载需要的库,因为服务器呢都不在国内,所以我建议挂个VPN,不然你且等呢吧。

这样cmake后呢,python的接口就已经编译好了,不用再编译一遍了。把caffe\python下的caffe的文件夹copy到python的第三方包的文件夹就ok。

这样caffe的python接口就好了,你可以进cmd的python试一下import caffe。如果说,他提示少了什么包,你直接pip这个包就好了,找不到的话,百度一下就有。但只要你跟着上面我的方法做应该不会出现什么问题。

2、编译py-faster-rcnn依赖库

首先呢,我们先去编译一下frcnn的依赖库。Windows下,不能使用自带的lib,把自带的lib删了,重新下载,这里给出git的地址。

好了,现在你的库应该长成这样,有setup.py和setup_cuda.py。进cmd,install这2个文件。

现在你肯定会遇到问题,提示你VC版本不对

怎么办呢,先set一下:输入SET VS90COMNTOOLS=%VS140COMNTOOLS%,VS后面的数字就是你的版本。还有不要忘了把你VS的c1.exe加到path下。

编译好frcnn的依赖库后,应该是这个样子的。

3、给caffe加frcnn的层

现在,我们再下载一个caffe,跟前面一样,把build_win.cmd进行修改。然后我们就可以把frcnn的一些特有的层加到caffe里编译了。

1)添加层和文件

打开py-faster-rcnn\caffe-fast-rcnn\src\caffe\layers文件夹,找到4个文件分别为

然后copy到你新的caffe的对应文件夹caffe\src\caffe\layers里。

接着我们添加头文件,打开py-faster-rcnn\caffe-fast-rcnn\include\caffe,把fast_rcnn_layers.hpp这文件copy到caffe的对应文件夹下caffe\include\caffe。

2)配置2个新层

打开你的caffe\src\caffe\proto下的caffe.proto,进行编辑。

在407行左右

往原来的文件里添加新的层的配置信息

[plain] view plain copy

optional ROIPoolingParameter roi_pooling_param = 8266711

optional SmoothL1LossParameter smooth_l1_loss_param = 8266712

message ROIPoolingParameter {

// Pad, kernel size, and stride are all given as a single value for equal

// dimensions in height and width or as Y, X pairs.

optional uint32 pooled_h = 1 [default = 0]// The pooled output height

optional uint32 pooled_w = 2 [default = 0]// The pooled output width

// Multiplicative spatial scale factor to translate ROI coords from their

// input scale to the scale used when pooling

optional float spatial_scale = 3 [default = 1]

}

message SmoothL1LossParameter {

// SmoothL1Loss(x) =

// 0.5 * (sigma * x) ** 2-- if x <1.0 / sigma / sigma

// |x| - 0.5 / sigma / sigma -- otherwise

optional float sigma = 1 [default = 1]

}

3)cmake新的caffe的python接口

就是再执行一遍build_win.cmd就行。编译好之后,把caffe根目录下的python文件夹替换py-faster-rcnn\caffe-fast-rcnn的python文件夹。

三、demo

完成以上步骤你的py-faster-rcnn就已经编译成功了。如果你想用demo测试一下的话可以用.\data\scripts里的脚本去下载已经训练好的model,文件挺大的、速度挺慢的。所以给大家提供一个百度5,把caffemodel文件放在data\faster_rcnn_models,然后执行tools\demo.py就能看到结果了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12335585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存