【每日算法】理论:图像分割相关 刷题:设计链表

上期文章

【每日算法】理论:AIGC微调技术 刷题:滑动窗口、循环

文章目录

  • 上期文章
  • 一、上期问题
  • 二、理论问题
      • 1、变形自注意力模块的特别之处
      • 2、GroundingDino模型的损失函数是什么?
      • 3、Dice Loss
      • 4、UNet的网络架构
      • 5、VQVAE模型相对于VAE的改进
      • 6、Deepfloyd-if模型
  • 三、力扣刷题回顾-链表
      • 707.设计链表


一、上期问题

  • dreambooth微调模型的原理
  • lora微调模型的原理
  • controlnet模型的创新点
  • 解释focal loss
  • 如何判断GAN收敛或者不稳定
  • stable diffusion模型的图像优化模块是什么架构

二、理论问题

1、变形自注意力模块的特别之处

变形自注意力模块主要由两个组成部分构成:偏移模块和注意力模块。在将向量集成到偏移模块之前,必须将其转换为特征图,然后生成输入 Query 向量,同时考虑参考点的坐标。将输入特征图和Query向量进行线性变换后一同输入到偏移模块中,将偏移模块产出的结果与Query向量输入到注意力模块中得到最终结果。可变形注意力的运用可以动态地调整注意力模型的形状和大小,以更好地适应不同任务和输入数据的特点。

可变形注意力(Deformable Attention)及其拓展

2、GroundingDino模型的损失函数是什么?

Grounding DINO的损失函数由定位损失localization loss(也就是回归损失)和分类损失两部分组成。其中定位损失使用的是L1损失及GIOU损失,分类损失使用的是预测目标和文字token之间的对比损失(交叉熵损失)。

前序问题:GroundingDino模型的网络架构

Grounding DINO:开放集目标检测,将基于Transformer的检测器DINO与真值预训练相结合

3、Dice Loss

Dice Loss主要是为了解决语义分割中正负样本极度不平衡问题。Dice Loss是由Dice系数而得名的,Dice Loss=1-Dice Coefficient。Dice系数是一种用于评估两个样本相似性的度量函数,其值越大意味着这两个样本越相似,Dice系数的数学表达式如下:

d i c e = 2 ∣ X ⋂ Y ∣ ∣ X ∣ + ∣ Y ∣ dice=\frac{2|X\bigcap Y|}{|X|+|Y|} dice=X+Y2∣XY

4、UNet的网络架构

UNet架构是专门为图像分割任务设计的深度学习模型。 UNet架构对称的编码器和解码器组成。编码器由一系列卷积层和最大池化层组成,用于对输入图像进行下采样并提取特征。解码器由卷积层和上采样层组成,它们对收缩路径中的特征图进行上采样,并将它们与输入图像中的特征组合以生成最终的分割图。另外,unet架构中还有一个跳跃连接的部分,用于将编码器中的特征与解码器的对应层相结合,以便恢复图像的分辨率,提高分割图的精度。

5、VQVAE模型相对于VAE的改进

VQVAE通过Encoder学习出中间编码,然后通过最邻近搜索将中间编码映射为codebook中K个向量之一,然后通过Decoder对 latent code进行重建。VQ-VAE与VAE的最主要的区别是VQ-VAE采用离散隐变量。对于encoder的输出通过向量量化(vector quantisation,VQ)的方法来离散化。简单来说, 就是要先有一个codebook, 这个codebook是一个embedding table. 我们在这个table中找到和vector最接近(比如欧氏距离最近)的一个embedding, 用这个embedding的index来代表这个vector。

AutoEncoder自动编码器、VAE变分自编码器、VQVAE量子化(离散化)的自编码器

6、Deepfloyd-if模型

DeepFloyd-if模型解决了文生图场景中绘制文字和理解空间关系这两大难题。DeepFloyd IF是一个模块化的、级联的、像素扩散模型。它由一个固定的文本编码器和三个级联的像素扩散模块组成。基本扩散模型根据用户输入的文本提示生成 64x64 像素的图像,之后的两个超分辨率模型分别用于生成分辨率256x256像素和1024x1024像素的图像。模型的所有阶段都使用基于 T5 变换器的固定文本编码器提取文本嵌入,然后将其输入到增强了跨注意力和注意力池化的 UNet 架构中。最终得到的是一种高效的模型。

DeepFloyd IF:由文本生成图像的强大模型,能够绘制文字的 AI 图像工具

三、力扣刷题回顾-链表

上期涉及题目:

  • 209.长度最小的子数组
  • 59.螺旋矩阵II

本期题目:

  • 707.设计链表

707.设计链表

选择使用单链表或者双链表,设计并实现自己的链表。

实现 MyLinkedList 类需要包括的内容:

  • 初始化 MyLinkedList 对象的函数。
  • 获取链表中下标为 index 的节点的值的函数。
  • 将一个值为 val 的节点插入到链表中第一个元素之前的函数。
  • 将一个值为 val 的节点追加到链表中作为链表的最后一个元素的函数。
  • 将一个值为 val 的节点插入到链表中下标为 index 的节点之前的函数。
  • 删除链表中下标为 index 的节点的函数

单链表法:

  • 先要定义一个创建节点的类

单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。

  • 在对链表类MyLinkedList进行初始化时,定义一个虚拟头节点会方便很多
class ListNode:def __init__(self,val=0,next=None):self.val=valself.next=nextclass MyLinkedList:def __init__(self):self.dummy_head=ListNode()self.size=0def get(self, index: int) -> int:if index < 0 or index >= self.size:return -1current=self.dummy_head.nextfor i in range(index):current=current.nextreturn current.valdef addAtHead(self, val: int) -> None:self.dummy_head.next=ListNode(val,self.dummy_head.next)self.size+=1def addAtTail(self, val: int) -> None:current=self.dummy_headwhile current.next:current=current.nextcurrent.next=ListNode(val)self.size+=1def addAtIndex(self, index: int, val: int) -> None:if index < 0 or index > self.size:return current=self.dummy_headfor i in range(index):current=current.nextcurrent.next=ListNode(val,current.next)self.size+=1def deleteAtIndex(self, index: int) -> None:current=self.dummy_headif index < 0 or index >= self.size:return for i in range(index):current=current.nextcurrent.next=current.next.nextself.size-=1# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

双链表法:

双链表中的节点应该具备三个属性:val、next 和 prev 。val 是当前节点的值,next 是指向下一个节点的指针/引用, prev 是指示链表中的上一个节点。

class ListNode:def __init__(self,val=0,prev=None,next=None):self.val=valself.prev=prevself.next=nextclass MyLinkedList:def __init__(self):self.head=Noneself.tail=Noneself.size=0def get(self, index: int) -> int:if index < 0 or index >= self.size:return -1if index < self.size // 2:current=self.headfor i in range(index):current=current.nextelse:current=self.tailfor i in range(self.size-index-1):current=current.prevreturn current.valdef addAtHead(self, val: int) -> None:newnode=ListNode(val,None,self.head)if self.head:self.head.prev=newnodeelse:self.tail=newnodeself.head=newnodeself.size+=1def addAtTail(self, val: int) -> None:newnode=ListNode(val,self.tail,None)if self.tail:self.tail.next=newnodeelse:self.head=newnodeself.tail=newnodeself.size+=1def addAtIndex(self, index: int, val: int) -> None:if index < 0 or index > self.size:return if index == 0:self.addAtHead(val)elif index==self.size:self.addAtTail(val)else:if index < self.size // 2:current=self.headfor i in range(index-1):current=current.nextelse:current=self.tailfor i in range(self.size-index):current=current.prevnewnode=ListNode(val,current,current.next)current.next.prev=newnodecurrent.next=newnodeself.size+=1def deleteAtIndex(self, index: int) -> None:if index < 0 or index >=self.size:returnif index == 0:self.head=self.head.nextif self.head:self.head.prev=Noneelse:self.tail=Noneelif index ==self.size-1:self.tail=self.tail.previf self.head:self.tail.next=Noneelse:self.head=Noneelse:if index < self.size // 2:current=self.headfor i in range(index):current=current.nextelse:current=self.tailfor i in range(self.size-index-1):current=current.prevcurrent.prev.next=current.nextcurrent.next.prev=current.prevself.size-=1# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

参考:代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表

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

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

相关文章

Tensorflow 2.0 常见函数用法(一)

文章目录 0. 基础用法1. tf.cast2. tf.keras.layers.Dense3. tf.variable_scope4. tf.squeeze5. tf.math.multiply 0. 基础用法 Tensorflow 的用法不定期更新遇到的一些用法&#xff0c;之前已经包含了基础用法参考这里 &#xff0c;具体包含如下图的方法&#xff1a; 本文介…

dbscan算法实现鸢尾花聚类(python实现)

DBscan算法原理 : dbscan算法-CSDN博客 法一(调库) : 直接调库 : import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.cluster import DBSCAN from sklearn.decomposition import PCA from sklearn.discriminant_analysis …

leetcode 225.用队列实现栈 JAVA

题目 思路 1.一种是用双端队列&#xff08;Deque&#xff09;&#xff0c;直接就可以调用很多现成的方法&#xff0c;非常方便。 2.另一种是用普通的队列&#xff08;Queue&#xff09;,要实现栈的先入后出&#xff0c;可以将最后一个元素的前面所有元素出队&#xff0c;然后…

【NLP11-迁移学习】

1、了解迁移学习中的有关概念 1.1、预训练模型&#xff08;pretrained model) 一般情况下预训练模型都是大型模型&#xff0c;具备复杂的网络结构&#xff0c;众多的参数量&#xff0c;以及在足够大的数据集下进行训练而产生的模型。在NLP领域&#xff0c;预训练模型往往是语…

数据库(黑马)

数据库 use test2; show tables; create table student2(id int,name varchar(10),sex varchar(10) ); ALTER TABLE student ADD sex int; INSERT INTO student (sex) VALUES (1); insert into student(id) values(1),(2),(3); insert into student2 values(4,呆呆1,19),(5,…

Python 的闭包,你知道多少? 快来测测吧

在Python中&#xff0c;闭包是一种强大且神奇的概念&#xff0c;它让函数不仅可以执行操作&#xff0c;还可以携带状态和环境。通过闭包&#xff0c;我们可以创建灵活而高效的函数&#xff0c;实现更加复杂的逻辑和设计模式。本文将深入探讨Python中闭包的原理和应用&#xff0…

【Flask】Flask项目结构初识

1.前提准备 Python版本 # python 3.8.0 # 查看Python版本 python --version 安装第三方 Flask pip install flask # 如果安装失败&#xff0c;可以使用 -i&#xff0c;指定使用国内镜像源 # 清华镜像源&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 检查 Flask 是…

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述…

Qt如何直接处理系统事件(比如鼠标事件),而不是post事件

#include <QtGui/5.15.2/QtGui/qpa/qwindowsysteminterface.h> // 方便调试事件 QWindowSystemInterface::setSynchronousWindowSystemEvents(true); 直接再 qWindowsWndProc函数中处理 通常情况: 事件被放到一个队列中

基于springboot+vue+Mysql的垃圾分类网站

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

JavaScript高级(十)----JavaScript中的类【重述原型链】!

类 在JavaScript其实本来没有类的概念&#xff0c;哪怕是ES5以后的class&#xff0c;严格意义上来说也只是构造函数的语法糖&#xff0c;之所以喜欢称之为类&#xff0c;因为JavaScript也可以面向对象开发。 类的声明 class Person {}function Person1() {}// 上面两种写法本…

Milvus 向量数据库介绍及使用

一、Milvus 介绍及安装 Milvus 于 2019 年创建&#xff0c;其目标只有一个&#xff1a;存储、索引和管理由深度神经网络和其他机器学习 (ML) 模型生成的大量嵌入向量。它具备高可用、高性能、易拓展的特点&#xff0c;用于海量向量数据的实时召回。 作为专门为处理输入向量查…

Linux:权限的概念与理解

目录 1. Linux权限的概念 2. Linux权限管理 01.文件访问者的分类 02.文件类型和访问权限 03.文件权限值的表示方法 04. 文件访问权限的相关设置方法 3. 使用 sudo分配权限 4. 目录的权限 ---------- 权限 用户角色(具体的人) 文件权限属性 ---------- 1. Linux权限的…

代码随想录--排序算法

912.排序数组 快速排序 思路&#xff1a; 1. 设置一个pivot2. 将小于nums[pivot]的值 放在左边3. 将 大于nums[pivot]的值 放在 右边4. 递归调用注意&#xff1a;必须先比较nums[high] 与pivot 代码&#xff1a; class Solution {int partition(vector<int>&nu…

无人机采集图像的相关知识

1.飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计&#xff0c;软件可以自动计算相机覆盖和图像重叠情况。比如ArduPilot (ArduPilot - Versatile, Trusted, Open) 和UgCS (http://www.ugcs.com)是两个飞行任务规划软件&#xff0c;可以适用大多数无人机系统。 2.图…

每日shell脚本之自动配置Prometheus.yml并支持选择监控的节点数量、输入自定义IP和端口设置

每日shell脚本之自动配置Prometheus.yml并支持选择监控的节点数量、输入自定义IP和端口设置 #!/bin/bash# 获取用户输入的节点数量 read -p "请输入要监控的节点数量&#xff1a; " node_count# 生成Prometheus.yml配置文件 cat << EOF > Prometheus.yml g…

Vue 中给 data 中的对象属性添加一个新的属性时会发生什么?如何解决?

<template> <div><ul><li v-for"value in obj" :key"value"> {{value}} </li> </ul> <button click"addObjB">添加 obj.b</button> </div> </template><script>export defau…

QT作业。。

1.使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;密码是否为&q…

【计算机视觉】Gaussian Splatting源码解读补充(一)

本文旨在补充gwpscut创作的博文学习笔记之——3D Gaussian Splatting源码解读。 Gaussian Splatting Github地址&#xff1a;https://github.com/graphdeco-inria/gaussian-splatting 论文地址&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gauss…

mac 用electron-builder打包,如何切换到notarytool

背景&#xff1a;altool已经被遗弃了&#xff0c;我们必须要使用notarytool进行打包,如何从altool切换到notarytool 在打包的配置中afterSign执行的js中 加入teamId和tool teamId在你的开发者账号中可以获取到