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

上期文章

【每日算法】理论:经典神经网络模型 刷题:二分法+双指针


一、上期问题

  • GroundingDino模型
  • SAM模型
  • stable diffusion相对于传统的diffusion的区别是什么,有什么改进
  • IOU、GIOU、DIOU、CIOU的区别
  • Transformer模型
  • BERT模型

二、理论问题

1、dreambooth微调模型的原理

DreamBooth是一种通过向模型注入自定义主题来微调扩散模型的技术。主要思想是用少量图片去训练特定目标,特定目标可以用特定标识符表示,另外增加一些常见类的图片,维持通用的能力。DreamBooth主要用于针对某一个特定的主体,生成在不同的场景、姿势和视角中的该主体上下文图像,不仅能够实现在不同的背景下合成主题的新颖再现,而且能够确保关键视觉特征的高保真度。
DreamBooth:个性化的文本到图像扩散模型

2、lora微调模型的原理

Lora是一种参数高效的微调方法,它通过引入低秩分解来降低需要更新的参数数量。即在原始的预训练模型旁边增加一个新的通路,通过前后两个矩阵A,B相乘,做一个降维再升维的操作。外挂层和预训练模型层维度都为d,A会先将维度d降维到r,B再升回d。一般是针对Q/K/V的投影矩阵W分解成低秩矩阵BA作为外挂,B一般以0初始化,A以高斯分布初始化。
LoRA(Low-Rank Adaptation)模型核心基础知识

3、controlnet模型的创新点

  • 可控生成:ControlNet是一个神经网络架构,该网络可以控制SD模型并让SD模型支持更多的输入条件。始的SD模型能接受prompt以及source image的输入,ControlNet提供了包括canny边缘,语义分割图,关键点,涂鸦在内的多种输入条件,拓展了SD的能力边界,使得AI绘画的可控性大幅提高。
  • 效率提升:ControlNet采用模型copy的方式,锁定部分的权重不变,微调可训练部分,没有任何权重是从头开始训练的,所以我们使用小批量数据集就能对控制条件进行学习训练,不至于造成过度拟合,同时不会破坏Stable Diffusion模型原本的能力,保持从数十亿图像中学习的大型模型的生产就绪质量。

ControlNet核心基础知识

4、解释focal loss

focal loss不仅能较好的解决正负样本比例不均的问题,还能调节困难样本的权重进而提升算法效果。它实际上是对交叉熵损失的重塑,计算公式为:
F L ( p t ​ ) = − α t ( 1 − p t ​ ) γ l o g ( p t ​ ) FL(p_t​)=−\alpha _t(1−p_t​)^γlog(p_t​) FL(pt)=αt(1pt)γlog(pt)

其中, p t p_t pt是预测概率与实际标签之间的乘积, α t \alpha_t αt用于平衡正负样本本身的比例不均。 γ \gamma γ是一个可调参数,用于调节困难样本的权重。当 γ \gamma γ越大时,模型对于困难样本的关注度越高。

5、如何判断 GAN 收敛或者不稳定

理论上应该是生成器loss逐步下降,判别器 loss 逐步上升,但是这是不一定的,(必须要保证判别器的判别能力),直观上要看最后生成图片的质量。

前序问题:GAN模型

【论文精读】GAN:Generative Adversarial Nets 生成对抗网络

6、Stable Diffusion模型的图像优化模块是什么架构

stable diffusion模型的图像优化模块由一个U-Net网络和一个Schedule算法共同组成。其中U-Net网络负责预测噪声,不断优化生成过程,在预测噪声的同时不断注入文本语义信息。而schedule算法对每次U-Net预测的噪声进行优化处理(动态调整预测的噪声,控制U-Net预测噪声的强度),从而统筹生成过程的进度。

前序问题:

Stable Diffusion(SD)核心基础知识——(文生图、图生图)

三、力扣刷题回顾-数组部分

上期涉及题目:

本期题目:


209.长度最小的子数组:

  • 给定输入:一个含有 n 个正整数的数组和一个正整数 target
  • 要求输出:
    • 该数组中满足其总和大于等于target的长度最小的连续子数组,并返回其长度
    • 如果不存在符合条件的子数组,返回 0

59.螺旋矩阵II:

  • 给定输入:一个正整数 n
  • 要求输出:要求生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

对比分析:
209.长度最小的子数组一题主要运用的是滑动窗口法,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。59.螺旋矩阵II一题没有特殊的方法可以套用,只能模拟顺时针画矩阵的过程,由外向内一圈一圈这么画下去。


209.长度最小的子数组

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        sum=0
        i=0
        min_len=float('inf')
        for j in range(len(nums)):
            sum+=nums[j]
            while sum >= target:
                min_len=min(j-i+1,min_len)
                sum-=nums[i]
                i+=1
        return min_len if min_len != float('inf') else 0

59.螺旋矩阵II

  • 先创建一个二维数组作为正方形矩阵,然后确定循环次数,在每个循环内部,依次遍历四条边
  • 在整个过程中需要确定填充的位置,所以需要设定startx,starty作为坐标,同时需要设置偏移量offset确保每次循环往正方形内部偏移一格
class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        nums=[[0]* n for _ in range(n)] #创建一个二维数组作为正方形矩阵
        startx,starty=0,0 #起始坐标
        loop,mid=n//2,n//2 #迭代次数,矩阵中心点
        count=1
        for offset in range(1,loop+1): #每循环一层,偏移量加1
            #顺时针依次填写四条边
            for i in range(starty,n-offset):
                nums[startx][i]=count
                count+=1
            for i in range(startx,n-offset):
                nums[i][n-offset]=count
                count+=1
            for i in range(n-offset,starty,-1):
                nums[n-offset][i]=count
                count+=1
            for i in range(n-offset,startx,-1):
                nums[i][starty]=count
                count+=1
            startx+=1
            starty+=1
        if n%2!=0: #n为奇数时,填充中心点
            nums[mid][mid]=count
        return nums

参考:
代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值