计算机视觉基础入门课程(从算法到实战应用)

开课时间:1月1日正式开课,每周定时更新
开课时长:24个课时,12次课

计算机视觉概述和深度学习简介

• 1. 计算机视觉回顾
定义:计算机视觉(computer vision)是从图像和视频中提出数值或符号信息的计算系统,更形象一点说,计算机视觉是让计算机具备像人类一样的眼睛,看到图像,并理解图像。

主要内容:

图像识别 image classification

eg:车牌识别,人脸识别

目标检测 object detection=classification + localization(图像识别的进一步发展)

eg:行人检测,车辆检测

分割:图像语义分割,个体分割=检测+分割

视觉目标跟踪(Tracking)

视频分割

图像风格迁移

生成对抗网络(GAN)

如何实现直播换脸

视频生成(应用无人驾驶,电影拍摄)

• 2.深度学习简介
• 3.课程介绍

本课程将系统的介绍计算机视觉的图像识别,目标检测,图像和视频分割,目标跟踪,图像和视频生成。并结合深度学习讲解实现这些任务需要的算法,模型以及实战应用。
图像识别:
Alexnet, VGGnet, GoogleNet, ResNet, RetinaNet
目标检测:
Fast-rcnn, faster-rcnn, Yolo, Retina-Net
图像分割:
FCN,Mask-Rcnn
目标跟踪:
GOTURN, ECO
图像生成:
GAN,WGAN
光流:
FlowNet
视频分割:
Segnet

 

 

[展开全文]

 卷积神经网络

AlexNet,VGGNet,GoogleNet,ResNet

卷积、池化、全连接、softmax

VGGNet层数更多,VGG16具有16个权重层

VGGNet中采用3x3代替AlexNet中的11x11,两个3x3的滤波器等价于一个5x5的滤波器,((w-3)/1+1-3)=(w-5)/1+1,但是需要学习的参数变少了。feature map的尺寸不断减小,但是个数增多。

GoogleNet更深,没有全连接层,参数减少。增减inception模块,用横向扩展取代纵向加深。

ResNet:学习的是期望的输出与输入之间的残差。能够只能增加到很深的层数。

训练技巧、防止过拟合:

1、数据增强:水平翻转、随机裁剪和平移、颜色、光照变换

2、Dropout

3、 L1、L2正则化

4、Batch Normalization 批归一化

 

[展开全文]

主要内容:

1图像分类

2神经网络原理

3卷积神经网络介绍

4利用caffe搭建深度学习网络做图像分类

 

计算机理解图片

图像分类:识别图像目标,

类内变化,形变,光照变化,形态,尺度,

图像分类定义:y=f(x)

y:输出

f:预测函数

x:图像特征

利用训练集获得f

对于函数的能力衡量标准泛化能力(对于同一事物图像不同形态与状态也能识别)

图像提取特征+标签->训练->分类器

测试内容提取特征->分类器->预测

图像特征:颜色(RGB),全局形状(PCA?),局部特征,纹理,SIFT(图像分类,图像匹配),HoG(目标检测,目标跟踪),LBP(人脸分类),Harr(目标形状)

推荐网站:www.vlfeat.org

SVM(支持向量机)最优超平面

最大化间隔,点到面的距离

CNN特征,学习出来的,需要构造神经网络进行图像分类

神经网络搭建,一层一层堆起来的,基本单位为神经元,权重叠加。激励函数有很多可以,模拟神经元的非线性函数

卷积网络,卷积层,卷积核,卷积滤波计算,输出的尺寸=(输入尺寸+2*  填充元素个数-卷积核大小)/步长+1

可以得到底层的特征,中层特征和高层特征,特征的叠加

池化层,通道不变,缩小图像大小,压缩取最大,特征表达更加紧凑,同时具有位移不变性。

全连接层,矩阵乘积

损失函数,交叉熵损失函数,应用于二分类问题

softmax损失函数,多分类问题

欧式距离损失函数,回归问题

对比损失函数,计算两个图象之间的相似度,image match

triplrt loss ?

 

 

 

 

 

 

[展开全文]

lesson23 目标跟踪原理与算法

 

1. 目标跟踪: 是对视频序列中单个或者多个目标进行定位的过程.

单目标跟踪, 多目标跟踪(主要是行人)

 

2. 目标跟踪的应用: 

智能监控(异常检测-人与人的交互情况)

无人驾驶

人机交互

医学图像分析

 

3. 目标跟踪问题描述(建模)

给定初始帧目标的位置, 或者通过检测的方法获得第一帧多个目标的位置, 然后估计出次后每一帧目标的位置.

 

一. 单目标跟踪

4. 单目标问题 是 one-shot learning的问题,

没有先验知识, 只有第一帧的信息, 正样本就是目标区域,负样本随机画框采样目标区域外的框.

5. 单目标跟踪流程

目标初始化 -> 外观建模 ->状态估计

卡尔曼滤波, 粒子滤波, TLD算法, L1跟踪算法...

6. 评价指标

1) 基于overlap ratio的 area under curve,  IOU

2) distance precison 距离精度

 

7. 常见测试数据集

单目标跟踪: OTB(国内),  VOT(update)

多目标跟踪: MOT(对接真实场景)

 

8. 单目标跟踪算法的主要流程:

> 起始帧 

> 运动建模 (采样, 密集\采样/随机采样/循环采样)

>特征提取 (HoG, color name, Harr, CNN特征)

>观测模型 (SVM, adaboost, correlation filter)

> ensemble

> final prediction 预测下一帧目标位置

9. 单目标常用算法

1) TLD算法: Tracking - Learning - Detection 基于检测, 滑窗

跟/踪器, 检测器, 学习模块

2) KCF: 核相关滤波器

KCF 将目标跟踪看做是一个回归问题, 循环采样, 核技巧.

速度快, 效果好.

3) 深度学习的算法:  HCFT,   ECO(有效卷积)

 

 

 

 

 

 

 

 

 

 

[展开全文]

lesson25笔记 - 基于视频分析与理解 的高级视觉任务

 

1. 基于视频分析与理解 的高级视觉任务 Tasks:

视频动作检测/识别(action detection/recognize)

视频描述(video caption(description))

 

2. Human action: 具有特定语义含义的人类/物体动作的集合.

Action analysis: recognition(分类)  , decetion(场视频中的分段label)

3. 应用: 视频贴标签,  城市安防,  智能生活(机器人/智能空调手势)

4. 主要dataset:Hollywood/2  HMDB51  UCF101

5. 困难和挑战

6. 动作检测的一般传统方法:feature extraction-> feature encoding ->feature pooling, kmeans聚类到bag-of-words -> SVM classifier

7. 提升性能的关键: 特征提取, 特征pooling

 

8. 基于深度学习的动作分析方法

双路模型: fovea stream,  context stream

几种特征融合的方法 

9. 利用光流表征运动信息

 

 

 

[展开全文]

lesson22笔记- 深度学习在序列数据中的应用 之 光流

 

1.序列分析的另外的方法:  光流 optical flow

 

光流, 是空间运动物体在观察成像平面上的像素运动的瞬时速度.

 

2. 光流计算:

寻找上一帧 和当前帧之间存在的对应关系, 

计算出相邻帧之间物体的运动信息.

动作识别:  raw frames + optical flow ,分别训练cnn feature, 进而feature aggregation(pooling/ lstm), 最后叠加两个.

动作识别 -> 原始图片+光流, 是比较共识的好的架构.

 

3. Flownet,  来大幅提高 光流计算缓慢的问题.

FlowNetSimple : conv 多个 -> refinement 网络(有hybird)  -> prediction

FlowNetCorr:  2个分支conv -> corr合并 -> conv多个 -> refinement网络(有hybird) -> prediction

 

refinement网络:  deconv(扩大)

 

4. flownet 代码地址 

flownet就是逼近传统光流计算.

 

 

 

[展开全文]

lesson21笔记- 深度学习在序列数据中的应用

 

1. 序列分析对应的是(单张)图像分析.

图像分析回顾:  图像分类, 目标检测, 图像分割.

特点是 one to one

1) 固定大小输入

2) 固定大小输出

3) 固定模型结构

4) 局部卷积层

 

2) 序列分析初探:

模型结构不是 one2one,

而是更多, 

one2many - 图像标注(label是多个语义单词), 

many2one - 动作识别(label是单个语义单词),

many2many(处理层的cell>输入的cell) -  机器翻译, 视频标注(解说), 

many2many(另外的架构, 处理层的cell=输入的cell) -  动作是必然(帧级别), 每个输入都有一个输出.

 

一.

2. 序列分析的主要工具是:RNN

RNN 在空间上展开为链状结构;

RNN存在的问题: 梯度消失, 长期依赖. 因为迭代相同的w权重.

3. 解决RNN的梯度问题 --  LSTM

LSTM可一定程度上解决梯度问题;

LSTM可以脊柱长时间内的信息;

LSTM使用门(gate) 结构 :

1) 细胞状态( cell state) , 水平最上的轴

2) 门(gate) , 控制进入出,过滤信息.

    a) 遗忘门forget gate (乘法入细胞状态): 决定细胞状态需要丢弃的部分;

    b) 输入门input gate (加法入细胞状态): 决定让多少新的信息加入到细胞状态中来  * 产生新的备选细胞状态

     c) 细胞状态更新 : 

 遗忘门forget gate (乘法入细胞状态) + 输入门input gate (加法入细胞状态)

     d) 输出门output gate : 

决定输出哪些细胞状态  * 只输出我们希望输出的细胞状态

LSTM梯度能传播超过80个节点

 

4 序列问题的实例 LSTM 图像标注

    START不做输入, 作为开始的标记;

    CNN作为v 输入到h0;

    最后输出END

5. LSTM扩展1 - attention LSTM

在LSTM网络基础上加入attention机制

    动作识别

    多物体识别

    生成门牌号

6. LSTM扩展2 - ConvLSTM

全连接的相乘, 改为卷积

降雨预测

 

二.

7. 序列分析的另外的方法: C3D

3D卷积,可以理解为相邻的3幅图用3个不同的卷积核进行卷积,并把卷积结果相加, 卷积结果还是3d的.

C3D适用窄,动作识别, 视频生成(有demo链接)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]

lesson20 笔记

 

1. 如何快速训练一个图像分割模型?

下载预训练的模型(pretrain), 在这些已经收敛的模型的基础上微调(finetune)

2. 为何客户以这样做?

我们通常选择在imagenet上训练过的模型.

可以认为,之前的网络已经学到了一种图像的表征方式,或者说是网络里用来提取特征的滤波器是可以共用的.

3. 从哪里下载预训练的模型?

http://data.dmlc.ml/

 

 

4. 讲师详解 基于MXnet在PASCAL数据集上训练一个图像分割网络.

5. 图像分割的dataset:

PASCAL VOC

ADE20K

Cityscapes

DAVIS(视频物体分割)

[展开全文]

lesson19笔记 - 图像分割与语义分割

一.

1. 图像分割分为 语义分割(semantic segmentation)和实体分割(instance segmentation)

2. 语义图像分割: 对图片中的像素进行分类,如判断像素是否属于天空/行人/车辆, 是一个分类任务.

3. 实体图像分割: 除了对像素进行分类外,还要区分不同的object,比如车辆A/车辆B,可类比检测任务,但是难度大于检测.

4. 评价分割任务: IoU  intersection/union

5. 图像分割的实际应用: 遥感图像分析, 医疗图像分析(肺结节检测), 抠图, 场景理解(可行驶区域估计), 语义地图(3D重建)

 

二. 

6. 语义分割的传统方法: 图模型(graph-cut), 超像素分割, 边缘检测;

深度学习方法:  F函数一般是一个全卷积网络 FCN (full convolutional networks), 与用于分类任务(classification)网络比起来, FCN去掉了global pooling层, 所有的全连接层都被替换成了卷积层, 目的是为了得到dense prediction(分类任务是对整张图像进行分类/概率分布, 而分割任务是对图像中的每个像素点分类).

 

7. FCN的一般结构.

FCN细节分析:

1) 为何使用归一化(batch norm)层: 是网络的非线性更加明显;在一定程度上见笑了噪声的影响; 防治网络过拟合.

2) 为何要通过pooling或者设置卷积的stride 做降采样操作: 增大网络感受野, 减少网络计算量.

3) softmax的作用:将最后一层卷积的输出归一化成概率分布

 

8. FCN变体系列

1) FCN变体1 deconvolution

内部也做padding,这样输出的featurer map的分辨率会比原来大,细节更好.双线性差值是其特殊情况.

Unet, U型, 降采样+特征提取 + 每层hybird融合 -- 上采样, 浅层featuremap有较多的空间位置信息,深层的featuremap经过特征提取和融合后有丰富的语义信息, 还原后具有更多的细节.

2) FCN变体2  context sharing 

引入上下文, 对pixel level的分类任务也是有帮助的, 这也解释了为什么分割网络需要更大的感受野.

3) FCN变体3 full-resolution resident network 

双流网络, 维护了一个residual stream (保证分辨率不变)和 pooling stream(减少分辨率提升感受野, 特征提取和融合, FRRU单元, U型采样);

pooling stream深层的特征虽然有丰富的语义信息, 但是空间位置信息损失较多(由于降采样);

通过与residual stream的特征进行融合, 可以得到对空间位置更为敏感的特征表达.

 

 

三.

10. 实例分割

instance segmentation 需要区分每个单独的object, 但是卷积操作具有平移不变性的特点(相同的pattern都会激活卷积层)(很适合做语义分割), 卷积网络全局共享一个filter, 如何解决定位这个问题?

思路1: 

先做检测,然后在bbox里分割前后景 - mask R-CNN

思路2: 

检测每个object的边缘 - Deep Watershed transform

rgn+sem.seg -> direction net -> watershed transform net

使用direction net 回归每个pixel到距离其最近的边界的矢量, 所给的监督信号为一个2通道的矢量场;

使用watershed transform net 预测每个pixel的能量大小,距离边界越近的pixel能量越低,背景像素的能量为0.

思路3:

特征解耦 - > instance-sensitive FCN

 

 

 

 

 

 

[展开全文]

lesson17 笔记 - 对抗式生成网络实战项目(上)

 

DC-GAN 基于tensorflow实现,本课非常关键在于, 对tensorflow的框架进行详细拆解,非常感谢讲师!

 

1. tensorflow文件:

1) checkpoint: 保存模型文件

2) data数据集: 图片尺寸不统一, 要经过下采样/上采样,or crop剪裁, 进行resize,成固定大小.

3) samples : 训练过程中将模型固定住,采样等.

4) tensorlayer : 对基本函数的封装

5) download.py - 下载数据集

main.py - 终端运行的文件

model.py 模型

utils.py 对图片预处理等

 

2.  看代码的关键点思路:

1)  数据输入的过程

2) loss 怎么计算的

3) D G 在哪里使用,使用细节是怎样的

 

3. 讲师逐行讲解了tensorflow的代码,

帮我解惑许多! 非常感谢!

 

 

[展开全文]

lesson16 笔记 - 对抗式生成网络(GAN, Generative Adversarial Networks )入门及实战(下)

 

1.DCGAN

是常用的GAN网络.

1) 去掉了所有的池化层,G网络使用转置卷积进行上采样,D网络中用加入步幅为2的卷积层代替池化层.

2) 在D和G中均使用均一化层(batch normalization), 对输入数据做零均值归一化,防止梯度消失和爆炸.

3) 去掉全连接层(fully connected layer),使网络编程全卷积网络(全连接层影响收敛速度)

4) G网络中使用ReLU作为激活函数, 最后一层用tanh.

5) D网络中使用LeakyReLU作为激活函数.

 

2. AC-GAN

输入增加了类别的向量,和noize拼接在一起,输出除了real/fake,还回归出类别.

 

3. text2image

将text用含有语义的向量表征,与noize拼接在一起,整体输入G网络, D网络判别器又将语义向量(有wrong text, right text )添加进来,构成更大的feature map,进而进行判断.

4. image2image translation 风格迁移

正样本: 图+风格组成pair -> D

负样本: 图 -> G -> 图+风格pair -> D(有用到 U-Net, 类似resnet, 跨域传递)

 

 

 

[展开全文]

lesson15 笔记 - 对抗式生成网络(GAN, Generative Adversarial Networks )入门及实战

 

1.为何探索 生成式模型

1) 提升对高维数据(视频图片文本等)表征和操作能力;

2) 生成式模型可以通过很多方式嵌入到强化学习之中;

3) 提供更便利的数据标注方法;

4) 可以实现输出结果的多样性.

 

2. GAN网络的基本应用

1) 图像编辑和生成  adobe

2) 人脸修饰

3) 图像着色  deepcolor

4) 风格迁移 cyclegan 

5) 图像超分辨及 图像修复

6) 生成古诗/音乐/图片

 

3. 问题总结

1) 部分--生成式模型--> 全部

2) 无 --生成式模型--> 有

4. 问题阐释

统计 参数估计

正态/高斯分布 ---> 参数/解空间大; 高维空间中真实分布复杂

5. 问题解决

1) 完全可见信念网络

2) 变分自编码器

3) 对抗式生成网络

 

6. 对抗时生成网络

基本架构: 判别器 --> 生成器

价值函数: 左右互搏 

原理: 不断进行上述的最小最大化游戏, 等价于不断最小化生成数据分布和真实数据分布之间的J-S散度,并且如果能够直接在函数空间内更新两者参数,最终可以得到最优解(达到纳什均衡状态)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]

# 课时9笔记 目标检测原理与应用(上)

1. 对图片/视频,用框(bounding box)标出物体的位置并给出物体的类别.

2. 物体检测数据库: 

PASCAL VOC, 20类, 比较简单, 物体比较大比较少; 

COCO, 80类物体, 单张物体稠密, 验证检测器性能常用数据集.

3. 评价检测器的性能.

IoU(Intersection over Union), 交集比上并集, 完美态是1;

PR(Precision-recall curve)曲线

 

 

 

 

 

 

 

[展开全文]

深度学习时代的 人脸识别

 

pipeline 

->检测  (boarding bolds)

->对齐 (关键点检测)

-> 特征提取 (高维-低维)

-> 识别,(验证)

 

1. 人脸检测

1) 难点: 尺度/肤色/遮挡/角度/光照...

2) 人脸检测有两种方法: 回归问题, Proposal+分类+合并

2.1) 回归问题

建模(设计参数系), 从原始图像中学习一个函数, 从中回归初设计的4个参数.

[x,y,w,h] = f(I), f函数可以是设计,也可以neural network.

问题: 多目标检测, 参数爆炸.

2.2) Proposal+分类+合并.

滑窗 - 分类器(二分类) - 合并, 是人脸识别的主流思想

滑窗, 密集滑,有意义的滑(proposal, 多尺寸)

分类器, CNN- softmax. 级联10跟小分类器(检测率叠乘,误检率叠乘), adaboost思想,弱分类器组合成强分类器.使用单一强分类器,耗时太大(滑窗的尺寸有不同.)

合并, 非极大值抑制. 流程:1)将所有框分数排名取最大; 2)遍历其余框,和当前最高框重合度大于阈值删除; 3)从未处理的框中选最高的,重复上述过程. (类似聚类,置信度)

 

 

2. 人脸对齐(转正)

1) 确定人脸中的标定点 landmark 的位置, 3个点即可.

2) 放射变换: 

二维坐标到另外的二维坐标之间的线性变换(平移/缩放/旋转); 

不共线的3对对应点(6个参数)决定了一个唯一的放射变换. c1c2平移的量, a1b2缩放的量.

3) landmark detection 一般检测5个点, 回归10个参数的量.

4) 回归问题, loss function.

不是 softmax-loss(用于分类的loss);

是 cross-entropy-loss,or,ucdn-loss;

多次回归,级联的思想

 

 

3. 特征学习

1) 分类模型: Deepface, deepID, VGG, ResNet. 问题在于最后的softmax,如果是10000分类的话..

2) 度量学习模型, Triplet Loss, 谷歌, 同类相近异类相远. 对距离进行学习(欧式距离).

 

4. 人脸验证.

1:1 人脸比对.

1) 假定两张人脸提取的特征向量是xj和xk, 欧氏距离or余弦距离.

2)  余弦距离方法笔记方法比较简单, 可以快速判断特征提取网络的性能, 但对于人脸验证的问题, Joint Bayesian方法具有更好的性能.

3) Joint Bayesian方法: 后验概率, EM算法迭代.

1:N 人脸搜索.

1) 人脸特征向量, 逐一比对.

2) 对人脸特征向量做hash编码, 得到只包含0/1元素的向量, 只需要计算向量间的汉明距离(即两个特征向量之间做异成,可大大缩小比较时间), 且特征向量按比特存储,减少内存的消耗.( 大规模图像检索,也需要hash编码)

3) 公开的人脸识别图片数据库.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]

# lesson5 <人脸识别的算法(上)>笔记

 

1. 人脸识别是生物识别的一种, 生物识别物/生物特征还有很多,比如步态/耳廓/瞳孔虹膜/指纹/手相/牙齿/眼底视网膜/签名/声波/敲击键盘pattern等.(啊这么多啊). 活体检测.

2. 人脸识别的应用 

1) 1:1比对, 刷脸登录/自动通关,远程身份认证;

2) 1:N(N*=10幂3)比对, 智能门禁&考勤

    1:N(N>10幂9)比对, 智能寻亲,跨年龄人脸识别技术.

3. 人脸识别,最简单的方法:模板匹配

1) 维度灾难,内存/速度问题.

2)准确率问题.

4. 将问题转化为: 在低维特征空间,同一个人的特征尽可能接近,不同人的特征尽可能分离.

5. 如何找到低维空间:?

前深度学习时代: 

1)  主成分分析. 方法类似于4.

2) Eigen Face(特征脸): 原始图片-> N维向量x. 减去平均脸,数据归一化.

3) 由特征脸(特征向量)组成的降维特征子空间, 任何一幅中心化的人脸图像都可以通过下面的式子投影到特征脸子空间,获得一组坐标系数.(高维投影到低维, 获得低维表达)

4) 输入人脸 --投影-->平均人脸+sigma(权重*特征脸)

5) 特征脸存在的问题: a.特征表达能力有限,b.知识和小数据库.

6) eigen face 存在无数开源代码, 可以用来复现.

 

 

 

 

 

 

 

 

 

 

[展开全文]

lesson2笔记-图像分类与深度卷积网络的模型

 

1.图像分类的挑战:a.光照变化,b.形变,c.类内变化.

2. 图像分类的定义函数: y=f(x)

3. 如何提高泛化能力: 用图像特征来描述图像.

泛化能力,是评价模型分类器的效果.

4. 图像特征: Color; Shape(global shape, local shape, 指标有translation-scale-rotation-occlusion); Texture

5. 优良的组合性图像特征:  SIFT(用在分类, 128-4-64),  HoG(用在检测,擅长形状), LBP(人脸), Harr(滤波器,对形状). 在深度学习之前,常用, 维度也不高. 推荐一个网站:http://www.vlfeat.org/

[展开全文]

整体流程框架:
1. selective search在一张图片中得到约2k个object proposal(这里称为RoI);
2. (joint training)缩放图片的scale得到图片金字塔,FP得到conv5的特征金字塔
3. (joint training)对于每个scale的每个ROI,求取映射关系,在conv5中crop出
patch。并用一个单层的SPP layer(这里称为Rol pooling layer)来统一到一样的
(对于AlexNet是6x6);
4. (joint training)继续经过两个全连接得到特征,这特征有分别share到两个新的
连接上两个优化目标。第一个优化目标是分类,使用softmax,第二个优化目标是
regression,使用了一个smooth的L1-loss。
5. 训练时没有这步,测试的时候需加上NMS处理:利用窗口得分分别对每一类物体
大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口

 

[展开全文]

进入小组观看课程

以下为该课程相关学习小组,您可以选择任意小组加入学习课程并交流