Mask_RCNN入门(三)—— 使用gpu进行训练和测试

cpu换成gpu

之前的工作:
Mask_RCNN入门(一)—— 跑通代码
Mask_RCNN入门(二)—— 训练自己的数据集
其实是在CPU上跑的,这一点可以在requirements.txt中可以看到:
在这里插入图片描述
tensorflow就是CPU版,GPU版本是tensorflow-gpu。
所以第一步是卸载tensorflow,安装tensorflow-gpu,为了避免兼容性冲突,tensorflow-gpu同样使用1.6.0版本。
卸载tensorflow:

python -m pip uninstall tensorflow

安装tensorflow-gpu:

python -m pip install tensorflow-gpu==1.6.0

driver,CUDA,cuDNN和tensorflow-gpu

安装完tensorflow-gpu之后,如果直接运行demo.py或者train.py会报错:ImportError: Could not find 'cudart64_90.dll’
在这里插入图片描述
其实信息明确了,到指定网址下载安装CUDA 9.0。
这里开一下上帝视角:CUDA,包括后面同样会报错需要下载的cuDNN,它们是什么,还有和CUDA版本紧密相关的显卡驱动又是什么?

driver

这个最好理解,这个和键盘驱动,鼠标驱动,打印机驱动等等没本质区别,计算机(确切地说是CPU)与外设(这个外设是广义的,显卡也算在内)的任何通信都要统一好接口,而驱动就是硬件统一CPU和外设通信的接口,以驱动程序的形式呈现。
对于一个显卡驱动是自动安装好了的,不然我们连开机画面都没,这个不用多说,关于驱动的版本可以看这里:
电脑 —— 属性 —— 管理 —— 设备管理器 —— 显示适配器,双击,选择“驱动程序”:
在这里插入图片描述
但其实只用看倒数第一个小数点往左的第一个数字开始,一直到结尾部分,对于上图来说,即:411.31
如果了解nvidia-smi命令的话(使用前要将其目录添加进环境变量,具体可见我的另外一个文章:nvidia-smi命令),可以使用它快速查看:
在这里插入图片描述
值得注意的是,显卡支持的驱动是一直在更新的。

CUDA

CUDA全称Compute Unified Device Architecture,NVIDIA推出的显卡并行计算框架,这看名字大概也知道什么意思。更为专业性的知识这里也不多说(我也不懂),反正知道tensorflow-gpu的运行需要它的底层支持就够了,但是,它是一个计算框架,抽象层次比驱动高,每个版本的CUDA都是基于一定版本的驱动建立的,所以它对驱动的最低版本是有要求的(应该就是写它的时候那个版本),具体要求可见:CUDA对显卡驱动版本的要求,BTW:

  1. 很多教程在安装CUDA和cuDNN时不怎么提驱动的事,但是这也是一个隐藏坑:万一你的显卡比较老就会报错:CUDA driver version is insufficient for CUDA runtime version:
    在这里插入图片描述
    其实这个CUDA runtime就是显卡驱动。
  2. NVIDIA下载特定版本的地址:NVIDIA 驱动程序下载
cuDNN

cuDNN全称The NVIDIA CUDA Deep Neural Network library,即基于CUDA架构的神经网络库,这是专门用于神经网络计算的加速包,这可以看做是CUDA的一部分(并行计算框架下的一个包),这从cuDNN实际安装过程 —— 解压放入CUDA安装目录对应的子文件夹也能看出来。
所以cuDNN和CUDA的版本肯定是有对应关系的,这一点在官网下载cuDNN时可以看到:CUDA和cuDNN对应关系

tensorflow-gpu

tensorflow-gpu本身不多说,但是tensorflow-gpu的运行需要用到CUDA框架,特别是cuDNN库(神经网络加速包),就像CUDA是基于特定版本驱动构建的一样,tensorflow-gpu也是调用的也是特定版本的CUDA,二者的对应关系可见:tensorflow-gpu和CUDA的关系

关系图

在这里插入图片描述
先说明一下图中情况:

  • driver决定了CUDA的版本
  • CUDA决定了cuDNN版本
  • CUDA决定了tensorflow-gpu版本,可见tensorflow-gpu和CUDA的关系
  • tensorflow-gpu基于一定版本的python,这在tensorflow-gpu和CUDA的关系中也能看出
  • 如果在算法中还要用到Keras,那么tensorflow-gpu和Keras也有约束关系
    详见:tensorflow-gpu和Keras版本兼容性


    在实操中,一般采用自上而下的确定方式:
  • 确定python版本
  • 确定项目的tensorflow-gpu版本
  • 确定CUDA版本,从而确定cuDNN版本,更新驱动版本

安装CUDA

回到之前的问题:
在这里插入图片描述
接下来安装cuda 9.0
在这里插入图片描述
一路next,命令行nvcc -V验证:
在这里插入图片描述
BTW:
① 网络教程很多要设置环境变量,单经实测,安装过程中会自动添加,不用手动添加。
② 一台机器可以同时安装多个版本CUDA,不矛盾。

cuDNN 7

再次运行demo.py,继续报错:
在这里插入图片描述
cuDNN官方地址下载,不过这回要注册用户:
在这里插入图片描述
join now,注册用户,giaogiaogiao

这里下载:
在这里插入图片描述

下载,解压,三个文件分别放入cuda对应文件夹(其实就是手动给cuda安装cuDNN模块):

  1. 把cuda\bin\cudnn64_7.dll复制到 C:\Program Files\NVIDIA GPU Computing\Toolkit\CUDA\v9.0\bin 目录下
  2. 把\cuda\ include\cudnn.h复制到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include 目录下
  3. 把\cuda\lib\x64\cudnn.lib复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64 目录下


    运行,搞定!
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
卷积神经网络(Convolutional Neural Network, CNN)是一种专门针对图像、视频等结构化数据设计的深度学习模型,它在计算机视觉、语音识别、自然语言处理等多个领域都有广泛应用。CNN的核心设计理念源于对生物视觉系统的模拟,尤其是大脑皮层中视觉信息处理的方式,其主要特点包括局部感知、权重共享、多层级抽象以及空间不变性。以下是CNN技术的详细介绍: ### **1. 局部感知与卷积操作** **卷积层**是CNN的基本构建块,它通过使用一组可学习的滤波器(或称为卷积核)对输入图像进行扫描。每个滤波器在图像上滑动(卷积),并以局部区域(感受野)内的像素值与滤波器权重进行逐元素乘法后求和,生成一个输出值。这一过程强调了局部特征的重要性,因为每个滤波器仅对一小部分相邻像素进行响应,从而能够捕获图像中的边缘、纹理、颜色分布等局部特征。 ### **2. 权重共享** 在CNN中,同一滤波器在整个输入图像上保持相同的权重(参数)。这意味着,无论滤波器在图像的哪个位置应用,它都使用相同的参数集来提取特征。这种权重共享显著减少了模型所需的参数数量,增强了模型的泛化能力,并且体现了对图像平移不变性的内在假设,即相同的特征(如特定形状或纹理)不论出现在图像的哪个位置,都应由相同的滤波器识别。 ### **3. 池化操作** **池化层**通常紧随卷积层之后,用于进一步降低数据维度并引入一定的空间不变性。常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和池化层堆叠在一起,形成深度网络结构。随着网络深度的增加,每一层逐渐提取更复杂、更抽象的特征。底层可能识别边缘、角点等低级特征,中间层识别纹理、部件等中级特征,而高层可能识别整个对象或场景等高级语义特征。这种层级结构使得CNN能够从原始像素数据中自动学习到丰富的表示,无需人工设计复杂的特征。 ### **5. 激活函数与正则化** CNN中通常使用非线性激活函数(如ReLU、sigmoid、tanh等)来引入非线性表达能力,使得网络能够学习复杂的决策边界。为了防止过拟合,CNN常采用正则化技术,如L2正则化(权重衰减)来约束模型复杂度,以及Dropout技术,在训练过程中随机丢弃一部分神经元的输出,以增强模型的泛化性能。 ### **6. 应用场景** CNN在诸多领域展现出强大的应用价值,包括但不限于: - **图像分类**:如识别图像中的物体类别(猫、狗、车等)。 - **目标检测**:在图像中定位并标注出特定对象的位置及类别。 - **语义分割**:对图像中的每个像素进行分类,确定其所属的对象或背景类别。 - **人脸识别**:识别或验证个体身份。 - **图像生成**:通过如生成对抗网络(GANs)等技术创建新的、逼真的图像。 - **医学影像分析**:如肿瘤检测、疾病诊断等。 - **自然语言处理**:如文本分类、情感分析、词性标注等,尽管这些任务通常结合其他类型的网络结构(如循环神经网络)。 ### **7. 发展与演变** CNN的概念起源于20世纪80年代,但其影响力在硬件加速(如GPU)和大规模数据集(如ImageNet)出现后才真正显现。经典模型如LeNet-5用于手写数字识别,而AlexNet、VGG、GoogLeNet、ResNet等现代架构在图像识别竞赛中取得突破性成果,推动了CNN技术的快速发展。如今,CNN已经成为深度学习图像处理领域的基石,并持续创新,如引入注意力机制、残差学习、深度可分离卷积等先进思想。 综上所述,卷积神经网络通过其独特的局部感知、权重共享、多层级抽象等特性,高效地从图像数据中提取特征并进行学习,已成为解决图像和视频处理任务不可或缺的工具,并在众多实际应用中取得了卓越的效果。
mask_rcnn是一种广泛应用于计算机视觉领域的模型,它是在Faster RCNN基础上进行改进得到的。COCO2017是代表微软公司在2017年推出的一个大规模目标检测、分割和关键点检测数据集。 mask_rcnn模型结合了目标检测、实例分割和语义分割的功能,能够检测图像中的多个目标并准确地对每个目标进行分割。在训练过程中,mask_rcnn通过对每个RoI(Region of Interest)应用ROI Align操作,将特征图映射到固定大小的特征图上,然后通过RPN(Region Proposal Network)生成ROIs,并对生成的ROIs进行分类、边界框回归和掩码预测。 COCO2017数据集是一个非常庞大的数据集,包含超过150,000张标记的图像,共80个不同的类别。这些图像涵盖了各种场景,如人、动物、交通工具等。COCO2017数据集在目标检测、分割和关键点检测任务上提供了丰富的标注信息,使得模型能够学习不同类别的目标的特征。 使用mask_rcnn模型在COCO2017数据集上进行训练可以有效地改善图像识别、目标检测和分割任务的性能。通过在训练过程中引入语义分割和掩码预测,mask_rcnn能够更好地理解图像中不同目标的空间关系,从而提供更准确的目标检测和分割结果。此外,COCO2017数据集的丰富标注信息能够帮助模型更好地学习各个类别目标的特征,提高模型在实际场景中的适用性。 总体而言,mask_rcnn模型结合COCO2017数据集可提供更好的目标检测、分割和关键点检测能力,为计算机视觉领域的各种应用提供了强有力的支撑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值