吴恩达深度学习——卷积神经网络的特殊应用

news2025/2/9 12:02:04

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习使用。

文章目录

  • 人脸识别
    • 相关定义
    • Similarity函数
      • 使用Siamese网络实现函数d
      • 使用Triplet损失学习参数
  • 神经风格迁移
    • 深度卷积网络可视化
    • 神经风格迁移的代价函数
      • 内容损失函数
      • 风格损失函数

人脸识别

相关定义

  • 人脸验证:

    • 输入:图像、姓名/ID。
    • 输出:判断输入图像是否为所声明的人。这是1:1的验证模式,即单一输入图像与单一声明身份进行比对。一对一对比,需要的正确率在99%。
  • 人脸识别:

    • 输入:获取一张输入图像。
    • 输出:若数据库包含包含K个人,K = 100 。如果输入图像是数据库中K个人中的任何一个,则输出其ID;如果不是,则输出“未识别” 。一对K的识别,正确率需要很高,达到99.9%以上。
      在这里插入图片描述
      人脸识别会遇到两个问题:
  • 录入的数据只有一份,也就是说,对于某个人脸,神经网络在训练的时候,只有一个数据,而不是很多的数据。

  • 当前的神经网络是针对当前的数据库而训练的,如果数据库中新加了内容,难道要重新训练神经网络?

Similarity函数

定义函数 d ( i m g 1 , i m g 2 ) d(img1, img2) d(img1,img2)表示两张图像之间的差异程度。

设定一个阈值 τ \tau τ,如果 d ( i m g 1 , i m g 2 ) ≤ τ d(img1, img2) \leq \tau d(img1,img2)τ,则判断两张图像为“same(相同)” ;如果 d ( i m g 1 , i m g 2 ) > τ d(img1, img2) > \tau d(img1,img2)>τ,则判断为“different(不同)” 。

对比的过程是输入的图片和整个数据库中的图片做比较。

使用Siamese网络实现函数d

在这里插入图片描述
输入第一张图像 x ( 1 ) x^{(1)} x(1),经过一系列的网络层,最终经过全连接层后得到图像的编码,记为 f ( x ( 1 ) ) f(x^{(1)}) f(x(1));继续输入第二张图象 x ( 2 ) x^{(2)} x(2),也经过相同的网络层得到编码,记为 f ( x ( 2 ) ) f(x^{(2)}) f(x(2))

计算两个特征向量之差的L2范数的平方,即 d ( x ( 1 ) , x ( 2 ) ) = ∥ f ( x ( 1 ) ) − f ( x ( 2 ) ) ∥ 2 2 d(x^{(1)}, x^{(2)}) = \|f(x^{(1)}) - f(x^{(2)})\|_2^2 d(x(1),x(2))=f(x(1))f(x(2))22 ,衡量两张输入图像的差异程度来判断是否相似。

因为这两个网络有相同的参数,计算出的编码都可以用于函数 d d d。这是因为神经网络的参数定义了编码函数 f ( x ( 1 ) ) f(x^{(1)}) f(x(1)),输入 x ( 1 ) x^{(1)} x(1)到函数中,就会输出 x ( i ) x^{(i)} x(i)的一个编码。

使用Triplet损失学习参数

想要通过学习神经网络的参数,来获得优质的人脸图片编码,可以定义一个Triplet损失函数然后应用梯度下降。

定义:
- Anchor(锚样本,A):作为参考的样本。
- Positive(正样本,P):与Anchor属于同一类别的样本,比如同一个人的不同照片。
- Negative(负样本,N):与Anchor属于不同类别的样本,即不同人的照片。

计算:希望Anchor与Positive的特征向量距离 d ( A , P ) = ∥ f ( A ) − f ( P ) ∥ 2 d(A, P)=\|f(A) - f(P)\|^2 d(A,P)=f(A)f(P)2小于Anchor与Negative的特征向量距离 d ( A , N ) = ∥ f ( A ) − f ( N ) ∥ 2 d(A, N)=\|f(A) - f(N)\|^2 d(A,N)=f(A)f(N)2 d ( A , P ) ≤ d ( A , N ) d(A, P) \leq d(A, N) d(A,P)d(A,N) 进一步可表示为 ∥ f ( A ) − f ( P ) ∥ 2 − ∥ f ( A ) − f ( N ) ∥ 2 + α ≤ 0 \|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha \leq 0 f(A)f(P)2f(A)f(N)2+α0 α \alpha α是超参数,大于 0 的间隔值,避免计算出现 0 − 0 = 0 0-0=0 00=0的情况;同时用于加大正、负样本对之间的距离差异。假设, d ( A , P ) = 0.5 d(A, P)=0.5 d(A,P)=0.5 d ( A , N ) = 0.51 d(A, N)=0.51 d(A,N)=0.51,虽然满足不等式,但是仍不够好,加上 α \alpha α加大了正负样本之间的距离。

因此,三元组损失(Triplet Loss)函数:
给定三张图像,分别为Anchor(锚)、Positive(正样本)、Negative(负样本),记为 A A A P P P N N N。有损失函数 L ( A , P , N ) = m a x ( ∥ f ( A ) − f ( P ) ∥ 2 − ∥ f ( A ) − f ( N ) ∥ 2 + α , 0 ) L(A, P, N) = max(\|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha, 0) L(A,P,N)=max(f(A)f(P)2f(A)f(N)2+α,0)如果计算的结果为负值,直接用 0 0 0表示不满足结果;否则计算的结果为正值。

在训练时,假设有10000个图片的训练集,有1000个不同人的照片。使用这10000个图片生成三元组,然后训练网络。训练的三元组要选差值很小,否则不起好的效果。

神经风格迁移

在这里插入图片描述
神经风格迁移是将一张图像的内容与另一张图像的风格相结合,生成有特定风格的新图像。

深度卷积网络可视化

在这里插入图片描述
输入一张大小为 224 × 224 × 3 224 \times 224 \times 3 224×224×3的图像,经过一系列卷积层和池化层,最后连接两个全连接层(FC),维度分别为4096,最终输出 y ^ \hat{y} y^

希望看到该网络不同隐藏单元计算结果的可视化图,在第一层隐藏单元中选取一个神经元,找出能使其激活值最大化的假设九个图像块,这九个图像块激活了神经单元,对于该层,能看见图片浅层的区域,找到了一些边缘或者线(右下角第一个块)。对该层的其他神经元重复此操作,可以看到其他的特征。

继续更深一层的卷积层,这些层的神经元会看到一张图片的更大的部分。

神经风格迁移的代价函数

在这里插入图片描述
定义损失函数: J ( G ) = α J c o n t e n t ( C , G ) + β J s t y l e ( S , G ) J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G) J(G)=αJcontent(C,G)+βJstyle(S,G)

  • J ( G ) J(G) J(G) 是生成图像 G G G 的总损失。
  • J c o n t e n t ( C , G ) J_{content}(C, G) Jcontent(C,G) 是内容图像 C C C 与生成图像 G G G 之间的内容损失,衡量二者内容的相似程。
  • J s t y l e ( S , G ) J_{style}(S, G) Jstyle(S,G) 是风格图像 S S S 与生成图像 G G G 之间的风格损失,衡量二者风格的相似程度。
  • α \alpha α β \beta β 是超参数,调整内容损失和风格损失在总损失中的相对重要性。

内容损失函数

过程如下:

  • 利用预训练的卷积神经网络(如VGG网络),选取隐藏层 l l l 来计算内容损失。 l l l一般选择网络的中间层。不要太深也不要太浅。
  • a [ l ] ( C ) a^{[l](C)} a[l](C) a [ l ] ( G ) a^{[l](G)} a[l](G) 分别为内容图像 C C C 和生成图像 G G G 在网络隐藏层 l l l 的激活值。若二者相似,则表明两张图像内容相似, J c o n t e n t ( C , G ) = 1 2 ∥ a [ l ] ( C ) − a [ l ] ( G ) ∥ 2 J_{content}(C, G)=\frac{1}{2}\|a^{[l](C)}-a^{[l](G)}\|^2 Jcontent(C,G)=21a[l](C)a[l](G)2 ,通过计算隐藏层激活值的均方误差来衡量内容上的差异。

风格损失函数

在这里插入图片描述
假设使用卷积神经网络中第 l l l层的激活值来衡量图像“风格”。风格的定义是该层不同通道激活值之间的相关性。通过这种方式,从神经网络的角度量化图像风格,在神经风格迁移等任务中,利用该定义来计算风格损失,以实现将一张图像的风格迁移到另一张图像上。
在这里插入图片描述
l l l层,假设有5个通道。如何计算前两个通道(红色和黄色)激活项的相关系数?假设在第一个通道的某个位置含有相关系数,第二个通道相同位置也包含某个激活值,它们组成一对数字,其他位置也是同样的组成很多对数字,这些数字如何计算如何计算相关系数?
在这里插入图片描述
在可视化中,如果红色对应的通道计算出的特征是可视化图的第二块,黄色对应通道是可视化的第四块。当这两个通道的数值有相关性,说明出现竖直线条的地方大概率颜色也是橙色的;不相关,说明出现竖直线条的地方大概率颜色不是橙色的。

a i , j , k [ l ] a_{i,j,k}^{[l]} ai,j,k[l] 为卷积神经网络第 l l l 层中位置 ( i , j ) (i,j) (i,j) 、通道 k k k 处的激活值。 G [ l ] G^{[l]} G[l] 是一个 n c [ l ] × n c [ l ] n_c^{[l]} \times n_c^{[l]} nc[l]×nc[l] 的矩阵( n c [ l ] n_c^{[l]} nc[l] 为第 l l l 层的通道数)。

  • 风格图像 S S S G k k ′ [ l ] ( S ) = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i j k [ l ] ( S ) a i j k ′ [ l ] ( S ) G_{kk'}^{[l](S)} = \sum_{i = 1}^{n_H^{[l]}}\sum_{j = 1}^{n_W^{[l]}}a_{ijk}^{[l](S)}a_{ijk'}^{[l](S)} Gkk[l](S)=i=1nH[l]j=1nW[l]aijk[l](S)aijk[l](S)
  • 生成图像 G G G G k k ′ [ l ] ( G ) = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i j k [ l ] ( G ) a i j k ′ [ l ] ( G ) G_{kk'}^{[l](G)} = \sum_{i = 1}^{n_H^{[l]}}\sum_{j = 1}^{n_W^{[l]}}a_{ijk}^{[l](G)}a_{ijk'}^{[l](G)} Gkk[l](G)=i=1nH[l]j=1nW[l]aijk[l](G)aijk[l](G)
  • 损失为: J s t y l e [ l ] ( S , G ) = 1 ( 2 n H [ l ] n W [ l ] n c [ l ] ) 2 ∑ k ∑ k ′ ( G k k ′ [ l ] ( S ) − G k k ′ [ l ] ( G ) ) 2 J_{style}^{[l]}(S, G)=\frac{1}{(2n_H^{[l]}n_W^{[l]}n_c^{[l]})^2}\sum_{k}\sum_{k'}(G_{kk'}^{[l](S)}-G_{kk'}^{[l](G)})^2 Jstyle[l](S,G)=(2nH[l]nW[l]nc[l])21kk(Gkk[l](S)Gkk[l](G))2

对于给定的卷积神经网络第 l l l 层,其通道数为 n c [ l ] n_c^{[l]} nc[l] k k k k ′ k' k 的取值范围都是从 1 1 1 n c [ l ] n_c^{[l]} nc[l] a i j k [ l ] ( S ) a_{ijk}^{[l](S)} aijk[l](S) 是风格图像 S S S 在第 l l l 层位置 ( i , j ) (i, j) (i,j) 、通道 k k k 处的激活值, a i j k ′ [ l ] ( S ) a_{ijk'}^{[l](S)} aijk[l](S) 是风格图像 S S S 在第 l l l 层位置 ( i , j ) (i, j) (i,j) 、通道 k ’ k’ k 处的激活值 。

通过对所有空间位置 ( i , j ) (i, j) (i,j) 上,不同通道 k k k k ′ k' k 对应的激活值乘积进行求和,得到 G k k ′ [ l ] ( S ) G_{kk'}^{[l](S)} Gkk[l](S) k k k k ′ k' k 共同作用,获取不同通道激活值之间的相关性来定义图像的风格特征 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2295261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

寒假2.7

题解 web&#xff1a;[HCTF 2018]WarmUp 打开是张表情包 看一下源代码 访问source.php&#xff0c;得到完整代码 代码审计 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.p…

无限使用Cursor

原理&#xff1a;运行程序获得15天的免费试用期&#xff0c;重新运行程序重置试用期&#xff0c;实现无限使用。免费的pro账号&#xff0c;一个月有250的高级模型提问次数。 前提&#xff1a;已安装cursor cursor-vip工具&#xff1a;https://cursor.jeter.eu.org?p95d60efe…

unity碰撞的监测和监听

1.创建一个地面 2.去资源商店下载一个火焰素材 3.把procedural fire导入到自己的项目包管理器中 4.给magic fire 0 挂在碰撞组件Rigidbody , Sphere Collider 5.创建脚本test 并挂在magic fire 0 脚本代码 using System.Collections; using System.Collections.Generic; usi…

企业FTP替代升级,实现传输大文件提升100倍!

随着信息技术的飞速发展&#xff0c;网络安全环境也变得越来越复杂。在这种背景下&#xff0c;传统的FTP&#xff08;文件传输协议&#xff09;已经很难满足现代企业对文件传输的需求了。FTP虽然用起来简单&#xff0c;但它的局限性和安全漏洞让它在面对高效、安全的数据交换时…

python基础入门:3.3序列通用操作

Python序列操作终极指南&#xff1a;解锁数据处理的核心技能 # 快速导航 sequence_types ["列表", "元组", "字符串", "字节序列"]一、核心操作三位一体 1. 索引与切片体系 # 通用索引规则 data ["A", "B", &…

Linux | 自动化构建 —— make / Makefile

文章目录 自动化构建-make/Makefile一、make 工具概述二、Makefile 基本结构三、 Makefile和make的基本使用3.1最基本的gcc编译&#xff1a;3.2make执行Makefile文件3.3.PHONY伪目标 四、Makefile拓展4.1直接根据文件名编写Makefile4.2变量的使用4.3Makefile的适度扩展语法&…

【个人开发】macbook m1 Lora微调qwen大模型

本项目参考网上各类教程整理而成&#xff0c;为个人学习记录。 项目github源码地址&#xff1a;Lora微调大模型 项目中微调模型为&#xff1a;qwen/Qwen1.5-4B-Chat。 去年新发布的Qwen/Qwen2.5-3B-Instruct同样也适用。 微调步骤 step0: 环境准备 conda create --name fin…

电脑开机提示按f1原因分析及终极解决方法来了

经常有网友问到一个问题&#xff0c;我电脑开机后提示按f1怎么解决&#xff1f;不管理是台式电脑&#xff0c;还是笔记本&#xff0c;都有可能会遇到开机需要按F1&#xff0c;才能进入系统的问题&#xff0c;引起这个问题的原因比较多&#xff0c;今天小编在这里给大家列举了比…

2025华为OD机试真题最新题库 (B+C+D+E卷) + 在线OJ在线刷题使用说明(C++、Java、Python合集)(正在更新E卷,目前已收录581道)

2024年8月份&#xff0c;华为已经开始使用E卷题库&#xff0c;题目和往期一样&#xff0c;旧题加新题的组合&#xff0c;有题目第一时间更新&#xff0c;大家可以跟着继续学习&#xff0c;目前使用复用题较多&#xff0c;可在OJ上直接找到对应的E卷学习&#xff0c;可以放心学习…

Qt+海康虚拟相机的调试

做机器视觉项目的时候&#xff0c;在没有相机或需要把现场采集的图片在本地跑一下做测试时&#xff0c;可以使用海康的虚拟相机调试。以下是设置步骤&#xff1a; 1.安装好海康MVS软件&#xff0c;在菜单栏->工具选择虚拟相机工具&#xff0c;如下图&#xff1a; 2.打开虚拟…

《Origin画百图》之边际分布曲线图

《Origin画百图》第六集——边际分布曲线图 入门操作可看《30秒&#xff0c;带你入门Origin》 边际分布曲线图&#xff0c;其中包含散点图形&#xff0c;而在图的边际有着分布曲线图。在比较数据以查看多个变量之间是否存在关系时非常有用。 1.数据准备&#xff1a;为多列XY数…

如何提升自己的能力

提高自身能力是一个长期且综合的过程&#xff0c;需要从多个方面进行努力和持续的学习&#xff0c;以下是一些有效的方法&#xff1a; 明确目标与规划 确定目标&#xff1a;首先要明确自己想要提高哪些方面的能力&#xff0c;例如沟通能力、领导力、专业技能等&#xff0c;并根…

Vim跳转文件及文件行结束符EOL

跳转文件 gf 从当前窗口打开那个文件的内容&#xff0c;操作方式&#xff1a;让光标停在文件名上&#xff0c;输入gf。 Ctrlo 从打开的文件返回之前的窗口 Ctrlwf 可以在分割的窗口打开跳转的文件&#xff0c;不过在我的实验不是次次都成功。 统一行尾格式 文本文件里存放的…

Termux安装ssh实现电脑ssh

Termux下载 点击下载 在 Termux 中安装并使用 SSH&#xff0c;按照以下步骤操作&#xff1a; 1. 更新软件包列表 pkg update && pkg upgrade2. 安装 OpenSSH pkg install openssh3. 设置 SSH 密码&#xff08;必须&#xff0c;否则无法使用 SSH 服务器&#xff09…

DeepSeek大模型介绍、本地化部署与使用!【AI大模型】

一、DeepSeek 是什么&#xff1f; 1.技术定位 专注大模型与AGI研究&#xff0c;开发高性能基座模型&#xff08;如 DeepSeek LLM 系列&#xff09;&#xff0c;支持长文本、多模态、代码生成等复杂任务。 提供开源模型&#xff08;如 DeepSeek-MoE、DeepSeek-V2&#xff09;…

Axios 的原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Gitlab中如何进行仓库迁移

需求&#xff1a;之前有一个自己维护的新仓库A&#xff0c;现在需要将这个仓库提交并覆盖另一个旧的仓库B&#xff0c;需要保留A中所有的commit信息。 1.方法一&#xff1a;将原有仓库A导出后再导入到新的仓库B中 适用场景&#xff1a;新的仓库B是一个待建仓库&#xff0c;相当…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录&#xff0c;后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

Thread类以及常见方法

Thread类是JVM用来管理线程的一个类&#xff0c;每个线程都有一个唯一的Thread对象与之关联。 多一个线程&#xff0c;就多一条执行流&#xff0c;每个执行流也要一个对象来描述&#xff0c;而Thread类的对象就是用来描述一个线程的执行流&#xff0c;JVM 会将这些 Thread 对象…

【蓝桥杯—单片机】第十一届省赛真题代码题解题笔记 | 省赛 | 真题 | 代码题 | 刷题 | 笔记

第十一届省赛真题代码部分 前言赛题代码思路笔记竞赛板配置内部振荡器频率设定键盘工作模式跳线扩展方式跳线 建立模板明确设计要求和初始状态显示功能部分数据界面第一部分第二部分第三部分调试时发现的问题 参数设置界面第一部分第二部分和第四部分第三部分和第五部分 按键功…