docs/si/diffusion/stable_diffusion/latent_diffusion.html
ගුප්ත විසරණය ආකෘති රූප අවකාශය සහ ගුප්ත අවකාශය අතර සිතියම් ගත කිරීම සඳහා ස්වයංක්රීය එන්කෝඩරයක් භාවිතා කරයි. විසරණ ආකෘතිය සැහැල්ලු අවකාශය මත ක්රියා කරයි, එය පුහුණු කිරීම පහසු කරයි. එය පදනම් වී ඇත්තේ ගුප්ත විසරණ ආකෘති සමඟ කඩදාසි අධි-විභේදන රූප සංශ්ලේෂණය මත ය.
ඔවුන් පෙර පුහුණු කරන ලද ස්වයංක්රීය එන්කෝඩරයක් භාවිතා කරන අතර පෙර පුහුණු කරන ලද ස්වයංක්රීය එන්කෝඩරයේ ගුප්ත අවකාශය මත විසරණය යූ-නෙට් පුහුණු කරයි.
සරල විසරණය ක්රියාත්මක කිරීම සඳහා අපගේ DDPM ක්රියාත්මක කිරීම වෙත යොමු වන්න. βtකාලසටහන්αt ආදිය සඳහා අපි එකම අංකන භාවිතා කරමු.
24fromtypingimportList2526importtorch27importtorch.nnasnn2829fromlabml\_nn.diffusion.stable\_diffusion.model.autoencoderimportAutoencoder30fromlabml\_nn.diffusion.stable\_diffusion.model.clip\_embedderimportCLIPTextEmbedder31fromlabml\_nn.diffusion.stable\_diffusion.model.unetimportUNetModel
මෙය යූ-නෙට් වටා හිස් දවටන පන්තියකි. චෙක්පොයින්ට් බර පැහැදිලිව සිතියම් ගත කිරීමට අවශ්ය නොවන පරිදි කොම්විස්/ස්ථාවර විසරණය හා සමාන ආකෘති ව්යුහයක් තිබීම සඳහා අපි මෙය තබා ගනිමු.
34classDiffusionWrapper(nn.Module):
42def\_\_init\_\_(self,diffusion\_model:UNetModel):43super().\_\_init\_\_()44self.diffusion\_model=diffusion\_model
46defforward(self,x:torch.Tensor,time\_steps:torch.Tensor,context:torch.Tensor):47returnself.diffusion\_model(x,time\_steps,context)
පහත සඳහන් සංරචක අඩංගු වේ:
50classLatentDiffusion(nn.Module):
60model:DiffusionWrapper61first\_stage\_model:Autoencoder62cond\_stage\_model:CLIPTextEmbedder
unet_model ගුප්ත අවකාශයේ ශබ්දයϵcond(xt,c) පුරෝකථනය කරන යූ-නෙට් යautoencoder මෙම ස්වයං ආකේතකය වේclip_embedderCLIP කාවැද්දීම් උත්පාදක යන්ත්රයlatent_scaling_factor ගුප්ත අවකාශය සඳහා පරිමාණ සාධකය වේ. යූ-නෙට් වෙත පෝෂණය කිරීමට පෙර ඔටෝඑන්කෝඩරයේ කේතීකරණ මේ මගින් පරිමාණය කරනු ලැබේ.n_steps යනු විසරණය කිරීමේ පියවර ගණන වේT.linear_startβකාලසටහනේ ආරම්භය වේ.linear_endβකාලසටහනේ අවසානයයි.64def\_\_init\_\_(self,65unet\_model:UNetModel,66autoencoder:Autoencoder,67clip\_embedder:CLIPTextEmbedder,68latent\_scaling\_factor:float,69n\_steps:int,70linear\_start:float,71linear\_end:float,72):
84super().\_\_init\_\_()
Compvis/ස්ථාවර විසරණ ලෙස එම ආකෘතිය ව්යුහය තබා ගැනීමටU-ශුද්ධ ආවරණය කරනවා.
87self.model=DiffusionWrapper(unet\_model)
ස්වයංක්රීය එන්කෝඩරය සහ පරිමාණ සාධකය
89self.first\_stage\_model=autoencoder90self.latent\_scaling\_factor=latent\_scaling\_factor
CLIP කාවැද්දීම් උත්පාදක යන්ත්රය
92self.cond\_stage\_model=clip\_embedder
පියවර ගණනT
95self.n\_steps=n\_steps
βකාලසටහන
98beta=torch.linspace(linear\_start\*\*0.5,linear\_end\*\*0.5,n\_steps,dtype=torch.float64)\*\*299self.beta=nn.Parameter(beta.to(torch.float32),requires\_grad=False)
αt=1−βt
101alpha=1.-beta
αtˉ=∏s=1tαs
103alpha\_bar=torch.cumprod(alpha,dim=0)104self.alpha\_bar=nn.Parameter(alpha\_bar.to(torch.float32),requires\_grad=False)
106@property107defdevice(self):
111returnnext(iter(self.model.parameters())).device
113defget\_text\_conditioning(self,prompts:List[str]):
117returnself.cond\_stage\_model(prompts)
එන්කෝඩර් ප්රතිදානය බෙදා හැරීමකි. අපි එයින් නියැදි කර පරිමාණය කිරීමේ සාධකය මගින් ගුණ කරමු.
119defautoencoder\_encode(self,image:torch.Tensor):
126returnself.latent\_scaling\_factor\*self.first\_stage\_model.encode(image).sample()
අපි පරිමාණ සාධකය අනුව පරිමාණය කර විකේතනය කරමු.
128defautoencoder\_decode(self,z:torch.Tensor):
134returnself.first\_stage\_model.decode(z/self.latent\_scaling\_factor)
ගුප්ත නිරූපණයxt, කාල පියවරt සහ කන්ඩිෂනේෂන් සන්දර්භය අනුව ශබ්දය පුරෝකථනය කරන්නc.
ϵcond(xt,c)
136defforward(self,x:torch.Tensor,t:torch.Tensor,context:torch.Tensor):
145returnself.model(x,t,context)