SwiftUIアプリに最新のCore ML Stable Diffusionを組み込む方法
Table of Contents:
- イントロダクション
- Coremlstableをスイフトアプリに実装する方法
- スイフトUIでのCoremlステーブルディフュージョンの使用方法
- MacOSでの実行方法とiPadでの実行方法の比較
- Coremlstable,difusionの学習済みモデルの追加方法
- プロジェクトにリソースディレクトリを追加する方法
- Coremlstable,difusionのパッケージの追加方法
- 画像生成の非同期実行と進捗表示の方法
- 画像生成の途中での停止と再開方法
- ジェネレートイメージで使用できる引数の説明
イントロダクション
この記事では、スイフトアプリにCoremlstable,difusionを実装する方法について説明します。また、スイフトUIを使用してCoremlステーブルディフュージョンを実行し、画像生成を非同期で行いながら進捗を表示する方法も紹介します。MacOSでの実行方法とiPadでの実行方法の比較、学習済みモデルの追加方法、リソースディレクトリの追加方法、パッケージの追加方法についても解説します。さらに、画像生成の途中での停止と再開、ジェネレートイメージで使用できる引数の説明も行います。
Coremlstableをスイフトアプリに実装する方法
スイフトアプリにCoremlstable,difusionを実装するためには、まずプロジェクトに学習済みモデルのファイルを追加する必要があります。ファイルの追加はコマンドラインから行うこともできますが、今回はSD14ディレクトリ以下のファイルを使用します。リソースディレクトリをプロジェクトに追加する際には、バンドルリソースフォースイフトcliのオプションが必要です。また、u-netチャンクのファイルが2つ生成されることに注意してください。追加が完了したら、Coremlstableを使用するためにパッケージの追加を行います。テーブルリフュージョンの検索をすると、mlstabledifusionというパッケージが見つかるので、これを追加します。
スイフトUIでのCoremlステーブルディフュージョンの使用方法
スイフトUIを使用してCoremlステーブルディフュージョンを実行する場合は、UI上に画像表示場所とジェネレートボタンを配置するだけです。画像表示場所では、画像が表示されるか代わりにテキストが表示されるかの切り替えが行われます。ジェネレートボタンを押すと、画像の生成が実行されます。Coremlstable,difusionの実行に関するコードは、UIとは直接関係なく、単純にCoremlstable,difusionのパイプラインのインスタンスを作成して、メンバーメソッドのジェネレートイメージを実行するだけです。画像生成は非常に時間がかかるため、進捗を表示することが重要です。これには、プログレスハンドラーを使用して進捗を監視し、表示する必要があります。
MacOSでの実行方法とiPadでの実行方法の比較
MacOSでの実行とiPadでの実行では、数値をコードに書いているために実行環境が異なりますが、コード自体はiPadでも動作するはずです。ただし、MacOSでは u-netチャンクが必要ありませんが、iPadOSで実行する場合には u-netチャンクが必要です。また、セーフティチェッカーのファイルに関しても使うため、追加が必要です。MacOSでは実行しているが、iPadでは実行できるはずです。
Coremlstable,difusionの学習済みモデルの追加方法
Coremlstable,difusion用の学習済みモデルのファイルをプロジェクトに追加するには、リソースディレクトリを利用する必要があります。リソースディレクトリをプロジェクトに追加する際には、バンドルメインリソースURLを指定するか、アデットフォルダーズを選択する方法があります。また、ディレクトリ名も指定する必要があります。追加後、ファイルをフォルダにコピーするかどうかを選択することができます。
プロジェクトにリソースディレクトリを追加する方法
Coremlstable,difusion用の学習済みモデルの追加には、リソースディレクトリの追加が必要です。リソースディレクトリを追加する際には、プロジェクトのディレクトリにファイルをコピーするか、クリエイトグループスを選択してルートディレクトリを指定するか、クリエイトフォルダーリファレンスを選択してパスにディレクトリ名を追加するかのいずれかの方法を選択します。ただし、すでに追加済みの場合はキャンセルを押します。
Coremlstable,difusionのパッケージの追加方法
Coremlstable,difusionを使用するためには、パッケージの追加が必要です。アットパッケージでmlstabledifusionを検索し、アンドパッケージで追加します。追加時にはステーブルディフュージョンとテーブルディフュージョンサンプルが選択できるため、それぞれのパッケージを選択して追加します。
画像生成の非同期実行と進捗表示の方法
画像生成を非同期で行いながら進捗を表示するためには、ジェネレートボタンを押した際に非同期実行の処理を追加する必要があります。また、進捗表示のためにプログレスハンドラーを使用します。プログレスハンドラーは、ステップの進行状況に応じて実行されるトレーディングクロージャーであり、ステップの進捗を取得して表示することができます。このようにすることで、画像生成の進捗をリアルタイムでユーザーに表示することができます。
画像生成の途中での停止と再開方法
画像生成の途中で停止するためには、ストップボタンを追加し、停止フラグを変更する必要があります。ジェネレートイメージのプログレスハンドラーには条件分岐を追加し、ストップボタンが押された場合にはフラグを変更して画像生成を停止します。再開する場合は、フラグを変更して画像生成を再開します。
ジェネレートイメージで使用できる引数の説明
ジェネレートイメージで使用できる引数には、プロンプト、シード、イメージカウント、ステップカウント、disuableSafetyがあります。プロンプトとシードは画像生成に使用するパラメータであり、ストリング型とint型です。イメージカウントは生成する画像の枚数であり、ステップカウントは画像生成で行うステップ数です。disuableSafetyはセーフティを無効化するための引数であり、TRUEにすると無効化されます。これらの引数を調整することで、画像生成の結果をカスタマイズすることができます。
【FAQs】
Q1. Coremlstable,difusionはどのバージョンのスイフトで使用できますか?
A1. Coremlstable,difusionはSwift 5.3以降で使用することができます。
Q2. Coremlstable,difusionを使うためにはどのようなパッケージを追加する必要がありますか?
A2. Coremlstable,difusionを使用するためには、mlstabledifusionパッケージを追加する必要があります。
Q3. 画像生成の停止と再開方法について教えてください。
A3. 画像生成の途中で停止するためには、ストップボタンを押して停止フラグを変更します。再開する場合には、フラグを変更して画像生成を再開します。