视觉学习笔记之Opencv导入深度学习模型

前言

我的研究方向不是计算机视觉,这段时间开始的CV学习纯粹是出于兴趣,在此记录下自己的学习历程,也方便感兴趣的同伴一起学习。
我计划的学习入门步骤是这样的:
第一步
学会图像数据的预处理,常见的两个工具是Matlab和Opencv,这里我计划先学习Opencv。因为我比较习惯c++和c#的代码,所以更偏向于从c++版本的opencv开始学起。主要是C++预研编写,包含了500多个用于图像/视频处理和计算机视觉的通用算法,而且现在的opencv已经支持了深度学习的导入,可以把预训练的模型导入进来。这一步的学习只要电脑能够跑动VS2019等ide即可,opencv的c++库很多例程相对容易跑动。
第二步
Opencv的学习之后,掌握图像处理的基本学习,并了解了图像处理的基础知识,并且会使用OpenCV来实现某个简单的功能。但是之后,应该学习相关的论文,了解相关的算法,除了深度学习外,还有SLAM等相关的视觉算法,这些都是应学习的。
第三步
深入学习,按照自己的科研项目需求,选择合适的算法继续研究,并构建相关的环境。这一块,可能就考虑自己设备性能了,如计算机有一块性能够好的GPU,软件平台上,最好给电脑装上Ubuntu,然后安装 anaconda和pytorch,虽然这些也有windows版本,但是网上早期学习的资源多数围绕Linux系统,学习资源上更丰富,Ubuntu相对是最容易上手的Linux发行版。

目前,我还处于第一步,学习主要参照的是《OpenCV 4计算机视觉项目实战(原书第2版)》,所学习的代码也是来自于这本书。
这次主要学习的是opencv导入深度学习模型。

配置Opencv

opencv是一个开源的视觉代码框架,首先使用从官网下载的安装包来获取opencv的源代码。
官网上提供了多个版本的opencv,下载后运行其实就是个自解压文件:
在这里插入图片描述

建议解压后的文件夹按照opencv的版本号命名,以便同时配置和管理多个版本opencv,如下图opencv3.2.0和4.5.4版本同时放到了opencv文件夹,这样方便按需选取合适的opencv版本。
自解压后,以使用vc15为例,将*\build\x64\vc15\bin添加到环境变量里面,这样就配置完成了,里面都是一些相关的库文件,各个opencv的工程以后会需要使用到它们:
视觉学习笔记之Opencv导入深度学习模型_第1张图片

导入深度学习模型

opencv已经支持导入深度学习模型,这对于我们这样设备性能有限的人来讲帮助极大。书中第十二章导入的是yoloV3算法,随书的代码中没有包含这一算法的模型,需要自行下载。
下载地址是来自于《windows下的yolov3的运行及结果,实例所需的weights,cfg与names文件》。
主要获取的是算法相关的三个文件
yolov3.cfg、yolov3.weights、coco.names。
其中yolov3. weights个头最大,代表了训练后框架下的权重,是训练后最需要的数据;yolov3.cfg为配置文件;coco.names为标签,用以标记图片识别对象。
利用预先训练好的数据集yolov3.weight, yolo.cfg及标签coco.names,可以快速识别人物,动物,汽车等物体。

测试demo

Opencv的程序,以c++语言编写,这里使用的是书中的第12章demo,运行于VS2019。
首先是在VC++目录选项版上,配置头文件、库文件的路径(我的opencv装在d盘)
视觉学习笔记之Opencv导入深度学习模型_第2张图片
在链接器面板上,注意附加依赖项是lib文件
视觉学习笔记之Opencv导入深度学习模型_第3张图片

检验算法时,先导入网络,即将相关的数据文件yolov3.cfg、yolov3.weights、coco.names导入进去:
视觉学习笔记之Opencv导入深度学习模型_第4张图片

然后是将利用opencv导入图像,并对图像数据处理
视觉学习笔记之Opencv导入深度学习模型_第5张图片
接着是利用训练好的网络对图像数据分析:
视觉学习笔记之Opencv导入深度学习模型_第6张图片
这里主要体现的是神经网络的正向传播,即输入层到输出层,因为已经使用深度学习训练过了模型,所以无需反向传播。
最后将识别的结果显示:
视觉学习笔记之Opencv导入深度学习模型_第7张图片

辨识结果:
视觉学习笔记之Opencv导入深度学习模型_第8张图片
也算是跑通了第一个例子。

总结

这第一个跑通的程序中,首先明白的一点是opencv是一个框架,它负责导入图像,并对图像数据进行预处理,而后一个已经训练过的深度学习模型,可以对处理后的数据进行进一步分析,实现图像中的对象识别、定位等功能。

你可能感兴趣的:(深度学习,计算机视觉)