現役グラビアカメラマンでありエンジニアでもある西川和久氏による生成AIグラビア連載の第25回は、画像生成と切っても切り離せないアップスケールの新技術編。
『生成AIグラビアをグラビアカメラマンが作るとどうなる?連載』記事一覧』
■Upscaleの基本
Stable Diffusionを使った生成AI画像の場合、SD 1.5、SDXL共に推奨解像度があり、例えばよく使う縦横比の2:3だと、それぞれ512x768 と 832x1,216となっている。
これより大きい画素数を指定すると、妙に体が長かったり、顔が複数出て来たり…オカルト的な絵となるケースが多い。
ではフルHDサイズの画像を作るにはどうすれば?というと、上記で生成した画像に対して2.5倍もしくは1.58倍すればフルHDとなるのはお分かりいただけると思うが、これをUpscaleと呼んでいる。
手順は大きく分けて、txt2img中にUpscaleする方法と、一旦 txt2imgで画像を作り、できた画像を img2imgでUpscaleする方法の2パターンがある。
筆者の場合は前者がほとんどで、後者は何か理由がない限り使わなかった(単にできた画像をimg2imgへ送り再生成するのは面倒なのが主な理由)。
そしてUpscaleの手法は、例えばAUTOMATIC1111の場合、Hires. fixを開くと LatentからSwinIR_4xまで多くのUpscalerが並んでいる。それぞれ特徴があるが、一般的にはR-ESRGAN 4x+辺りが無難だろうか。
この時、何を使うにしてもDenoising strengthの値が重要になる。これは、単に演算のみで拡大補完すると画像がボケたり、ジャギが出来たりするのを、周囲の画像情報から類推して、もともと無かったものを書き込む時のパラメータだ。1が最大で、大きいほど書き込み量が増える。
ただ実写系の場合、0.3以上あたりになると、顔が変わったり、ヘソが2つになったり、妙な書き込みが表面化し、いろいろ破綻しだす。従って0.2までで様子見ながら最大値を使うのがBetterだ。
このように一般的なUpscaleには、Denoising strengthを大きくすると情報量は増える反面、副作用を伴うジレンマがあり、ハマると沼が待っている(笑)。
こうした状況で登場したのが、従来とは全く発想の異なる、ControlNetを使ったUpscale手法「ControlNet 852_a_clone_xl」だ。
■ControlNetを使ってUpscale / ComfyUI編
ControlNet 852_a_clone_xl は具体的に何をするのだろうか。まず、ControlNetは基本的に、生成する画像の内容を指定した方法で固定する時に使う。
線で固定するなら Canny、深度情報で固定するのは Depth、骨情報で固定する場合は OpenPose等があげられる。
今回ご紹介するこの ControlNet 852_a_clone_xl は、名前から分かるようにcloneを作る。つまり同じものを生成する。「それって意味あるの?」と疑問を持つだろうが、解像度を変えず1:1のままなら意味は無いものの、拡大する場合に意味をなす。
例えば単純に拡大補完すると境界がボケたり、ジャギになったりするのに対して、cloneを作ることで可能なかぎりオリジナルに近い状態になるよう書き込みを実行し、結果それがUpscaleになるという仕掛けだ。
ロジックが分かり易い様、先にComfyUIのWorkflowで説明する。
左上はControlNet Modelの指定。もちろんcontrolnet852AClone_v10。次に使用するModelはSDXLであれば何でもいい。ここではsd_xl_base_1.0。
ControlNetの各パラメータは標準のまま。KSamplerはsteps 25, cfg 5.0, sampler dpmpp_2m_sde_gpu, scheduler karras, そしてdenoize 0.2。Prompt / Negative Promptは何を書いてもほぼ影響は無い。
(▲画像:左は2xにUpscale後。右はオリジナルを左と同じサイズになるよう単純拡大。右は細部にジャギがある)
中でも注目点は、Load Imageでオリジナル画像を指定し、その後、Image Resize by Factorでbicubicを使い2xにしているところ。つまりまず指定した画像を普通に拡大補完し、2倍にしている。
この画像でも使えなくはないが、ControlNetへ入れ、controlnet852AClone_v10を使って補正している…のが仕掛けとなる。
実際2x後の画像とオリジナルを比較すれば効果てきめん。うまくUpscaleされているのが分かる。
■ControlNetを使ってUpscale / AUTOMATIC1111(Forge)編
AUTOMATIC1111(Forgeも同様)ではimg2imgを使う。それ以外は上記のComfyUIと同じだ。CheckpointはSDXLで何かをセット、Prompt / Negative Promptは無し、オリジナル画像をセット。
設定はDPM++ 2M Karras, steps 25, Scale 1.6(必要に応じて), CFG scale 5, Denoising 0.2。ControlNetへオリジナル画像をセット、Preprocessor None、Modelにcontrolnet852AClone_v10を指定。他は標準のまま。これで[Generate]ボタンを押せばOKだ。
注意点としては、このControlNetはSDXL専用であること。SD 1.5で作った512x768を2.5xすることもできるが、CheckpointをSDXLに切り替える必要がある。
txt2imgでSD 1.5を一枚作ってimg2imgへ送りCheckpointをSDXLに切り替えるのはいろいろロスるので、OKな画像をフォルダにまとめて入れ、Batch処理すればいいだろう。
いずれにしてもこの方法だと、顔は崩れない、変なものは生えない(笑)、速い…と、三拍子揃ったUpscaleとなり、非常に助かっている。
■今回締めのグラビア
締めのグラビアは4つの要素から成り立っている。1つ目は、アジア・リアル系のTRAINEDなModel、muchenSDXLPortrait_v10。5月12日にv1.0がリリースされたばかりだが、なかなかいい感じの絵が出てくる。
2つ目は、ちょっと色が派手になるSharpSpectrumVAEXL。この手のポップな感じにぴったりのVAEだ。
そして3つ目、Promptとして、Jackson Pollock styleとLeRoy Neiman style。どちらもペインティングの手法なのだが、前者は扉で使用しペンキを飛び散らせたような感じ、後者はグラビアで使用し境界を滲ませつつうまく分離させた感じだろうか。
名前で検索すれば実際の作品などが出てくるので、興味のある人は調べて欲しい。筆者、Xのアカウントの作例では、ボディペインティングにしているものの、本連載は露出制限があるため、衣服と壁をペイントした。
(▲画像:muchenSDXLPortrait_v10, SharpSpectrumVAEXL, LeRoy Neiman style, ControlNet 852_a_clone_xlを使ったグラビア作例)
最後4つ目は、今回ご紹介した、ControlNetを使ったUpscale、ControlNet 852_a_clone_xlとなる。実写で出来そうで出来ない、なかなか面白い雰囲気だと思うが、いかがだろうか!?
今回驚いたのは、多くのModelは、Stability AI社のsd_xl_baseを基準に学習しているが、そのベースModelが、こんなペインティングの手法まで学習していると言うこと。
これからも分かるように0ベースでModelを構築するのはほぼ不可能。日頃sd_xl_baseだと大した美女が出ないなど文句はかり言っていたが(笑)、ちょっと反省した次第。