头图

本教程的知识点为:深度学习介绍 1.1 深度学习与机器学习的区别 TensorFlow介绍 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 TensorFlow介绍 1.2 神经网络基础 1.2.1 Logistic回归 1.2.1.1 Logistic回归 TensorFlow介绍 总结 每日作业 神经网络与tf.keras 1.3 神经网络基础 神经网络与tf.keras 1.3 Tensorflow实现神经网络 1.3.1 TensorFlow keras介绍 1.3.2 案例:实现多层神经网络进行时装分类 神经网络与tf.keras 1.4 深层神经网络 为什么使用深层网络 1.4.1 深层神经网络表示 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么需要卷积神经网络 原因之一:图像特征数量对神经网络效果压力 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么需要卷积神经网络 原因之一:图像特征数量对神经网络效果压力 卷积神经网络 2.2案例:CIFAR100类别分类 2.2.1 CIFAR100数据集介绍 2.2.2 API 使用 卷积神经网络 2.4 BN与神经网络调优 2.4.1 神经网络调优 2.4.1.1 调参技巧 卷积神经网络 2.4 经典分类网络结构 2.4.1 LeNet-5解析 2.4.1.1 网络结构 卷积神经网络 2.5 CNN网络实战技巧 2.5.1 迁移学习(Transfer Learning) 2.5.1.1 介绍 卷积神经网络 总结 每日作业 商品物体检测项目介绍 1.1 项目演示 商品物体检测项目介绍 3.4 Fast R-CNN 3.4.1 Fast R-CNN 3.4.1.1 RoI pooling YOLO与SSD 4.3 案例:SSD进行物体检测 4.3.1 案例效果 4.3.2 案例需求 商品检测数据集训练 5.2 标注数据读取与存储 5.2.1 案例:xml读取本地文件存储到pkl 5.2.1.1 解析结构

完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学...

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

卷积神经网络

总结

每日作业

商品物体检测项目介绍

1.1 项目演示

学习目标

  • 目标

    • 了解项目的演示结果
  • 应用

1.1.1 项目演示

项目已经部署上线,Web端演示

1.1.2 项目结构

业务逻辑

1.1.3 项目知识点

  • 神经网络
  • 卷积网络
  • TensorFlowAPI操作
  • RCNN以及相关算法
  • YOLO与SSD
  • 算法接口介绍
  • 数据集标记格式
  • 数据集存储与读取
  • 数据接口实现
  • 模型接口实现
  • 训练、设备部署逻辑实现
  • 测试接口
  • TensorFlow serving部署模型
  • Web server+TensorFlow serving Client

1.2 开发环境搭建

学习目标

  • 目标

  • 应用

    • 开发环境搭建

1.2.1 安装

1.2.1.1 虚拟环境安装

我们这里选择virtualenv,可以选择anaconda安装(查阅资料解决安装)

linux下先安装:

sudo apt-get update
sudo apt-get install python3-dev python3-pip

mac先安装:

使用 Homebrew 软件包管理器进行安装:
brew update
brew install python  # Python 3
  • 1、现在虚拟环境管理工具, 环境隔离(python3版本))
sudo pip3 install -U virtualenv
  • 2、配置参数,创建一个virtualenv的文件夹
export WORKON_HOME=$HOME/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
  • 3、新建虚拟环境
mkvirtualenv + -p  /user/bin/python(python版本所在位置) + test(虚拟环境名称)
  • 4、进入虚拟环境
workon tf

1.2.1.2 安装环境包

安装 TensorFlow在64 位系统上测试这些系统支持 TensorFlow:

  • Ubuntu 16.04 或更高版本
  • Windows 7 或更高版本
  • macOS 10.12.6 (Sierra) 或更高版本(不支持 GPU)

进入虚拟环境当中再安装。刚开始的环境比较简单,只要下载tensorflow即可

  • 环境包:
pip install tensorflow==1.12

注:如果需要下载GPU版本的(TensorFlow只提供windows和linux版本的,没有Macos版本的)参考官网[

1、虚拟机下linux也是用不了GPU版本TensorFlow

2、本机单独的windows和本机单独的unbuntu可以使用GPU版本TensorFlow,需要安装相关驱动

1.2.1.3 pycharm安装

  • 1、免费版本:可以去选择社区版本:[
  • 2、专业收费版本:老师们可以用教育邮箱申请专业版

3.2 目标检测任务描述

学习目标

  • 目标

    • 了解目标检测算法分类
    • 知道目标检测的常见指标IoU
    • 了解目标定位的简单实现方式
  • 应用

3.2.1 目标检测算法分类

  • 两步走的目标检测:先进行区域推荐,而后进行目标分类

    • 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN
  • 端到端的目标检测:采用一个网络一步到位

    • 代表:YOLO、SSD

3.2.2 目标检测的任务

3.2.2.1 分类原理回顾

先来回归下分类的原理,这是一个常见的CNN组成图,输入一张图片,经过其中卷积、激活、池化相关层,最后加入全连接层达到分类概率的效果

  • 分类的损失与优化

在训练的时候需要计算每个样本的损失,那么CNN做分类的时候使用softmax函数计算结果,损失为交叉熵损失

  • 常见CNN模型

对于目标检测来说不仅仅是分类这样简单的一个图片输出一个结果,而且还需要输出图片中目标的位置信息,所以从分类到检测,如下图标记了过程:

  • 分类

  • 分类+定位(只有一个对象的时候)

  • 目标检测

![]()

3.2.2.2 检测的任务
  • 分类:

    • N个类别
    • 输入:图片
    • 输出:类别标签
    • 评估指标:Accuracy

  • 定位:

    • N个类别
    • 输入:图片
    • 输出:物体的位置坐标
    • 主要评估指标:IOU

其中我们得出来的(x,y,w,h)有一个专业的名词,叫做bounding box(bbox).

3.2.2.4 检测的评价指标
任务description输入输出评价标准
Detection and Localization (检测和定位)在输入图片中找出存在的物体类别和位置(可能存在多种物体)图片(image )类别标签(categories)和 位置(bbox(x,y,w,h))IoU (Intersection over Union) mAP (Mean Average Precision)
  • IoU(交并比)

    • 两个区域的重叠程度overlap:侯选区域和标定区域的IoU值

3.2.2.3 两种Bounding box名称

在目标检测当中,对bbox主要由两种类别。

  • Ground-truth bounding box:图片当中真实标记的框
  • Predicted bounding box:预测的时候标记的框

一般在目标检测当中,我们预测的框有可能很多个,真实框GT也有很多个。

3.2.4 目标定位的简单实现思路

在分类的时候我们直接输出各个类别的概率,如果再加上定位的话,我们可以考虑在网络的最后输出加上位置信息。

3.2.4.1 回归位置

增加一个全连接层,即为FC1、FC2

  • FC1:作为类别的输出
  • FC2:作为这个物体位置数值的输出

假设有10个类别,输出[p1,p2,p3,...,p10],然后输出这一个对象的四个位置信息[x,y,w,h]。同理知道要网络输出什么,如果衡量整个网络的损失

  • 对于分类的概率,还是使用交叉熵损失
  • 位置信息具体的数值,可使用MSE均方误差损失(L2损失)

如下图所示

3.2.5 总结

  • 掌握目标检测的算法分类
  • 掌握分类,分类与定位,目标检测的区别
  • 掌握分类与定位的简单方法、损失衡量

商品物体检测项目介绍

3.3 R-CNN

学习目标

  • 目标

    • 了解Overfeat模型的移动窗口方法
    • 说明R-CNN的完整结构过程
    • 了解选择性搜索
    • 了解Crop+Warp的作用
    • 知道NMS的过程以及作用
    • 了解候选区域修正过程
    • 说明R-CNN的训练过程
    • 说明R-CNN的缺点
  • 应用

对于一张图片当中多个目标,多个类别的时候。前面的输出结果是不定的,有可能是以下有四个类别输出这种情况。或者N个结果,这样的话,网络模型输出结构不定

所以需要一些他的方法解决目标检测(多个目标)的问题,试图将一个检测问题简化成分类问题

3.3.1 目标检测-Overfeat模型

3.3.1.1 滑动窗口

目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口。如下图所示:

这样就变成每张子图片输出类别以及位置,变成分类问题。但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应的框不一样,所以需要提前设定K个窗口,每个窗口滑动提取M个,总共K x M 个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入 CNN 分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。

那这种方法是怎么去利用数据训练的?

3.3.1.2 训练数据集

首先我们会准备所需要的训练集数据,每张图片的若干个子图片以及每张图片的类别位置,如下我们从某张图片中滑动出的若干的图片。

3.3.1.3 Overfeat模型总结

这种方法类似一种暴力穷举的方式,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不准确

。但是提供了一种解决目标检测问题的思路

3.3.2 目标检测-R-CNN模型

在CVPR 2014年中Ross Girshick提出R-CNN。

3.3.2.1 完整R-CNN结构

不使用暴力方法,而是用候选区域方法(region proposal method),创建目标检测的区域改变了图像领域实现物体检测的模型思路,R-CNN是以深度神经网络为基础的物体检测的模型 ,R-CNN在当时以优异的性能令世人瞩目,以R-CNN为基点,后续的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着这个物体检测思路。

  • 步骤(以AlexNet网络为基准)

    • 1.找出图片中可能存在目标的侯选区域region proposal
    • 2.进行图片大小调整为了适应AlexNet网络的输入图像的大小227×227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成2000×4096维矩阵
    • 3.将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000×20维矩阵
    • 4.分别对2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum suppression)剔除重叠建议框,得到该列即该类中得分最高的一些建议框
    • 5.修正bbox,对bbox做回归微调
3.3.2.2 候选区域(了解)

选择性搜索(SelectiveSearch,SS)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。

SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。 而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

3.3.2.3 Crop+Warp(了解)

传统的CNN限制了输入必须固定大小,所以在实际使用中往往需要对原图片进行crop或者warp的操作

  • crop:截取原图片的一个固定大小的patch
  • warp:将原图片的ROI缩放到一个固定大小的patch

无论是crop还是warp,都无法保证在不失真的情况下将图片传入到CNN当中。会使用一些方法尽量让图片保持最小的变形。

  • 1.各向异性缩放:即直接缩放到指定大小,这可能会造成不必要的图像失真
  • 2.各向同性缩放:在原图上出裁剪侯选区域, (采用侯选区域的像素颜色均值)填充到指定大小在边界用固定的背景颜色

3.3.2.4 CNN网络提取特征

在侯选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。

提取的这些特征将会保存在磁盘当中(这些提取的特征才是真正的要训练的数据

3.3.2.5 特征向量训练分类器SVM

假设一张图片的2000个侯选区域,那么提取出来的就是2000 x 4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)。那么最后需要对这些特征进行分类,R-CNN选用SVM进行二分类。假设检测N个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000, 20]的得分矩阵,如下图所示

  • 每个SVM分类器做的事情

    • 判断2000个候选区域是某类别,还是背景
3.3.2.6 非最大抑制(NMS)
  • 目的

    • 筛选候选区域,得到最终候选区域结果
  • 迭代过程

    • 对于所有的2000个候选区域得分进行概率筛选
    • 然后对剩余的候选框,每个类别进行IoU(交并比)>= 0.5 筛选

假设现在滑动窗口有:A、B、C、D、E 5个候选框,

  • 第一轮:假设B是得分最高的,与B的IoU>0.5删除。现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果
  • 第二轮:AC中,A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果

最终结果为在这个5个中检测出了两个目标为A和B

3.3.2.7 修正候选区域

那么通过非最大一直筛选出来的候选框不一定就非常准确怎


程序员一诺python
16 声望17 粉丝

python技术发烧友 资料收集狂