[{"data":1,"prerenderedAt":253},["ShallowReactive",2],{"studies-it-animegen":3},{"id":4,"title":5,"body":6,"category":231,"description":81,"extension":232,"featured":233,"links":234,"meta":235,"navigation":233,"order":236,"path":237,"period":238,"role":239,"seo":240,"slug":241,"stack":242,"stem":250,"subtitle":251,"summary":234,"__hash__":252},"projects_it\u002Fprojects\u002Fit\u002Fanimegen.md","AnimeGen",{"type":7,"value":8,"toc":222},"minimark",[9,14,31,34,38,45,67,71,74,85,89,95,105,115,133,147,157,161,205,209,216],[10,11,13],"h2",{"id":12},"il-contesto","Il contesto",[15,16,17,18,22,23,26,27,30],"p",{},"L'esame di ",[19,20,21],"strong",{},"Computer Vision"," poneva una sfida concreta: dati due pannelli manga consecutivi, generare un breve video di transizione in stile anime che li colleghi. Il punto di partenza è ",[19,24,25],{},"ToonCrafter",", un modello diffusion image-to-video recente, pensato per l'interpolazione di cartoni animati, applicato al dataset ",[19,28,29],{},"Manga109",".",[15,32,33],{},"Il problema interessante non è \"far girare il modello\" — è che ToonCrafter nasce per l'animazione occidentale a colori, e i manga sono un dominio diverso. Applicarlo as-is produce risultati mediocri per ragioni precise.",[10,35,37],{"id":36},"le-tre-debolezze-di-dominio","Le tre debolezze di dominio",[15,39,40,41,44],{},"Prima di toccare il modello, ho isolato ",[19,42,43],{},"perché"," la baseline falliva sui manga:",[46,47,48,55,61],"ol",{},[49,50,51,54],"li",{},[19,52,53],{},"Balloon di testo"," — i fumetti contengono nuvolette di testo che negli anime non esistono. Il generatore le interpreta come oggetti da animare e si confonde.",[49,56,57,60],{},[19,58,59],{},"Rumore di retino"," (screentone) — il line-art scansionato porta texture regolari che il modello scambia per struttura semantica.",[49,62,63,66],{},[19,64,65],{},"Frame rate basso"," — le clip generate hanno pochi frame, con incoerenza temporale percepibile a occhio.",[10,68,70],{"id":69},"la-pipeline","La pipeline",[15,72,73],{},"Una catena pre\u002Fpost-processing che affronta tutte e tre le debolezze:",[75,76,82],"pre",{"className":77,"code":79,"language":80,"meta":81},[78],"language-text","Manga109\n  → balloon removal      (LaMa inpainting, guidato dai bounding box ground-truth di Manga109)\n  → preprocessing LAB    (bilateral → CLAHE → unsharp: denoise + edge sharpening)\n  → ToonCrafter          (generazione a 16 frame)\n  → RIFE 4×              (upsampling temporale del frame rate)\n","text","",[83,84,79],"code",{"__ignoreMap":81},[10,86,88],{"id":87},"decisioni-tecniche-chiave","Decisioni tecniche chiave",[15,90,91,94],{},[19,92,93],{},"1. Balloon removal con ground-truth, non euristiche."," L'inpainting LaMa è guidato dai bounding box delle nuvolette già annotati in Manga109 — niente detector custom da addestrare, si sfrutta il dataset per quello che offre.",[15,96,97,100,101,104],{},[19,98,99],{},"2. Preprocessing nello spazio colore LAB."," Denoise e sharpening operano sulla luminanza separata dal colore: la pipeline ",[83,102,103],{},"bilateral → CLAHE → unsharp"," pulisce il retino senza distruggere i contorni del tratto.",[15,106,107,110,111,114],{},[19,108,109],{},"3. Metrica di stile ripensata."," Il lavoro precedente usava una style metric basata su matrice di Gram a 3 canali — poco informativa su manga in scala di grigi. L'ho sostituita con una formulazione basata su ",[19,112,113],{},"VGG19",", più sensata per line-art monocromatico.",[15,116,117,120,121,124,125,128,129,132],{},[19,118,119],{},"4. Model-sharding manuale per generare a 16 frame."," La configurazione canonica a 16 frame non entrava nella memoria di un ambiente ",[19,122,123],{},"Kaggle T4 × 2",". Ho implementato uno sharding manuale del modello: OpenCLIP e il VAE su ",[83,126,127],{},"cuda:0",", la U-Net di diffusione su ",[83,130,131],{},"cuda:1",". Vincolo hardware risolto con allocazione esplicita invece di ridurre la qualità.",[15,134,135,138,139,142,143,146],{},[19,136,137],{},"5. Valutazione su due assi, quantitativo e percettivo."," Un'",[19,140,141],{},"ablation 2×2×2"," su N=40 coppie da 5 titoli misura il contributo di ogni stadio; uno ",[19,144,145],{},"user study 2-AFC pairwise"," (scelta forzata tra due clip, con opzione \"nessuna preferenza\") valida la preferenza percettiva con un test binomiale a due code sui voti decisivi.",[15,148,149,152,153,156],{},[19,150,151],{},"6. Demo interattiva."," Una webapp ",[19,154,155],{},"Streamlit"," permette di selezionare una qualsiasi delle 40 coppie e confrontarne il video sotto tutte e 8 le configurazioni dell'ablation, con le metriche per-clip a fianco.",[10,158,160],{"id":159},"numeri","Numeri",[162,163,164,174,186,192,198],"ul",{},[49,165,166,167,170,171],{},"Pipeline completa vs baseline ToonCrafter vanilla: ",[19,168,169],{},"−61,3% LPIPS",", ",[19,172,173],{},"−34,5% Warping Error",[49,175,176,177,180,181,185],{},"Il contributo dominante viene dalla ",[19,178,179],{},"frame interpolation temporale"," — preprocessing e balloon removal interagiscono in modo ",[182,183,184],"em",{},"non-monotono"," con le metriche a valle",[49,187,188,191],{},[19,189,190],{},"Ablation 2×2×2"," · N=40 coppie · 5 titoli",[49,193,194,197],{},[19,195,196],{},"User study 2-AFC",": 10 rispondenti, 40 voti decisivi per asse di confronto",[49,199,200,201,204],{},"~",[19,202,203],{},"1.900 righe"," Python (moduli core: preprocessing, balloon removal, metrics, estrazione pannelli + script di pipeline)",[10,206,208],{"id":207},"cosa-mi-porto-dietro","Cosa mi porto dietro",[15,210,211,212,215],{},"Adattare un modello fuori dal suo dominio insegna due cose. La prima: ",[19,213,214],{},"il guadagno più grosso è venuto dalla parte meno glamour"," — l'interpolazione di frame, non il fine-tuning del diffusion model. La seconda: una metrica sbagliata mente con sicurezza. La style metric a 3 canali dava numeri precisi e inutili su immagini in scala di grigi; finché non l'ho sostituita, l'ablation raccontava una storia falsa.",[15,217,218,219,30],{},"Progetto sviluppato all'",[19,220,221],{},"Università degli Studi di Bari Aldo Moro",{"title":81,"searchDepth":223,"depth":223,"links":224},2,[225,226,227,228,229,230],{"id":12,"depth":223,"text":13},{"id":36,"depth":223,"text":37},{"id":69,"depth":223,"text":70},{"id":87,"depth":223,"text":88},{"id":159,"depth":223,"text":160},{"id":207,"depth":223,"text":208},"studies","md",true,null,{},11,"\u002Fprojects\u002Fit\u002Fanimegen","2026","Computer Vision · MSc curriculum AI",{"title":5,"description":81},"animegen",[243,244,245,246,247,248,249,155],"Python","PyTorch","ToonCrafter (diffusion)","LaMa inpainting","RIFE","OpenCV","VGG19 · LPIPS","projects\u002Fit\u002Fanimegen","Pipeline di diffusion interpolation che genera brevi transizioni in stile anime tra due pannelli manga consecutivi — ToonCrafter adattato al dominio con balloon removal, preprocessing e frame interpolation.","X7BhaAg8MaJAHNgSic5BNcd8MktVj3QGBapn5dwqKJQ",1781346783287]