single.php

RealESRGANerのRRDBNetでMissing key(s) in state_dictが発生する際の対処法(RealESRGAN_x4plus_anime_6B.pth 編)

PythonとReal-ESRGANで画像を明瞭化するプログラムを試作していた際にハマった[例外が発生しました: RuntimeError Error(s) in loading state_dict for RRDBNet: Missing key(s) in state_dict:]の対処法を備忘録的に投稿しておきます。

画像を高解像度化する

chatGPT が提案してくれたサンプルコードが、こんな感じ。今回はアニメなどの画像に特化しているモデルファイル(RealESRGAN_x4plus_anime_6B.pth の場合です)

写真などの画像で利用する RealESRGAN_x4plus.pth の場合は別記事をご覧ください

import torch
from realesrgan import RealESRGANer
from basicsr.archs.rrdbnet_arch import RRDBNet

pth_path = 'RealESRGAN_x4plus_anime_6B.pth'

model = RRDBNet(
    num_in_ch=3,
    num_out_ch=3,
    num_feat=64,
    num_block=23,
    num_grow_ch=32,
    scale=4
)

upsampler = RealESRGANer(
    scale=4,
    model_path=pth_path,
    model=model,
    tile=0,
    half=True
)
...

実行すると例外が発生します。

例外が発生しました: RuntimeError Error(s) in loading state_dict for RRDBNet: Missing key(s) in state_dict: ...

どうやら、[RealESRGAN_x4plus.pth]ファイルに格納されている型が一致しない模様。

その後も、chatGPTに質問を続けてみましたが最新の[RealESRGAN_x4plus.pth]をダウンロードするか、別の[.pth]ファイルにするという提案の繰り返しでした。

自己解決

色々、調べてみて自己解決できました。

model で設定するRRDBNetの変数 “num_block=6” とupsampler で設定する “half=False” を変更すると例外を回避できました。

import torch
from realesrgan import RealESRGANer
from basicsr.archs.rrdbnet_arch import RRDBNet

pth_path = 'RealESRGAN_x4plus.pth'

model = RRDBNet(
    num_in_ch=3,
    num_out_ch=3,
    num_feat=64,
    num_block=6,
    num_grow_ch=32,
    scale=4
)

upsampler = RealESRGANer(
    scale=4,
    model_path=pth_path,
    model=model,
    tile=0,
    half=False
)

[num_block]の値は、6Bなので6で固定で、[half]オプションは False にすると、単精度(float32) で実行されます。

half=True の方が、メモリ消費や計算速度などメリットがあるようですが、エラーで前に進まないよりマシです。

まとめ

今回は短い記事ですが、PythonとReal-ESRGANを実行する際に[例外が発生しました: RuntimeError Error(s) in loading state_dict for RRDBNet: Missing key(s) in state_dict:]の対処法について書きました。

[RealESRGAN_x4plus_anime_6B.pth]を利用する場合はRRDBNetの変数 “num_block=6” とupsampler で設定する “half=False” を変更すると例外を回避できました。

chatGPTに提案されたサンプルコードを試していて、どうしてもエラー回避が出来なかった部分が自己解決できたので備忘録ように記録しておきます。

RealESRGANerで[Missing key(s) in state_dict]が発生する方の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です