mirror of
https://github.com/wassname/denoising-diffusion-pytorch.git
synced 2026-09-10 12:01:08 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f762d33c17 |
@@ -61,9 +61,6 @@ def convert_image_to_fn(img_type, image):
|
|||||||
return image.convert(img_type)
|
return image.convert(img_type)
|
||||||
return image
|
return image
|
||||||
|
|
||||||
def l2norm(t):
|
|
||||||
return F.normalize(t, dim = -1)
|
|
||||||
|
|
||||||
# normalization functions
|
# normalization functions
|
||||||
|
|
||||||
def normalize_to_neg_one_to_one(img):
|
def normalize_to_neg_one_to_one(img):
|
||||||
@@ -239,9 +236,10 @@ class LinearAttention(nn.Module):
|
|||||||
class Attention(nn.Module):
|
class Attention(nn.Module):
|
||||||
def __init__(self, dim, heads = 4, dim_head = 32, scale = 10):
|
def __init__(self, dim, heads = 4, dim_head = 32, scale = 10):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.scale = scale
|
self.scale = dim_head ** -0.5
|
||||||
self.heads = heads
|
self.heads = heads
|
||||||
hidden_dim = dim_head * heads
|
hidden_dim = dim_head * heads
|
||||||
|
|
||||||
self.to_qkv = nn.Conv2d(dim, hidden_dim * 3, 1, bias = False)
|
self.to_qkv = nn.Conv2d(dim, hidden_dim * 3, 1, bias = False)
|
||||||
self.to_out = nn.Conv2d(hidden_dim, dim, 1)
|
self.to_out = nn.Conv2d(hidden_dim, dim, 1)
|
||||||
|
|
||||||
@@ -250,11 +248,12 @@ class Attention(nn.Module):
|
|||||||
qkv = self.to_qkv(x).chunk(3, dim = 1)
|
qkv = self.to_qkv(x).chunk(3, dim = 1)
|
||||||
q, k, v = map(lambda t: rearrange(t, 'b (h c) x y -> b h c (x y)', h = self.heads), qkv)
|
q, k, v = map(lambda t: rearrange(t, 'b (h c) x y -> b h c (x y)', h = self.heads), qkv)
|
||||||
|
|
||||||
q, k = map(l2norm, (q, k))
|
q = q * self.scale
|
||||||
|
|
||||||
sim = einsum('b h d i, b h d j -> b h i j', q, k) * self.scale
|
sim = einsum('b h d i, b h d j -> b h i j', q, k)
|
||||||
attn = sim.softmax(dim = -1)
|
attn = sim.softmax(dim = -1)
|
||||||
out = einsum('b h i j, b h d j -> b h i d', attn, v)
|
out = einsum('b h i j, b h d j -> b h i d', attn, v)
|
||||||
|
|
||||||
out = rearrange(out, 'b h (x y) d -> b (h d) x y', x = h, y = w)
|
out = rearrange(out, 'b h (x y) d -> b (h d) x y', x = h, y = w)
|
||||||
return self.to_out(out)
|
return self.to_out(out)
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
|
|||||||
setup(
|
setup(
|
||||||
name = 'denoising-diffusion-pytorch',
|
name = 'denoising-diffusion-pytorch',
|
||||||
packages = find_packages(),
|
packages = find_packages(),
|
||||||
version = '0.27.12',
|
version = '0.28.0',
|
||||||
license='MIT',
|
license='MIT',
|
||||||
description = 'Denoising Diffusion Probabilistic Models - Pytorch',
|
description = 'Denoising Diffusion Probabilistic Models - Pytorch',
|
||||||
author = 'Phil Wang',
|
author = 'Phil Wang',
|
||||||
|
|||||||
Reference in New Issue
Block a user