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

内容来自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.mzph.cn/pingmian/69395.shtml

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

相关文章

搭建linux qt5.6环境

文章目录 准备工作步骤测试 准备工作 1、linux虚拟机环境 2、linux qt安装包相关文件,本文采用压缩包方式 步骤 1)启动虚拟机并登入 2)打开linux终端命令行,ifconfig获取当前linux环境的ip 3)使用WinSCP设置好ip、…

C++ 使用CURL开源库实现Http/Https的get/post请求进行字串和文件传输

CURL开源库介绍 CURL 是一个功能强大的开源库,用于在各种平台上进行网络数据传输。它支持众多的网络协议,像 HTTP、HTTPS、FTP、SMTP 等,能让开发者方便地在程序里实现与远程服务器的通信。 CURL 可以在 Windows、Linux、macOS 等多种操作系…

基础入门-网站协议身份鉴权OAuth2安全Token令牌JWT值Authirization标头

知识点: 1、网站协议-http/https安全差异(抓包) 2、身份鉴权-HTTP头&OAuth2&JWT&Token 一、演示案例-网站协议-http&https-安全测试差异性 1、加密方式 HTTP:使用明文传输,数据在传输过程中可以被…

07苍穹外卖之redis缓存商品、购物车(redis案例缓存实现)

课程内容 缓存菜品 缓存套餐 添加购物车 查看购物车 清空购物车 功能实现:缓存商品、购物车 效果图: 1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压…

DeepSeek-R1 本地大模型搭建对接API

DeepSeek-R1 在这里将学到很多知识 欢迎使用使用DeepSeek-R1本地大模型DeepSeek 的模型基础说明DeepSeek的本地 API 说明DeepSeek 本地模型搭建1、执行命令安装及测试 DeepSeek-R1 API接口调用当然,我们为了让用户更加便捷,我们把API 接口全部放到上面截…

250207-MacOS修改Ollama模型下载及运行的路径

在 macOS 上,Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径,可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…

单片机之基本元器件的工作原理

一、二极管 二极管的工作原理 二极管是一种由P型半导体和N型半导体结合形成的PN结器件,具有单向导电性。 1. PN结形成 P型半导体:掺入三价元素,形成空穴作为多数载流子。N型半导体:掺入五价元素,形成自由电子作为多…

CNN 卷积神经网络处理图片任务 | PyTorch 深度学习实战

前一篇文章,学习率调整策略 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started CNN 卷积神经网络 CNN什么是卷积工作原理深度学习的卷积运算提取特征不同特征核的效果比较卷积核感受野共享权重池化 示例源码 …

3.1 学习UVM中的uvm_component类分为几步?

文章目录 前言一、定义1.1 角色和功能:1.2 与其他UVM类的区别:1.3 主要属性和方法: 二、使用方法2.1 定义和实例化:2.2 生命周期管理:2.3 组件间通信: 三、何时使用3.1 使用场景3.2 适用组件3.3 与uvm_obje…

谷云科技RestCloud全面接入DeepSeek 开启智能新时代

在数字化转型的浪潮中,谷云科技始终走在数据集成与智能应用领域的前沿。近期,随着 DeepSeek 的火爆出圈,谷云科技紧跟技术趋势,对旗下两大核心产品 —— 数据集成软件 ETLCloud 和 AI Agent 智能体构建平台进行了重大升级&#xf…

Kafka 入门与实战

一、Kafka 基础 1.1 创建topic kafka-topics.bat --bootstrap-server localhost:9092 --topic test --create 1.2 查看消费者偏移量位置 kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group test 1.3 消息的生产与发送 #生产者 kafka-cons…

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

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

了解Linux 中 make 与 Makefile

目录 一、为什么开发者需要构建工具? 二、make/Makefile 1. Makefile基本规则 2.清理项目 三、make的工作原理 一、为什么开发者需要构建工具? 在软件开发中,我们经常面临这样的场景:一个项目包含数十个源代码文件&#xff…

win11右击显示全部

正常: 输入: reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve 重启或刷新进程 刷新: taskkill /f /im explorer.exe & start explorer.exe 成功:

Redis基础--常用数据结构的命令及底层编码

零.前置知识 关于时间复杂度,按照以下视角看待. redis整体key的个数 -- O(N)当前key对应的value中的元素个数 -- O(N)当前命令行中key的个数 -- O(1) 一.string 1.1string类型常用命令 1.2string类型内部编码 二.Hash 哈希 2.1hash类型常用命令 2.2hash类型内部编码 2.3ha…

React 设计模式:实用指南

React 提供了众多出色的特性以及丰富的设计模式,用于简化开发流程。开发者能够借助 React 组件设计模式,降低开发时间以及编码的工作量。此外,这些模式让 React 开发者能够构建出成果更显著、性能更优越的各类应用程序。 本文将会为您介绍五…

Unity扩展编辑器使用整理(一)

准备工作 在Unity工程中新建Editor文件夹存放编辑器脚本, Unity中其他的特殊文件夹可以参考官方文档链接,如下: Unity - 手册:保留文件夹名称参考 (unity3d.com) 一、菜单栏扩展 1.增加顶部菜单栏选项 使用MenuItem&#xff…

Vue3+codemirror6实现公式(规则)编辑器

实现截图 实现/带实现功能 插入标签 插入公式 提示补全 公式验证 公式计算 需要的依赖 "codemirror/autocomplete": "^6.18.4","codemirror/lang-javascript": "^6.2.2","codemirror/state": "^6.5.2","cod…

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿,命名为“PPT.pptx”(“.pptx”为扩展名)新建幻灯片 开始→版式“PPT_素材.doc…

开源项目介绍-词云生成

开源词云项目是一个利用开源技术生成和展示词云的工具或框架,广泛应用于文本分析、数据可视化等领域。以下是几个与开源词云相关的项目及其特点: Stylecloud Stylecloud 是一个由 Maximilianinir 创建和维护的开源项目,旨在通过扩展 wordclou…