deeplearning.ai 卷积神经网络 Week 4 特殊应用:人脸识别和神经风格转换 听课笔记
本周课程的主题是两大应用:人脸检测和风格迁移。
1. Face verification vs. face recognition
Verification: 一对一的问题。
1) 输入:image, name/ID.
2) 输出:image是否对应这个name/ID。
Recognition: 一对多的问题。
1) 数据库存了K个人。
2)输入:图片。
3)输出:如果图片中的人属于数据库,则输出ID;否则显示“not recognized”。
Verification是基础组建,正确率足够高之后,则可以用于recognition。
2. One-shot learning
人脸检测比较难的地方在于只能通过一个样本来进行学习。对于常规的卷积神经网络(CONV -> softmax),表现很差,因为单个样本不足以训练鲁棒的神经网络;另一方面,如果加入新人,softmax的输出就得多一个元素,这意味着要重新训练网络。
解决的办法是学习“similarity”函数:d(img1, img2) = degree of difference between images. 如果d(img1, img2)小于某个阈值(这是一个超参数),则判断同一个人;否则判断是不同的人。
3. Siamese network(Taigman et. al., 2014. DeepFace closing the gap to human level performance.)
常规的卷积神经网络在卷积层、池化层、全连接层等之后会得到n*1的向量,然后把这个向量送入softmax函数,得到具体分类。Siamese network舍弃了最后的softmax层,把n*1(比如128*1)的向量 f(x(k)) 作为输入图片 x(k) 的编码,两张图片的相似性就用这个编码的差的范数 d(img i, img j)=||f(x(i))-f(x(j))||2 来表征。神经网络不同的权重参数,可以计算出不同的编码。我们训练网络的目的就是训练出一组编码,使得对于相同得人的图片d(img i, img j)足够高,对于不同的人的图片d(img i, img j)足够低。
4. Triplet loss(Schroff et al., FaceNet: A unified embedding for face reconition and clustering.)
叫triplet的原因是会同时看三张图片,一张是参照图片Anchor,一张是正例(Positive),一张是反例(Negative)。我们希望 d(A, P)+α≤d(A, N),其中d(A, P)=||f(A)-f(P)||2,d(A, N)=||f(A)-f(N)||2,α是margin。
单个样本的 Loss function: L(A, P, N) = max( ||f(A)-f(P)||2 - ||f(A)-f(N)||2 + α, 0),这里加上max的意思是只要小于等于0就可以了,不在乎让loss function更小。
整个网络的 Cost function:J = ∑L(A(i), P(i), N(i))。训练集可能是1000个人的10k张图片,把这10k张图片组合成(A, P, N)的三元组来训练网络。注意,这里需要同一个人的一对图片A和P,如果训练集里每个人只有一张图片,这个算法是训练不了的。训练好网络之后,可以每个人只有一张照片。
如何组合(A, P, N)三元组?如果随机选择,那么d(A, P)+α≤d(A, N)太容易训练了。所以我们要找难训练的,即d(A, P) ≈ d(A, N)的情况,神经网络会努力让左边的变小,右边的变大。
5. 二分类的算法(Taigman et. al., 2014. DeepFace closing the gap to human level performance.)
不同于triplet loss的算法,也可以把人脸检测定义为二分类问题,用同一个神经网络把任意两张图片分别转成编码,然后用sigmoid处理编码,如果是同一个人则输出1,否则输出0。
预测的分类 y_hat = σ( ∑wk|f(x(i))k - f(x(j))k| +b),这里σ()是sigmoid函数,f(x(i))k表示图片x(i)的编码f(x(i))的第k个元素,如果编码一共128个元素,则求和符号就是做128次加法。也可以选择其他的预测函数,比如 y_hat = σ( ∑wk (f(x(i))k - f(x(j))k)2 / (f(x(i))k + f(x(j))k)+b),这是χ2相似度(Kai平方)。

实际部署的时候,x(i)是要检测的新图片,x(j)是数据库里的图片,数据库里的图片可以不用每次都计算,可以直接预先计算(precompute)好编码f(x(j)),这样只需要每次计算x(i)的编码就行了。
6. 风格迁移(Gatys et. al., 2015. A neural algorithm of artistic style.)
一张内容(Content)图片C,一张风格(Style)图片S,生成(Generate)一张新的图片G。
Cost function: J(G) = αJcontent(C, G)+βJstyle(S, G)。前者评估C和G的相似度,后者评估S和G的相似度,α和β是权重(NG说这边一个超参数就够了,但原文作者使用了两个)。具体算法是:1)用随机数初始化G,得到一张白噪声的图片;2)梯度下降最小化J(G)。
Content cost function:用一个预训练过得卷积神经网络(比如VGG),选其中不要太浅(会非常具体地要求两张图片尽量相同)也不要太深(会非常抽象地检测图片中是否有狗)的隐藏层l。假设a[l](C)和a[l](C)分别表示内容图片C和生成图片G在第l层的激活函数值,如果这两个激活值相似,则两张图片内容相似。Jcontent(C, G) = 1/2*||a[l](c) - a[l](G)||2,对应元素的差的平方和。
Style cost function:图片的风格是用图片不同通道间的相关性来表征的。计算出两张图片在每一个隐藏层的style matrix的差,然后把所有层的都加起来。


7. 卷积神经网络主要针对2D的图像,但也可以推广到1D和3D的情况
1D的例子:心电图诊断,1*14的信号和1*5的filter做卷积(和图像一样,这里其实也是相关,因为信号没有flip),在信号中找filter类似的特征。如果信号有不同的通道,则filter对应的也有那么多通道。
3D的例子:CT诊断,14*14*14*1的数据和5*5*5*1的filter做卷积,最后一个数字1是指通道数量。另一个应用是视频中检测物体、人物行为等。
deeplearning.ai 卷积神经网络 Week 4 特殊应用:人脸识别和神经风格转换 听课笔记的更多相关文章
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换
一.什么是人脸识别 老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333 啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别. 二.One-shot(一次)学习 假设我们 ...
- deeplearning.ai 卷积神经网络 Week 3 目标检测 听课笔记
本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...
- deeplearning.ai 卷积神经网络 Week 1 卷积神经网络 听课笔记
1. 传统的边缘检测(比如Sobel)手工设计了3*3的filter(或者叫kernel)的9个权重,在深度学习中,这9个权重都是学习出来的参数,会比手工设计的filter更好,不但可以提取90度.0 ...
- deeplearning.ai 卷积神经网络 Week 3 目标检测
本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...
- deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
1. 传统的边缘检测(比如Sobel)手工设计了3*3的filter(或者叫kernel)的9个权重,在深度学习中,这9个权重都是学习出来的参数,会比手工设计的filter更好,不但可以提取90度.0 ...
- deeplearning.ai 卷积神经网络 Week 2 深度卷积网络:实例研究 听课笔记
1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...
- deeplearning.ai 卷积神经网络 Week 2 卷积神经网络经典架构
1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...
- 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统
基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)
前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...
随机推荐
- 使用Flink时遇到的问题(不断更新中)
1.启动不起来 查看JobManager日志: WARN org.apache.flink.runtime.webmonitor.JobManagerRetriever - Failed to ret ...
- 微信小程序教学第四章第三节(含视频):小程序中级实战教程:详情-功能完善
详情 - 功能完善 本文配套视频地址: https://v.qq.com/x/page/f0555nfdi14.html 开始前请把 ch4-3 分支中的 code/ 目录导入微信开发工具 这一节中, ...
- spring boot oauth2的一些记录
oauth2及时从一个项目A申请另一个项目B的访问的时候,不用在项目A输入项目B的用户名和密码,个人理解先跳转到项目B,利用项目B的用户名和密码得到一个code之类的,这里有点像openID,不过不是 ...
- 对Java中堆栈的解析
Java把内存分为两种:一种是栈内存,一种是堆内存 栈内存:在函数中定义的一些基本类型的变量和对象的引用变量,当超过变量的作用域之后,Java自动释放该变量内存 堆内存:存放new创建的对象和数组,由 ...
- DataBase MongoDB高级知识-易扩展
MongoDB高级知识-易扩展 应用程序数据集的大小正在以不可思议的速度增长.随着可用宽带的增长和存储器价格的下跌,即使是一个小规模的应用程序,需要存储的数据也可能大的惊人,甚至超出了很多数据库的处理 ...
- Xftp连接阿里云Linux,向Linux上传文件,Windows和Linux文件传输
我之前是用SecureCRT连接阿里云Linux的,上传文件用的Alt+p快捷键,感觉不是很方便.后来朋友给我推荐了Xshell,感觉确实好用得很多. 传输文件用的是Xftp,今天在向我的个人网站发布 ...
- Wincc flexable的画面浏览切换组态
1.新建项目和6个画面 2.双击导航控件设置,选择默认设置 3.使用画面浏览编辑器编辑画面层次切换关系,拖拽画面到编辑器中进行关系连接 4.保运并运行
- ArcGIS 网络分析[2] 在ArcMap中使用网络数据集进行五大网络分析[最短路径/服务区/最近设施点/OD成本矩阵/车辆分配]
上一章花了大篇幅介绍网络数据集的创建,也简单说了下点线的连通性问题. 那么可以试试刀锋不锋利啦! 网络分析呢,ArcGIS提供了5个基本分析类型: 最短路径求解 服务区(服务覆盖范围) 事故突发地的最 ...
- windows日志监控
bat脚本,主要作用,每个五分钟读取日文本件中新增内容,进行错误赛选,如果有错误信息,将错误信息用邮件发送给管理员. 其中awk和sed需要手动下载 :读取number.txt文档,获取上一次执行时文 ...
- Dubbo(一) 开始认识Dubbo,分布式服务框架
引言: 以前的车马很慢,一生只够爱一个人以前的网站人很少,一个单应用服务着一个人--------------------现在,动不动就谈什么高并发,千万级访问.单应用?BOOM!分分钟爆炸.于是,技术 ...