当前位置: 首页 > news >正文

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

内容来自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 共同作用,获取不同通道激活值之间的相关性来定义图像的风格特征 。

相关文章:

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

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习使用。 文章目录 人脸识别相关定义Similarity函数使用Siamese网络实现函数d使用Triplet损失学习参数 神经风格迁移深度卷积网络可视化神经风格迁移的代价函数内容损失函数风格损失函数 人脸识别 …...

安宝特方案 | AR助力制造业安全巡检智能化革命!

引言: 在制造业中,传统巡检常面临流程繁琐、质量波动、数据难以追溯等问题。安宝特AR工作流程标准化解决方案,通过增强现实AR技术,重塑制造业安全巡检模式,以标准化作业流程为核心,全面提升效率、质量与…...

Unity-Mirror网络框架-从入门到精通之Discovery示例

文章目录 前言Discovery示例NetworkDiscoveryNetworkDiscoveryHUDServerRequestServerResponse最后前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Un…...

项目的虚拟环境的搭建与pytorch依赖的下载

文章目录 配置环境 pytorch的使用需要安装对应的cuda 在PyTorch中使用CUDA, pytorch与cuda不同版本对应安装指南,查看CUDA版本,安装对应版本pytorch 【超详细教程】2024最新Pytorch安装教程(同时讲解安装CPU和GPU版本) 配置环境…...

现代前端工程化实践:高效构建的秘密

一、前端工程化错误监控 这种监控可以帮助开发人员及时发现和解决问题,提高应用程序的稳定性和可靠性。 1. Sentry:Sentry是一款开源的错误监控平台,可以监控前端、后端以及移动端应用程序中的错误和异常。Sentry提供了实时错误报告、错误分…...

ARM Linux Qt使用JSON-RPC实现前后台分离

文章目录 1、前言2、解决方案2.1、JSON-RPC2.2、Qt中应用JSON-RPC的框架图2.3、优点2.4、JSON-RPC 1.0 协议规范 3、程序示例3.1、Linux C(只例举RPC Server相关程序)3.2、Qt程序(只例举RPC Client相关程序) 4、编译程序4.1、交叉…...

【C++篇】C++11新特性总结1

目录 1,C11的发展历史 2,列表初始化 2.1C98传统的{} 2.2,C11中的{} 2.3,C11中的std::initializer_list 3,右值引用和移动语义 3.1,左值和右值 3.2,左值引用和右值引用 3.3,…...

【Nginx + Keepalived 实现高可用的负载均衡架构】

使用 Nginx Keepalived 可以实现高可用的负载均衡架构,确保在某个 Nginx 节点故障时,自动将流量转移到备用节点。以下是详细的实现步骤: 1. 架构概述 Nginx:作为负载均衡器,将流量分发到后端服务器。Keepalived&…...

使用外骨骼灵活远程控制协作机器人案例

外骨骼控制器采用可调节结构,简化了机器人编程,使协作机器人 FR3 的远程控制变得容易。 一、引言 在开发机器人手臂或双臂系统的应用程序时,经常会遇到以下挑战: 1. 使用拖动和示教进行定位的困难:拖动和示教功能通常…...

Centos Stream 10 根目录下的文件夹结构

/ ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── lostfound ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├─…...

python连点器

要实现一个用于抖音点赞的鼠标连点工具,可以通过编程或现有软件实现。以下是两种常见方法(但请注意:频繁自动化操作可能违反平台规则,需谨慎使用): 方法 1:使用现成工具(如 AutoClic…...

STM32G474--Whetstone程序移植(单精度)笔记

1 准备基本工程代码 参考这篇笔记从我的仓库中选择合适的基本工程,进行程序移植。这里我用的是stm32g474的基本工程。 使用git clone一个指定文件或者目录 2 移植程序 2.1 修改Whetstone.c 主要修改原本变量定义的类型,以及函数接口全部更换为单精度…...

Spring Boot 3.4 中 MockMvcTester 的新特性解析

引言 在 Spring Boot 3.4 版本中,引入了一个全新的 MockMvcTester 类,使 MockMvc 测试可以直接支持 AssertJ 断言。本文将深入探讨这一新特性,分析它如何优化 MockMvc 测试并提升测试的可读性。 Spring MVC 示例 为了演示 MockMvcTester 的…...

java 读取sq3所有表数据到objectNode

1.实现效果:将sq3中所有表的所有字段读到objectNode 对象中,兼容后期表字段增删情况,数据组织形式如下图所示: 代码截图: 代码如下: package com.xxx.check.util;import java.sql.*; import java.util.Arr…...

网络计算机的五个组成部分

单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机(如个人计算机、智能手机、ATM机等终端设备)提供计算或者应用…...

jakarta EE学习笔记-个人笔记

WebServlet注解:声明一个类为Servlet Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface WebServlet {// 指定Servlet的影子String name() default ""; // 匹配地址映射(URL)String[] value() default {};// …...

vue3-响应式 toRefs

在Vue 3中,toRefs是一个非常有用的组合式API(Composition API)函数,它主要用于将响应式对象(通常是由reactive创建的对象)转换为单独的响应式引用对象。这样做的好处是可以将这些响应式引用解构出来&#x…...

学习threejs,使用Lensflare模拟镜头眩光

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Lensflare 二、&…...

redis高级数据结构布隆过滤器

文章目录 背景什么是布隆过滤器Redis 中的布隆过滤器布隆过滤器使用注意事项实现原理空间占用估计 背景 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻…...

mysql 5.7安装

基础环境:centos7.9 创建日志存放目录 mkdir -p /opt/supervisor/log安装相关工具 yum install -y perl net-tools numactl gcc python-devel配置yum源 sudo vim /etc/yum.repos.d/mysql-community.repo [mysql-connectors-community] nameMySQL Connectors Com…...

别再手写表单了!用Vue3+AI做个自己的低代码设计器,5分钟搞定一个页面

用Vue3AI打造个人专属低代码表单设计器:5分钟解放重复劳动 如果你是一名中后台开发者,每天被各种CRUD表单折磨得焦头烂额,这篇文章就是为你准备的。想象一下:当你接到第100个类似的用户管理表单需求时,不再需要从零开始…...

基于Comsol相控阵技术的实用钢纵波超声波成像模型:单层缺陷TFM成像与压力声学仿真

comsol 相控阵 超声成像 此模型为压力声学仿真超声波,实用钢纵波速度6000 密度7.8e-9 单层缺陷TFM成像相控阵超声检测这玩意儿在工业NDT圈子里算是老熟人了,今天咱们拿COMSOL搞个钢材料缺陷成像的骚操作。模型基础是压力声学模块,材料参数先给…...

Git开源贡献全指南:从入门到精通

开源项目Git贡献全流程拆解 理解开源项目贡献的基本概念 开源项目的定义与意义Git在开源协作中的核心作用常见的开源贡献类型(代码、文档、测试等) 准备开发环境 安装Git并完成基础配置(用户名、邮箱、SSH密钥)注册GitHub/GitLab等…...

从《阵列天线分析与综合》到HFSS实战:手把手教你仿真4x1微带天线阵(含相位扫描设置)

从理论到实践:HFSS中4x1微带天线阵的建模与相位扫描全解析 微带天线阵列因其低剖面、易集成和成本优势,在现代通信系统中扮演着重要角色。对于刚接触天线设计的工程师和学生而言,如何将《阵列天线分析与综合》等经典教材中的理论概念转化为可…...

提升开发效率:IntelliJ IDEA必备插件推荐与安装指南(2023最新版)

2023年IntelliJ IDEA插件生态深度解析:从效率工具到全栈开发支持 JetBrains家族的IntelliJ IDEA早已超越普通代码编辑器的范畴,成为现代开发者手中的瑞士军刀。但鲜有人意识到,真正让这把军刀所向披靡的,是背后超过5000个官方认证…...

数字斯德哥尔摩:用户爱上折磨人的bug

在软件测试领域,我们经常面对一个悖论:用户有时会对那些反复出现、折磨人的bug产生一种依赖甚至“爱”的情感,这种现象被称为“数字斯德哥尔摩综合征”。它源于心理学中的斯德哥尔摩综合征——人质对劫持者产生情感依赖——在数字世界中&…...

英飞凌TC3xx SMU模块实战:如何配置看门狗超时自动复位(附寄存器详解)

英飞凌TC3xx SMU模块实战:如何配置看门狗超时自动复位(附寄存器详解) 在汽车电子和工业控制领域,系统稳定性是生死攸关的指标。想象一下,当你的ECU在高速公路上以120km/h运行时突然死机,或者工业机器人正在…...

剑指offer-58、对称二叉树

题⽬描述 请实现⼀个函数,⽤来判断⼀棵⼆叉树是不是对称的。注意,如果⼀个⼆叉树同此⼆叉树的镜像是同样 的,定义其为对称的。 例如:下⾯这棵⼆叉树是对称的 下⾯这个就不是对称的: 示例1 输⼊:{8,6,6,5…...

vscode-remote-ssh-server首次安装或者更新无响应时解决方案

当vscode更新后,remote-ssh服务端的server也需要同步更新,否则会无法连接,若服务器的网络下载服务端文件非常慢或者无法连接外网,则需要手动下载离线包拷贝到对应的目录下。1、使用mobaXtern(或者其他SSH工具&#xff…...

从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环

从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环 当企业的安全团队还在疲于应对零散的端点告警和网络流量异常时,攻击者早已开始采用自动化工具进行横向移动。传统孤立的防御手段就像用多个单点摄像头监控银行金库——每个摄像头都…...