【每日算法】理论: DALLE 系列 刷题:力扣链表回顾

上期文章

【每日算法】理论:AIGC模型 刷题:力扣链表操作


一、上期问题

  • LAMA Inpaint
  • IP Adaper模型
  • Anydoor模型
  • vit(Vision Transformer)架构
  • MAE模型
  • CLIP模型

二、本期问题

1、SDXL对于Stable Diffusion在网络架构上的具体改进

Stable Diffusion XL是一个二阶段的级联扩散模型,除了一个和Stable Diffusion基本一致的base模型之外,SDXL还增加一个单独的基于Latent的Refiner模型,来提升图像的精细化程度。在base模型中,SDXL对Stable Diffusion原先的U-Net,VAE,CLIP Text Encoder三大件也都做了相应的改进:

  • 对于VAE ,SDXL增加条件变分自编码器来提升潜在空间的表达能力,基于SD同样的架构采用了更大的batch size(256 vs 9)重新训练encoder,同时对模型的参数采用了EMA(指数移动平均),从而改善生成图片的局部和高频细节;
  • 对于U-Net,SDXL的U-Net结构发生了改变,从之前的4stage变成了3stage,参数量上SDXL的U-Net模型参数量相比SD模型增加了3倍左右,这主要是因为增加了Transformer Blocks (自注意力 + 交叉注意力) 来增强特征提取和融合能力;
  • 对于CLIP Text Encoder,SDXL增加了两个大小不同的编码器来提升文本理解和匹配能力。

Stable Diffusion XL(SDXL)核心基础知识

前序问题:SDXL模型

2、Transformer为什么可以并行

Transformer模型之所以能够高效地进行并行计算,主要得益于其自注意力机制和层与层之间的独立性。在自注意力层中,每个输入元素都会计算与其他所有元素的关联度,这个过程可以独立地对每个元素进行,不需要考虑序列中元素的顺序。因此自注意力层的计算可以并行化,因为每个元素的计算不依赖于其他元素的计算结果。另外,Transformer是由多个编码器和解码器层堆叠而成,每一层的输出仅依赖于前一层的输出。这种层与层之间的独立性使得模型的每一层都可以独立地进行计算,从而实现层级的并行处理。

前序问题:Transformer模型

3、卷积神经网络中的归纳偏置

深度学习中的归纳偏置指的是模型的先验知识,或者关于目标函数的必要假设。卷积神经网络中的Inductive Bias 包括局部性 (Locality) 和 空间不变性 (Spatial Invariance) / 平移等效性 (Translation Equivariance)。局部性假设图片上相邻的区域会有相邻的特征,靠得越近的东西相关性能也就越强,局部性可以控制模型的复杂度。而平移等变性满足 f ( g ( x ) ) = g ( f ( x ) ) f (g(x)) = g( f(x) ) f(g(x))=g(f(x)) f f f为卷积, g g g为平移, f f f函数和 g g g函数的顺序不影响结果。由于卷积核是一样的,无论先做卷积还是平移,卷积核相当于模板,不论图片中同样的物体移到哪里,只要是同样的输入进来,遇到同样的卷积核,其输出永远是一样的。利用平移等变形可以很好的提高模型的泛化能力。

4、DALLE2

DALLE2是一种层级式的基于CLIP特征的文生图模型。层级式的意思是说在图像生成时,先生成64*64再生成256*256,最终生成1024*1024的高清大图。DALLE2提出了一个两阶段模型。第一阶段是prior先验模型,根据给定的文本描述生成类似于CLIP的图像特征(图像嵌入)。第二阶段是decoder解码器,根据上述图像特征(以图像嵌入为条件)生成一个图像。训练过程中,prior先验模型生成的图像特征会参照CLIP生成的对应文本的图像特征。

【论文精读】DALLE2: Hierarchical Text-Conditional Image Generation with CLIP Latents

前序问题:DALLE模型

5、DALLE3

DALLE3的核心思想是通过更好的文本标注让图像生成质量提升。首先训练一个图片标注器用于生成标注,然后使用它来重新捕获训练数据集。在实际应用上,DALLE 3 可以借助大语言模型比如ChatGPT,用 ChatGPT 来创建、拓展和优化 prompt。这样一来,用户无需在 prompt 上花费太多时间。

【论文精读】DALLE3:Improving Image Generation with Better Captions 通过更好的文本标注改进图像生成

6、SAM模型的数据集构建过程

SAM的训练数据通过辅助人工标注、人工半监督标注和全自动标注三个阶段产生。

  • 辅助人工标注阶段采用公开的分割数据进行训练,由标注人员手动单击前景或背景来矫正mask,标注矫正后,使用新标注的mask对SAM重新训练;
  • 人工半监督标注阶段利用第一阶段的数据训练一个目标检测模型,用检测框作为SAM的prompt输入,输出的分割结果中,人工只需要关注置信度得分低的分割图进行修正,并补充SAM遗漏的结果;
  • 全自动标注阶段用前边数据训练好的SAM在海量数据上产生分割的结果,然后再通过规则过滤掉部分可能错误的结果。

SAM:segment anything model——一个通用的图像分割基础模型

三、力扣刷题回顾-链表

上期涉及题目:

本期题目:


面试题 02.07. 链表相交:

  • 给定输入:两个单链表的头节点headA、headB
  • 要求输出:返回两个单链表相交的起始节点,没有交点返回null

142.环形链表II

  • 给定输入:一个链表的头节点 head
  • 要求输出:返回链表入环的第一个节点,链表无环返回null

对比分析:
面试题 02.07. 链表相交142.环形链表II都是链表题目中涉及到复杂结构的题目。需要运用到两个节点指正,结合背后的数学原理,通过两个节点指针的关系求解。


面试题 02.07. 链表相交

求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,之后两个指针一起移动,如果节点相同则说明链表相交。注意是节点相同,不是节点的值相同。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        curA,curB=headA,headB
        lenA,lenB=0,0
        while curA:
            lenA+=1
            curA=curA.next
        while curB:
            lenB+=1
            curB=curB.next
        curA,curB=headA,headB
        if lenA>lenB:
            curA,curB=curB,curA
            lenA,lenB=lenB,lenA
        for i in range(lenB-lenA):
            curB=curB.next
        while curA:
            if curA==curB:
                return curA
            else:
                curA=curA.next
                curB=curB.next
        return None

142.环形链表II

使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        slow,fast=head,head
        while fast is not None and fast.next is not None:
            slow=slow.next
            fast=fast.next.next
            if slow==fast:
                slow=head
                while slow!=fast:
                    slow=slow.next
                    fast=fast.next
                return slow
        return None

参考:
代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值