先上图啊~
图中看的出来,我自定义了三种 目标:1、卤鸭掌,2、蘑菇力 3、炫迈
FPS8.9-13 根据GPU的不同而处理效果不同,1080ti可达到25-30fps
现实步骤如下:
1、下载darknet-master ()如果您访问受限制或者下载太慢,可以由此链接下载
2、选取正确的cuda9.1和cudnn7.0并下载(nivda官网开发者社区有,不过cudnn7.0的下载界面在维护,百度一下,资源就有)
这里我选取的版本为
3、安装cuda9.1,除非高手,否则请务必按照默认路径安装
4、将cudnn7.0压缩包解压后的文件复制到cuda9.1安装目录的对应位置。
即将解压后的文件夹中的cndnn64_7.dll、cudnn.h、cudnn.lib分别复制到
C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin
C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v9.1\include
C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v9.1\lib\x64
5、配置cudnn在windows的环境变量
6、下载安装opencv3.4.0 winpack版(注意:3.4.1会存在bug,不推荐使用,可以使用较低版本)并解压安装到c盘 下,命名为Opencv,如果你安装正确,应当在c盘下看到与我相似的目录,如下图
7、对darknet进行编译,在步骤1中下载解压得到的文件夹中打开build文件夹
再进入到下图所示目录
进入到darknet目录之后打开.vcxproj文件或者.sln文件 如果你的vs不是vs2015,而是更高版本的2017,打开时会提示两个是否升级的提示框, 本千万别点升级(当然,前提是在vs2017中安装好2015版本的工具集v140),否则会出现巨多错误。另外注意,我们用到了GPU所以不能选择_no_gpu的版本
然后你需要找到自己所对应版本的oepncv的相关几个dll文件,----------------------------------------------------------------------
opencv_world320.dll
and opencv_ffmpeg320_64.dll
(or opencv_world340.dll
and opencv_ffmpeg340_64.dll
) in C:\opencv_3.0\opencv\build\x64\vc14\bin
and put it near with darknet.exe
复制到darknet-master2\darknet-master\build\darknet\x64这个目录中去,因为这个目录默认是darknet.exe产生的位置
接下来 配置属性表以配置包含opencv附加库目录、cudnn包含头文件等等。方法在github的截图如下,我就不翻译了,偷个懒,好开心~
唯一要注意的地方,是把红框中的两处改为自己opencv版本的路径
8.进行build ,生成 exe文件
9.对自己的样本图片进行标注 标注的目标是得到一个 包含目标物体图片样本 的txt描述文件 去 “喂”给神经网络, 这个txt描述文件包含的内容有: 目标的高度、宽度 ;目标所在的照片的高度、宽度,
就是这四项 :
当然,这四项都是以比例的方式出现的 ,计算公示如下:
or
这样,我们为每一个样本照片 都创建一个 txt描述文件,我们需要保证txt文件和照片同名,比如:有一个样本照片为img1.jpg,那么你就需要在你的另一个文件夹里创建一个 名为img1.txt的文件。如果你为每个照片都做了这样的操作, 你会 得到和我类似的一个文件夹 ,如下所示:
那么,这些 txt文件是如何得到的呢?
我是这样做的, 用一个比较普遍的标注工具 叫 LabelImg
用它,我们可以将每个照片中的目标信息提取出来,提取出来之后会得到一个xml文件 ,如下图所示
那么,这个xml包含了我们所需的txt文件中的一切, 那么我们需要做的就是用python 快速准确地将这个 xml文件中的信息提取,并写入到同名的txt文件中去,python 代码如下:
有三个py文件组成,三个文件如下图所示