赞
踩
【每日算法】理论: 扩散模型+深度学习基础 刷题:力扣哈希表回顾
Classifier Guidance 与 Classifier-Free Guidance
VAE编解码整体是⼀个有损过程。VAE尽管是隐变量模型,但只能推断真实分布的近似值,隐变量分布与真实分布之间的 gap 是不可度量的。可以通过优化模型结构、提升采样效率等方法减少损失。完全不减少损失的⽅案就是原图反贴。
前序问题:
AutoEncoder自动编码器、VAE变分自编码器、VQVAE量子化(离散化)的自编码器
Dalle2通过自回归的方式逐个预测像素点,最终生成符合描述的图像。SD加⼊了Latent-Space(⼤幅降低特征维度),以及交叉注意⼒机制+Unet的步骤,更精细更可控。
前序问题:
【论文精读】DALLE2: Hierarchical Text-Conditional Image Generation with CLIP Latents
Stable Diffusion(SD)核心基础知识——(文生图、图生图)
大多数目标检测算法(稠密预测)在得到最终的预测结果时,特征图的每个位置都会输出多个检测结果,整个特征图上会出很多个重叠的框。例如要检测一辆车,可能会有多个bbox都把这辆车给框了出来,因此需要从这些bbox中选出框得最好的,删除掉其它的。NMS非极大值抑制的功能就是筛选出一定区域内属于同一种类得分最大的框。NMS算法在每轮选取置信度最大的 Bounding Box ,接着关注所有剩下的 BBox 中与选取的 BBox 有着高重叠(IoU)的,对于IOU>阈值的相邻的检测框,NMS将其得分暴力置零,相当于直接舍弃。这一轮选取的 BBox 会被保留输出,且不会在下一轮出现。接着开始下一轮,重复上述过程:选取置信度最大 BBox ,抑制高 IoU BBox。
NMS 系列:soft,softer,weighted,iou-guided, Diou, Adaptive
CNN(卷积神经网络)和MLP(多层感知机)都是神经网络模型,但CNN在处理图像和空间数据时具有优势。CNN使用卷积层和池化层可以捕捉局部特征和空间结构,减少了参数数量,并且在图像处理等领域表现出色。
stable diffusion首先通过⽂本/图像编码器将⽂本/图像信息编码,然后利用交叉注意⼒机制将信息引⼊扩散模型。SD 的 U-Net 既用到了自注意力,也用到了交叉注意力。自注意力用于图像特征自己内部信息聚合。交叉注意力用于让生成图像对齐文本,其 Q 来自图像特征,K, V 来自文本编码。
前序问题:
Stable Diffusion(SD)核心基础知识——(文生图、图生图)
上期涉及题目:
本期题目:
1. 两数之和:
第454题.四数相加II:
383. 赎金信:
对比分析:
当遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。1. 两数之和问题中可以通过一个哈希表来存储已经遍历过的元素对应的下标,就可以在遍历一个元素之后,判断target-当前元素是否也出现在这个哈希表里过,如果出现了就说明存在满足和为target的一个两数组合。第454题.四数相加II问题可以看做是两个数之和的两数之和问题,因此只需要在1. 两数之和问题的基础上增加一层遍历即可。具体来说就是先遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到字典中,然后遍历大C和大D数组,统计0-(c+d) 在dict中出现的情况。383. 赎金信和之前做过的242.有效的字母异位词很像,242.有效的字母异位词相当于求 字符串a 和 字符串b 是否可以相互组成 ,而这道题目是求 字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。
这里哈希表的作用在于找到需要的值所对应的索引位置。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
records=dict()
for index,value in enumerate(nums):
if target-value in records:
return [records[target-value],index]
records[value]=index
return []
四数相加之和为0,可以拆分成两个两数相加。由于该题的要求是得到满足条件的组合数,因此哈希表的作用在于记录两数相加结果的可能性次数。
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
record=dict()
for i in range(len(nums1)):
for j in range(len(nums2)):
record[nums1[i]+nums2[j]]=record.get(nums1[i]+nums2[j],0)+1
count=0
for i in range(len(nums3)):
for j in range(len(nums4)):
target=nums3[i]+nums4[j]
if 0-target in record:
count+=record[0-target]
return count
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
ransomNote_count=[0]*26
magazine_count=[0]*26
for i in ransomNote:
ransomNote_count[ord(i)-ord('a')]+=1
for j in magazine:
magazine_count[ord(j)-ord('a')]+=1
return all(ransomNote_count[i]<=magazine_count[i] for i in range(26))
参考:
代码随想录算法训练营第五天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和,总结
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。