キリン舎@キーキャップのお店(文筆店)

キーボード関連アクセサリーを自作しています。

かんたんAI生成画像デスクマットの作り方

 

キリン舎と申します。

普段は自作キーボード界隈でメカニカルキーボード用のkawaiiキーキャップを自作したり、デスクマットをデザインしたりしています。

こんなのを作っています

キーキャップ - BOOTH

デスクマット - BOOTH

 

今回の記事は、AI生成画像を使用した900mm×350mmサイズのデスクマットをデザインする上で行った試行錯誤のまとめです。

最初に結論を書いておきますので、詳細を知りたい方は【まとめ】以降をお読みください。

 

なお、掲載しているAmazon楽天の商品ページにはアフィリエイトをつけています。ご購入の際はなるべくこちらのページを経由していただけると、大変ありがたいです。

 

【まとめ】

課題

1.画像サイズの上限
-Stable Diffusion 1.5(以下、SD)の場合、破綻を最小限に抑えて生成できる画像は4K(3,840px×2,160px=約8.3メガピクセル)程度が限界な気がします*1

-つまり、印刷に必要なdpi(300~600dpi)に換算するとA4サイズ程度が上限と言えます。
-900mm×350mmのデスクマットを一枚絵で制作する場合、印刷に必要なピクセルは300dpiで10630×4134px=約43メガピクセル。とうてい足りません。

2.線の乱れ
-AI生成画像は、ノイズを引き算して生成しているため、線のように見えてもノイズの集合体でしかありません。そのため、どうしても線に違和感が出ます。
-高画質化することで、この特徴も拡大します。

 

対処法:概要

1.高画質化については各種ツールがあります。キリン舎では Upscayl を採用しました。
2.線の違和感を消すため、以下の方向性で検討しました。
 -①「きちんと線にしよう」⇒ベクター
 -②「線をごまかそう」  ⇒ハーフトーン化、ピクセルアート化

 

対処法:詳細

①生成画像を「ベクター化」し、必要なサイズに合わせたピクセル数まで拡大する
 -ベクター化には Vectorizer.AI を使用しました(無料)
 -ただし、2023年9月15日から有料化が決まっています*2
②アップスケールを繰り返し、必要なサイズになったら線の乱れが見えないように加工する
 -具体的には「ハーフトーン化」「ピクセルアート化」を行いました
 -ハーフトーン化には画像編集ソフト*3を、ピクセルアート化には 

【ドット絵変換ツール】Pixel Art Converter を使用しました。

高画質化・加工データ一覧
実際に印刷したもの

考察

-線をごまかす方向性で「水彩画風にしたらいいのでは」と考えていますが、40メガピクセル程度の大きさの画像を変換できる方法を見つけられていません。
-どなたか線をごまかす別の方法、もしくは輪郭線だけキレイに抜き出す方法等をご存じでしたら教えてください。

 

licenseについて

Vectorizer.AI

-Use of Results Produced in the Use of the Serviceに"The Service may provide you with derivative works of User Submissions ("Results"). The Company makes no claims to these Results, and you assume all responsibility and liability in the enabling of access to, download and subsequent use of them."と記載あり。

 

【ドット絵変換ツール】Pixel Art Converter

-ページ内に「Pixel Art Converterの利用には何も費用がかかりません。誰でも無料で利用することができます」とあり。


Upscayl

-「GPL v3」のライセンスで公開されており商用利用も可能です。

upscayl/LICENSE at main · upscayl/upscayl · GitHub

-ただし、Upscalyで選択できるモデルの「Remacri」「Ultrasharp」「Ultramix Balanced」のライセンスはCC BY-NC-SA 4.0で「クレジット表記が必要」かつ「商用利用不可」になります。

Creative Commons — 表示 - 非営利 - 継承 4.0 国際 — CC BY-NC-SA 4.0

-各アップスケーリングモデルのライセンスは OpenModelDB で確認できます。
-Upscaly自体は非商用のソフトであり、クレジット表記も明確に行っています。ただ、CC BY-NC-SA 4.0による制限は、モデルを組み込んだものにのみ適用されるのか、生成物にも適用されるのかが不明です。詳しくは以下の記事とポスト(ツイート)をご覧ください。

『人気UpscalerのCC BY-NC-SA 4.0 License問題と他モデルの検証と紹介』|佐城郎画

賢木イオ@スタジオ真榊 on X: "アップスケーラー「UltraSharp」と「AnimeSharp」のライセンス表記がCC-BY-NC-SA-4.0(非営利、クレジット明記、ライセンス継承すれば改変・再配布可)となっている件。「生成した画像にもこのライセンスの効果は及びますか?」と制作者のKim2091氏に問い合わせたところ、お返事を頂きました。▼ https://t.co/8Re1f5Zalc" / X

-念のためキリン舎でUpscalyを使用する際は、Real-ESRGANを使用していると思われる「DEGITAL ART」を選択しています*4
-なお、Real-ESRGANはBSD 3-Clause Licenseで、商用利用が可能です。

Real-ESRGAN/LICENSE at master · xinntao/Real-ESRGAN · GitHub

 

 

環境

-マシンスペック
    +CPU :intel i5-10400
    +メモリ:16GB
    +GPU :RTX3060 12GB White(Galax / 玄人志向
-AI画像生成環境
    +Stable Diffusion AUTOMATIC1111
    *導入参考:ローカル版導入 - としあきdiffusion Wiki*

    +Control Net
    *導入参考:【Stable Diffusion】生成されるイラストのポーズを指定できる「ControlNet」の導入方法と使い方について紹介! | 悠々ログ

 +lama cleaner
    *導入参考:邪魔な部分を簡単除去 - Lama Cleaner|るぺったん


-画像編集ソフト
 +Affinity Photo V2

  *Windows10標準ソフトのペイントでも可(無料)
  *印刷したいサイズに適したピクセル数は以下のサイト等を使って計算してください

  pixel⇔mm⇔dpi 計算機|シメケンプリント

  *ただし、後述するハーフトーン化をする場合には、当該機能のついたソフトを導入してください。

    +Affinity Designer V2

  *inkscapeで代用可(無料)
  *ほかにベクターデータを編集できるソフトをお持ちでしたらそちらでOKです

 

背景

-SDでは512px×512px もしくは 512px×768px での生成が最適とされています*5。肌感覚として、1,000pxあたりから、構図や人体が大きく破綻することが多い印象です。

破綻したイラスト(1024*1024で出力)

-Hires.fixやMultiDiffusionを使用することで、破綻を防ぎつつ高画質化が可能です。生成速度、破綻率を考えるとt2i*6で縦横を各2倍(以降は単に「〇倍」と記載します)、i2i*7でさらに2倍、の4倍の拡大が限度な気がします。つまり、2048×2048、もしくは、2048×3072 ⇒ 4~6メガピクセルの画像生成でギリギリ。

512px→1024px→2048px

-印刷レベルで考えると、L版(127mm×89mm)~A5サイズ(210×148mm)が妥当なところです。

-もちろんt2iもしくはi2iの各段階で2倍以上にすることも可能ですが、破綻したり、線が荒れたりすることが非常に多くなります。ここからクオリティを落とさずに印刷レベルまで高画質化するには、SD以外の手法を取り入れることが重要になります。

-キリン舎では、900mm×350mmの印刷物をゴールにしていたため、900px×350pxで生成⇒t2i、i2iを組み合わせて4倍に拡大⇒3600px×1400px / 5メガピクセルの画像を生成していました。これは印刷する場合、L版(127mm×89mm)~A5サイズ(210×148mm)が妥当な画質です。

900mm*350mmのサンプル

-900mm×350mmの印刷に必要なピクセルは、300dpi換算で10630×4134px=43メガピクセル。つまり、生成画像を4倍に拡大したのち、さらに3倍以上に拡大する必要があるわけです。

-ちなみに、生成した画質のままで印刷するとこのような感じです。

元データ→印刷後

-一つ一つの画像を小さくしdpiを維持したままであれば、印刷してもそれほど気になりません。無理に高画質化する必要はなく、複数枚載せる、自作したパターンで余白を埋める、等も十分アリです。


下準備

- 破 綻 の な い 絵 は 出 ま せ ん !

-指が多かったり関節が逆だったり……枝や影を人間と誤認したり……とにかく余白になにかしらが入り込みます。

-元画像に加筆する。inpainting機能で該当部分だけ生成し直す。lama cleanerで該当部分を削除する*8。そして再度i2iを行い修正箇所を同じタッチへとなじませる。それでもだめなら再度……と編集作業を繰り返します。

加工前→後

-この修正作業が最も時間がかかります。特にAI画像生成は本質的にガチャなので、いい結果が得られるとは限らず、またその理由も不明瞭なので苦しい時間が続きます。

-主立った破綻が修正できたら、最後に目を描き直します。これは次項で解説する高画質化が済んでからでも構いません。ただ、目、特に瞳はAI独特の塗りで違和感のもとになるので、可能な限り修正した方が良いと思います。

修正前→後

対処法

-いよいよここからが本題です。前置きが長くてすみません。

-AI生成画像は、ノイズを引き算して生成していて、線のように見えてもノイズの集合体でしかありません。そのため、よくよく目を凝らすと線に荒れや乱れがあります。高画質化(アップスケール)をすると、その特徴も引き継いで拡大されるため、より違和感を抱きやすくなります。

元データ→アップスケール後

-デスクマットの場合、飾るものではなく手元で使うものなので、結果的に近づいて見る場合が多いです。そのため、この線の違和感をどうにかすることが必要になります。

-線の違和感を消すため、以下の方向性で検討しました。順番に解説していきます。


⓪「高画質化→そのまま印刷!」

-単純な高画質化は、ざっと検索するだけでも各種ツールが見つかります。ただ、登録が必須だったり、回数制限や画像サイズの上限があったりと制約も多いです。キリン舎ではそれらをクリアした Upscayl を採用しました。ただし、GPUの使用が必須なので、環境に応じて適宜選択してください。
-以下にあげた項目はUpscaylの特性に寄るところも大きいです
<licenseについて>

<メリット>

+手軽に4倍に拡大できる
+画像サイズに上限がなく、回数制限もない
+無料でインストールできるソフトで、継続した利用が可能

<デメリット>

+GPU推奨*9
+拡大すると全体的にぼんやりした印象になる
+線が二重だったり、細部がつぶれたりするため
+線がきれいでないため、そのままの印刷は難しい印象

各種アップスケール

印刷時
<対策>

+①「線をごまかそう」へ

<向いているもの>

+手軽に作りたい場合

 

 

①「線をごまかそう」

ハーフトーン化、ピクセルアート化

-単純な高画質化は、前述のように線への違和感も拡大される傾向にあります。そこで、線自体をハーフトーンピクセルアートに加工することで、違和感自体を塗りつぶそうと考えました。
-いずれも「劣化」を模したエフェクトなので全体のクオリティとしては下がりますが、目指す雰囲気が「レトロ」「ポップ」などであれば適していると思います。

<licenseについて>

 

-ハーフトーン
+カラーハーフトーン(コサイン・ラウンド)のほか、線を乗せる、などの方法も適していると思います

元データ→印刷後
元データ→印刷後 *ハーフトーン(コサイン) 
元データ→印刷後 *ハーフトーン(ライン) 

 

-ドット化
+【ドット絵変換ツール】Pixel Art Converter を使用しました。どんなに大きなサイズでも変換可能なので、大変ありがたいです。
+ただ、印刷してみるとあまり好みの感じには仕上がりませんでした。ドット感があまり出なかったことが原因な気がするので、元画像をもっとわかりやすく加工し、ドットを大きくしてみるといいかもしれません。(どなたか試してみてください)

元データ→印刷後
<メリット>

+生成したイラストを活かせる
+雰囲気が出る

<デメリット>

+いずれも「劣化」を模したエフェクトなので全体のクオリティとしては下がります

<対策>

+(検討中)

<向いているもの>

+目指す雰囲気が「レトロ」「ポップ」などの場合

 

②「きちんと線にしよう」

ベクター
-ベクター化にはVecter AIを使用しました。

<licenseについて>

元データ→ベクター化後にエクスポート
<メリット>

-ベクター化すると、AI生成画像の荒れがちな線や塗りがまとめられるため、「イラスト」の印象に近くなります。
-ベクトル画像はサイズを変更しても滑らかな線を維持することができます。これを利用して、生成画像をベクター化することで任意のサイズまで拡大することが可能です。

<デメリット>

-正直そのままでは編集しにくいファイルです。
-大きな理由としては線と線の間に数pxのギャップができてしまうためです*10

-ギャップを埋めるために別のオブジェクトがレイヤーに入っており、一つの線を消すことができません。同じ色、もしくは近しい色は結合してしまうため、特に髪の毛は編集が大変です。

オブジェクトの下には、ギャップを埋める別のオブジェクトが

-グラデーションも明確な層に変換されてしまいます。

元データ→ベクターデータ変換後

-Vecterizer AIは現在のところβ版で無料で使用できますが、2023 年 9 月 15 日から有料化することが決まっています。

[追記:2023年11月7日]

-API利用は有料になりましたが、"当分の間、API 以外の使用は無料となります。"とのことです。やったね!

 

<対策>

-ベクターデータで編集せず、ピクセルデータで編集するといいかもしれません。
例1)元データかjpg / pngなどのピクセルデータで再出力→気になる個所を編集→再度ベクター化→印刷したいサイズまで拡大→印刷用のデータとして出力
例2)ベクター化した画像を印刷サイズまで拡大し、jpg / pngなどのピクセルデータとしてエクスポート→層になったグラデーション部分を選択し削除→該当部にグラデーションを追加

 

<向いているもの>

-線画などのシンプルな背景のイラスト
-外形や色味がはっきりした(フラットな)イラスト

 

別のやり方を探す

-この記事を読んでくれた方で、以下の方法をご存じでしたらTwitterまでご連絡ください。
・高画質画像の水彩画タッチへの変換方法
・線をごまかす別の方法
・黒い線だけキレイに抜き出す方法

 

おわりに

キリン舎では同じ手法で制作したデスクマットと入稿に使ったデータを販売中です。

kirinsha.booth.pm

 

 

本記事を読んで「ためになった」「応援してるよ!」という方や大富豪石油王様からの投げ銭BOOSTもお待ちしております。ご購入いただいたお金はキーキャップ・デスクマット等の試作費やキーボード代に回ります。けいざいまわすぞ~

 

ではまた次の記事で!

---

*1:使用しているGPU性能がボトルネックになっている可能性もありますが、生成時間や破綻率を見るとこのあたりかなあと。

*2:API利用は有料になりましたが、"当分の間、API 以外の使用は無料となります。"とのことです。やったね!

*3:Affinity photo V2

*4:使用モデルの明示がなく、GitHub(https://github.com/upscayl/upscayl)でのFAQにUpscalyでReal-ESRGANを使用しているという記述があり、Creditに他モデルの使用について言及がないため、このように推測しています。

*5:学習ベースが512px×512pxだからなのだそうですが、筆者はよく理解していないため話半分に。

*6:text to image / テキストから画像を生成すること

*7:image to image / 読み込ませた画像をAIに加工させること

*8:私見ですが、Affinity photo(画像編集ソフト)のインペインティングよりも精度が高かったです

*9:ほぼ必須かもしれません / “Do I need a GPU for this to work?
Yes, unfortunately. NCNN Vulkan requires a Vulkan compatible GPU. Upscayl won't work with most iGPUs or CPUs. But hey, no harm in trying ;)” https://github.com/upscayl/upscayl

*10:ベクター画像の中の 2 つの図形が隣接しており、その境界が完全に一致している場合、多くのベクターレンダリングエンジンでは、それらを図形間に細い白線を表示して描画します。 これは、それらレンダリングエンジンの欠陥ですが、あまりにも普通になってしまっているので近いうちに消滅するものではなさそうです。当社では、この問題に対処するため、隙間補完と呼ばれるものを設計しました。 これは、2 つの図形間の境界線の下に細い線を描き、2 つの図形の色の平均色で埋めるように動作します。 これによって背景が透き通って見えることを防ぎ、実質的に問題を解決します。-Vectorizer.AIより