為了比較這 4 種 Up-sampling 技術 (Conv, Deconv, Upsample, PixelShuffle) 對字體變換(Noto Sans -> ZenMaruGothic)的影響,我建議進行一個控制變因的對比實驗。
以下是針對您需求的分析與實驗步驟。
1. 四種 Up-mode 的比較分析
- conv ConvTranspose2d (標準反捲積)
優點: 參數最多,學習能力強。
缺點: 容易在生成的筆畫邊緣產生「棋盤格紋 (Checkerboard Artifacts)」。 - deconv
預期效果與 conv 極為相似,實際差異取決於程式碼細節(我們確認了它直接呼叫ConvTranspose2d)。 - upsample Upsample(bilinear) + Conv2d
先用雙線性插值放大圖片,再經過一層卷積修飾。
優點: 完全避免「棋盤格紋」,生成的筆畫最平滑。
缺點: 細節可能稍微模糊,銳利度可能不如反捲積。 - pixelshuffle
將通道(Channel)重新排列成空間(Spatial)維度。
優點: 保存資訊能力最強,能生成非常銳利且精細的邊緣,是近年超解析度(Super Resolution)的主流。
缺點: 偶爾會有週期性的高頻噪點。
我的預測: 針對字體(線條明確、高對比)的任務,
pixelshuffle
通常表現最好,其次是
upsample
(較為保險但可能不夠銳利),conv 可能會有些微雜訊。
2. 實驗工作流 (Noto Sans -> ZenMaruGothic)
為了「只轉換這兩個字型」,我們不需要重新製作專屬資料集(那很麻煩),我們可以利用 Training 時的靈活性:一樣使用完整的
train.obj
進行訓練,但在 Training 過程中只看最終 Loss 下降情況,並在 Inference 階段只針對 ZenMaruGothic 做驗證。
(若您堅持只要訓練這兩個字,需要從原始資料中剔除其他字體並重新打包 pickle,這會耗費大量時間且對於觀察
up_mode
差異並非必要。使用現有資料集訓練,觀察效果是一樣的。)
我為您準備了 4 組指令,分別對應 4 種模式。請依序執行(建議將
experiment_dir
分開以保留結果):
通用設定 (快速實驗版)
- Epoch: 40 (足夠觀察收斂差異)
- NGF: 32 (加速訓練 & 輕量化)
- Blur: 開啟 (穩定訓練)
- EMA: 開啟 (預設)
實驗指令
1. 模式: Conv (標準)
python train.py --experiment_dir experiments/compare_conv --up_mode conv --ngf 32 --epoch 40 --g_blur --gpu_ids 0
2. 模式: Deconv (反捲積)
python train.py --experiment_dir experiments/compare_deconv --up_mode deconv --ngf 32 --epoch 40 --g_blur --gpu_ids 0
3. 模式: Upsample (插值+卷積)
python train.py --experiment_dir experiments/compare_upsample --up_mode upsample --ngf 32 --epoch 40 --g_blur --gpu_ids 0
4. 模式: PixelShuffle (像素重組)
python train.py --experiment_dir experiments/compare_pixelshuffle --up_mode pixelshuffle --ngf 32 --epoch 40 --g_blur --gpu_ids 0
3. 推論與比較 (Inference)
訓練完成後,我們針對 “ZenMaruGothic” (假設其 label ID 為
1
,如果不確定,請查閱您的 dataset label map) 進行生成。
(註:這裡假設您已經知道 ZenMaruGothic 的 label ID。如果它是 Font B,通常 Label 是 1。)
# 比較 Conv
python infer.py --experiment_dir experiments/compare_conv --up_mode conv --ngf 32 --resume latest --g_blur --label 1
# 比較 Upsample
python infer.py --experiment_dir experiments/compare_upsample --up_mode upsample --ngf 32 --resume latest --g_blur --label 1
# 比較 PixelShuffle
python infer.py --experiment_dir experiments/compare_pixelshuffle --up_mode pixelshuffle --ngf 32 --resume latest --g_blur --label 1
執行完畢後,您可以打開各個
infer 目錄下的圖片進行肉眼對比,重點觀察:
- 筆畫邊緣: 是否有鋸齒或格子狀紋理(Conv 會有,Upsample 少,PixelShuffle 銳利)。
- 筆畫連結處: 是否平滑自然。
- 整體結構: 是否有變形或斷裂。