首頁 Watashi Games
← 返回指南列表

深入內部:通用 AI 模型為何在漫畫上色上失敗

通用模型看到的是一張圖。漫畫頁面是由分格構成的序列,其中有反覆出現的角色、印刷文字和純黑的格間空隙。本文說明這個差別的代價,以及我們如何彌合它。

深入內部:通用 AI 模型為何在漫畫上色上失敗

看似合理不等於正確

任何通用影像模型都能為漫畫頁面上色。貼一頁進去,不到一分鐘就有結果,乍看之下還不錯。問題從第二頁開始:同一個角色換了個髮色回來。接著是對話框裡的文字被微妙地重畫了。再接著是純黑的格間空隙被憑空生成的畫面填滿。

這並不是說模型不會畫畫。它正在做被訓練去做的事:產出一張看似合理的影像。可漫畫頁面不是一張影像。它是一串分格,共用同一批角色,印著真實的文字,由結構性的黑色分隔,而且屬於必須與上一話銜接的章節。以單頁合理為目標本身就是錯的,再多的提示詞也改變不了目標。

Watashi Colorizer 正是圍繞這個差別打造的。以下是由此得出的六項工程決策。它們並不新奇,但每一項的存在都是因為我們親眼見過缺了它會壞掉什麼。

Black-and-white manga page before colorization黑白
The same page, AI-colorized彩色
一頁,作為一頁來上色:角色在每一格裡保持相同的髮色、瞳色與服裝,黑色格間空隙仍然是黑的,對白也仍然是那段對白。

1. 用實測對比而非新聞稿來選擇模型權重

多數上色工具只是一層薄殼:使用者圖片送到公開 API,彩色圖片再傳回來。這樣一來,殼的水準就止步於 API 供應商本季推出的水準,工具也會繼承該供應商的所有盲點,包括它拒絕處理的內容。

我們在自有 GPU 上執行自有權重,並且靠實測而非口碑來選擇。候選模型會在相同的真實頁面上與線上模型正面對決,由人工把結果並排比較。多數候選會落敗。勝出者靠證據取勝,落敗紀錄也會寫下來,以免同一條死路被探索兩次。

目前的引擎是針對上色做過專門微調的權重,而不是通用的現成模型。這是膚色能被讀成膚色、背景會被補完而不是留成灰色的最主要原因。

2. 逐句驗證過的指令

隨每頁一同送出的指令並非一次寫成。它是透過單獨測試每一句、只保留能可測量地改變輸出的部分,一點一點拼起來的。

這種做法之所以重要,是因為寫提示詞充滿了與直覺相反的結論。我們自己工作中最清楚的例子是:一句列舉膚色絕不該出現的顏色的指令,恰恰產生了膚色正是那些顏色的頁面。點名你不想要的東西,只會讓它更可能出現而不是更少。修正辦法是只描述正確結果應該是什麼樣。靠推理我們永遠發現不了這一點,是靠測試一句、看結果才發現的。

因此現用的指令集很短,每一部分都憑本事留下:確定膚色色調、補完每一處背景、保持解剖結構就是畫出來的形狀、精確保留線稿與文字。去掉其中任何一條,某個特定的問題就會回來。

3. 把頁面更多地交給模型

影像模型在固定的內部尺寸下工作。你送進一張大掃描圖,它在模型看到之前就被縮小了,於是頁面上一切細小之處,遠景中的臉、背景招牌上的字、細密的排線,都以糊團的形式抵達。模型接著就為糊團上色,因為它拿到的只有這些。

我們是在追查一個任憑怎麼調提示詞都不見好轉的上色缺陷時,用慘痛方式學到這一點的。把同一區域裁出來單獨送出,每一次都能正確返回。模型一直知道答案,只是從來沒能看清題目。

因此頁面會以引擎真正能用上的最大尺寸讀入,而不是某個圖省事的預設值,並且輸出會以你上傳檔案的完全相同尺寸返回。

Black-and-white manga page before colorization黑白
The same page, AI-colorized彩色
細節得以保留,是因為頁面按原始尺寸送出,而不是某個圖省事的預設值。小小的臉、背景招牌與細密排線在上色後依然清晰可辨。

4. 把頁面當作分格來讀,而不是一個矩形

漫畫頁面有一套通用模型沒理由在意的結構:分格邊框、格間空隙,以及必須保持純黑的分隔。把它當矩形上色,這套結構就被當成紋理處理,於是你就會看到格間空隙裡長出憑空捏造的風景。

我們的流水線在任何上色之前先偵測分格邊界與畫面帶,而且只在真實邊界處切分。從分格中間切開比不切更糟,因為兩半會被獨立上色而永遠對不上,所以切分器寧可拒絕也不去猜。

  • 分格感知的切分,讓每個區域都獲得模型的全部注意力
  • 格間空隙與黑階的保留,讓結構性的黑色繼續是結構
  • 調色盤錨定,讓反覆出現的角色保持相同的髮色、瞳色與服裝
  • 文字與線稿保留,讓對白挺過上色過程

再配合調色盤錨定,也就是把角色的顏色固定下來而不是每次重猜,整組角色才能在一頁之內、乃至整章之內保持設定,而不是每頁漂移一個色階。

5. 一個別人都不處理的頁面模式

日本的印刷審查會在身體上壓一道硬邊黑白條。對上色模型來說這是真正的歧義:條下沒有可供參考的膚色資訊,於是它憑空編造,而且每次編造的都不一樣。在我們的測試中,同一模型跑四次,同一頁分別給出了棕色、灰色、橘色和粉色。

這種失敗靠取樣解決不了,因為你無法透過取平均得到輸入中根本不存在的資訊。必須明確告訴模型:這道條是什麼,它下面是什麼。所以審查處理是一個專用模式,你在需要的頁面上開啟它。

它做成可選項的理由值得直說:向一個並沒有看到審查條的模型描述審查條,會讓模型自己加一道上去。這條指令很強,正因如此才把它限定在適用的頁面,而不是對所有工作一直生效。

6. 把等待時間當作產品的一部分

自建 GPU 意味著要為其付費,也就意味著閒置時會讓它休眠,也就意味著安靜一段時間後的第一個請求要等硬體喚醒。這是不做薄殼所付出的真實代價,而假裝沒有這回事,正是讓使用者在工作中途流失的方式。

所以引擎會在你選中該模型的那一刻就開始預熱,早於你挑完檔案,這讓多數工作的等待完全消失。當等待不可避免時,進度畫面會用直白的話說明,而不是顯示一個它兌現不了的倒數計時。

一個走到零又重新開始的計時器,比沒有計時器更糟:它把一個慢工作變成看起來像謊言的東西。一旦超出預估,我們就停止預估,改為顯示帶說明的誠實已用時間,你還可以開啟通知,這樣離開分頁也很安全。

這些都不是魔法

上面每一條都不華麗。用實測挑選候選而不是相信行銷。逐條驗證指令。給模型足夠的像素。尊重頁面的結構。為困難情形單獨做一個模式。對等待保持誠實。

真正帶來差別的不是某一項技術,而是從讀入到匯出,始終把漫畫頁面當作漫畫頁面來對待。看似合理與真正能發布之間的全部距離,就在這裡。

這個工具可以免費試用。評估以上所有內容最快的方法,就是拿一頁你已經很熟的作品跑一遍,看它回來的是不是你畫的那一頁。

用你熟悉的一頁來驗證

本文最初發表於 Watashi Colorizer。

更多著色器指南