
Stable Diffusion XLã§çæç»åã®ç Žç¶»ãèµ·ããåé¡ã®è§£æãšå¯Ÿç
ãAnimagine XL V3ãåºå§ãã蟺ããããç¹å®ã®ããã³ãããå ¥åããããšã¢ãŒãã£ãã¡ã¯ããåºãŠãããšèšã話ããããããšèãããŠããŸãããã¢ãŒãã£ãã¡ã¯ãã£ãŠèšããããšå€ä»£å µåšãæãæµ®ãã¹ãŠããŸãããã§ãããããã§ããã¢ãŒãã£ãã¡ã¯ããšããã®ã¯ãã€ãºã§ã¯ãªãããã©ãªããå€ãªç»åãšããæå³ã§ããã
ã现ããäºã¯ãããã ãè§£æ±ºæ¹æ³ã ãæãããšããæ¹ã¯æåŸã®æ¹ã«ãã説æãèªãã§äžããã
ãå ¥åããããã³ããã®é çªã匷床ãå ¥ãæ¿ãããšåºãŠãããããããçºçæ¡ä»¶ãè§£ããªããšãã話ã§ãã©ãã«ãé²ãã€ãããããªè©±ã§ããããåå ãçªãæ¢ãããšãã話ãåã£ãŠããŸããã
ããŠãOOOã®ç Žç¶»ããã£ããã«è²ã 調ã¹ããšãããSDXLç³»ã®animagine3çã§çºçããŠããç Žç¶»ã«ã€ããŠåå ã倿ããŸããã
â ãããã (@oron1208) February 7, 2024
çµè«ã¯Enable emphasisãa1111ã®åŒ·èª¿èšç®ã§äžå ·åãèµ·ããŠãŸãã
ä¿®æ£æ¡ïŒãsetteingå ã®Enable emphasisãOFFã«ããŠåèµ·åããŠãã ãããïŒåçïŒâŠ pic.twitter.com/99NWOBEUwa
ãWeb-UIç³»åã§ã¯çºçããComfyãªã©ã§ã¯çºçããªãã匷床ã匷ããããšãã«äŒŒããããªã¢ãŒãã£ãã¡ã¯ããçŸãããšèšãããšãããWeb-UIã®åŒ·åºŠèšç®ã«ãã°ããããšããæšæž¬ã§ãã
ããªãã»ã©ããšæãåé¢ãåŠã ãªãšãæããŸããããšããã®ããWeb-UIã®åŒ·åºŠèšç®ã«ãã°ãããã®ãªãã°ããããŸã§ã«ãææãããŠããã¯ãã§ããããªãã ãAnimagineãæµè¡ãã ãããããããå ±åãããããã«ãªã£ãããã§ãã匷床èšç®ã®ãã°ãšãããšãäŸãã°(mikan:1.3)ãšãããšãã«ã¯mikanã®ãã³ãœã«ã1.3åã«åŒ·ããããããã§ããããã®èšç®åŒãç©ã¿äžãããšããã§åŒ·åºŠã10ã¿ããã«ãªãã®ã¯ã©ãã«ãããããªè©±ã§ãã(kotatu,(mikan:1.3), cat:1.5)ã®ãããªè€éãªããã³ããã§ãããšããŠããæãåãããŠåŒ·åºŠã2以äžã«ãªãããã«ãªããªããã°çºçããªãã¯ãã§ãã
ããããã匷床ã«é¢ä¿ããªããããã³ããã®é çªãå€ããã ãã§ãåºããªã©ã®å ±åããããŸããããšããããšã§ãæ§ã ãªå ±åãå å³ãããšåŒ·åºŠã ãã§ã¯èª¬æã§ããªãäºè±¡ãå€ãããã«æããŸãã
ãã§ã¯ãªã«ãåå ã ããããšã³ãŒããå·¡ãåéºã«åºãããããšã«ããŸããããã³ããã®åŠçãããWeb-UIã®ã³ãŒãã¯ãããããã«è¡ã£ããæ¥ããããŠçµæ§é£è§£ãªãã§ãããã
ããŸãå ¥åãããããã³ããã¯åŒ·åºŠããšã«åå²ãããŠåŠçãããŸãã
a girl in (kotatu:1.3) eating mikanã®ãããªããã³ããã ãš
a girl in : 1.0
kotatu : 1.3
eating mikan : 1.0ãã®ããã«ãªãããã§ãã匷床èšç®ã¯ããã§è¡ãããããã§ããããã°ãå ¥ã蟌ãäœå°ã¯ãªãããã«æããŸããã
ããã®åŸãããã³ããã¯tokenã®åœ¢ã«å€æãããtransformersã«æž¡ãããã³ãœã«ã«ãªããŸããæ¬¡ã«ãã³ãœã«ã«å¯ŸããŠããããã®åŒ·åºŠãæãåãããããšã§çæã«äœ¿ããããã³ãœã«ãšãªãããã§ããæªããã®ã¯åŒ·åºŠãæãåãããåšèŸºã®åŠçã ãšæããã®ã§ãããèŠãŠã¿ãŸãããã
ã以äžã¯ãã®ã³ãŒãã§ãã£ãŠãGPTã¡ããã®ãããããã解説ãä»ããŠããŸããmodulesãã©ã«ãã®sd_hijack_clip.pyã®äžã§ãã
def process_tokens(self, remade_batch_tokens, batch_multipliers):
tokens = torch.asarray(remade_batch_tokens).to(devices.device)
# remade_batch_tokensãPyTorchã®é
åã«å€æããæå®ãããããã€ã¹ã«ç§»åãã
if self.id_end != self.id_pad:
for batch_pos in range(len(remade_batch_tokens)):
index = remade_batch_tokens[batch_pos].index(self.id_end)
tokens[batch_pos, index+1:tokens.shape[1]] = self.id_pad
# SD1ãšSD2ã®æ±ããåºå¥ããããã®æ¡ä»¶åå²ãSD1ã§ã¯ããã£ã³ã°ãšããã¹ãçµäºã®ããã®ããŒã¯ã³ãåãã ããSD2ã§ã¯ç°ãªãã
# ãã®ãããã¯ã§ã¯ãåãããå
ã§ããã¹ãçµäºããŒã¯ã³ã®åŸã®äœçœ®ãããã£ã³ã°ããŒã¯ã³ã§åããã
z = self.encode_with_transformers(tokens)
# ããŒã¯ã³ãTransformerã¢ãã«ã«ãã£ãŠãšã³ã³ãŒããã
pooled = getattr(z, 'pooled', None)
# ãšã³ã³ãŒããããåºåããããŒã«ããã衚çŸãååŸãããããŒã«ããã衚çŸãååšããªãå Žåã¯Noneãè¿ãã
batch_multipliers = torch.asarray(batch_multipliers).to(devices.device)
original_mean = z.mean()
# ãšã³ã³ãŒããããåºåã®å¹³åå€ãèšç®ãããªãªãžãã«ã®å¹³åå€ãšããŠä¿æãã
z = z * batch_multipliers.reshape(batch_multipliers.shape + (1,)).expand(z.shape)
# ãããã®åèŠçŽ ã«ä¹ç®ããããã®åæ°ãé©çšãããããã«ããããšã³ã³ãŒãããã衚çŸã倿Žãããã
new_mean = z.mean()
# 倿ŽåŸã®ãšã³ã³ãŒããããåºåã®å¹³åå€ãèšç®ãã
z = z * (original_mean / new_mean)
# ãªãªãžãã«ã®å¹³åå€ã埩å
ããããã«ãæ°ããå¹³åå€ã§èª¿æŽãããããã«ãããã¢ãŒãã£ãã¡ã¯ããé²ãããšãç®çã
if pooled is not None:
z.pooled = pooled
# ããŒã«ããã衚çŸãååšããå Žåã倿ŽåŸã®ãšã³ã³ãŒããããåºåã«ãããåå²ãåœãŠããã
return z
# æçµçã«èª¿æŽããããšã³ã³ãŒããããåºåãè¿ããæªããåŠçããããŸããã
z = z * (original_mean / new_mean)ãããã°ã©ãã³ã°ã«ãããŠå²ãç®ã¯åžžã«æ³å®å€ã®åºåãçã¿åºãããã§ãããã®åŒãèŠããšãoriginal_meanã«æ¯ã¹ãŠnew_meanã®å€ãå°ãããã°ããã³ãœã«ã®åŒ·åºŠãæ³å®å€ã«å€§ãããªã£ãŠããŸãå¯èœæ§ããããŸããå ã®ã³ãŒãã«ãããšããããã¢ãŒãã£ãã¡ã¯ããé²ãããã ãšæžãããŠããŸãããããã¯XLã®ã¢ãã«ãåºãåã®ã³ãŒããªã®ã§ãXLãšçžæ§ãè¯ããªãå¯èœæ§ããããŸããã
ãããã§original_meanãšnew_meanã¯åŒ·åºŠèšç®ãè¡ãããåã®ãã³ãœã«ã®å¹³åå€ãšã匷床èšç®ãè¡ãããåŸã®ãã³ãœã«ã®å¹³åå€ã§ããéåžžã匷床ã¯1以äžã®å€ã䜿ãããã®ã§ã(original_mean / new_mean)ã®å€ã¯1ãã倧ããå€ããªãã¯ãã§ããããããã¯animagineã«ãããŠããã³ãœã«ããã€ãã¹ã«å€§ããæ¯ããŠããŸããããªtokenãããããã®tokenããèšç®ããããã³ãœã«ãæ··ãã£ãŠãããšã匷床ã匷ãããŠããŸã£ããšãã«(original_mean / new_mean)ã®èšç®çµæã倧ãããªã£ãŠããŸããçµæãšããŠç Žç¶»ãèµ·ããŠããŸãã®ã§ã¯ãªãã§ããããããããã¯ã匷床èšç®ã«ãã£ãŠoriginal_mean ãš new_meanã®ç¬Šå·ãå転ããŠããŸãå¯èœæ§ãèããããŸãã
ããšèšãããã§ããã®ä»®èª¬ãæ£ãããã©ããåé¡ã®åçŸã«ææŠããŠã¿ãŸããéé²ã«ããããtokenãæ¢ãã®ããããªã®ã§ããã¹ãŠã®tokenããçæããããã³ãœã«ã®meanãèšç®ããŸãããããšããã©ã¹ã«ãªããã³ãœã«ãšãã€ãã¹ã«ãªããã³ãœã«ãããããšãè§£ããŸãã(ããã¯SD1.Xã§ãåæ§ã®ããã§ã)ã

ããeniããšããèšèããã€ãã¹ã®ãã³ãœã«ã®äžã§äžçªåŒ·ãã1ããã©ã¹ã®ãã³ãœã«ã®äžã§äžçªåŒ·ããšèšãããšãè§£ããŸãããeniã£ãŠãªã«ïŒ
ãããã§ããããçµã¿åãããŠçæãããšãåé¡ãåçŸããããšãã§ããŸããã1ãšeniã ãã§ã¯çºçããŸããã§ãããã(1 2 am:1.3) eniãšããããã³ãããå ¥åãããšããç Žç¶»ãçºçããŸããã

ãããã§ãèšç®ãããoriginal_mean ãš new_meanã®å€ãèŠãŠã¿ããšãoriginal_mean -0.0003/ã new_meanã-7.8293e-05ãšãªããŸããããããããšãåçã¯3.83ã«ãªã£ãŠãç Žç¶»ã«ç¹ããããã§ãããããã«åŒ·åºŠã1.3ããäžããŠãããšãæ£è² ã®å転ãèµ·ããããã§ããããã®ããã³ããã®çµã¿åãããã¡ããã©æ£è² ã®å¢ç®ã«ãªãããã§ããããããå°ãã§ãããã³ãããå€ãããšç Žç¶»ã¯èµ·ããŸãããããã¯ãããŸã§ã®å ±åãšãäžèŽããŸããããã£ãŠã以äžã®ã³ãŒããç¡å¹åããã°ããããã§ããã
z = z * (original_mean / new_mean)ããšèšãããã§ç¡å¹åããŠã¿ãŸãã

ãçŽããŸããããäºæ³éãã§ããç¡å¹åããäºã«ããåé¡ããªãããã§ããããŠãA1111ãšforgeãã®ä»ããããã«issueãåºããŠã£ãŠèšãã®ãåŸ ã€ã®ããããªã®ã§ãããã解決ããscriptãäœããŸããããã€ãéãã€ã³ã¹ããŒã«ããŠãsettingsããèšå®ããã°ç¡å¹åã§ããããã«ããŠãããŸããã
https://github.com/hako-mikan/sd-webui-prevent-artifact