タグ: 画像

  • 動画も高精度に!ComfyUIとSegment Anything Model 2(SAM 2)でセグメンテーションをマスターしよう

    コンピュータビジョンの世界に革命をもたらした画像セグメンテーションモデル「Segment Anything Model(SAM)」。その登場から約1年、METAが新たな進化を遂げた「Segment Anything Model 2(SAM 2)」を発表しました。画像だけでなく動画にも対応したこの最新モデル、使い方によってはかなり実用的になり得るでしょう。
    本記事では、SAM 2の特徴や機能、そして将来の可能性について詳しく解説します。また、ComfyUIで実際に動作させる方法についても解説します。

      1. Segment Anything Model 2(SAM 2)とは

      画像

      2024年7月29日、METAは画像と動画の両方に対応した最新のオブジェクトセグメンテーションモデル「Segment Anything Model 2(SAM 2)」を発表しました。SAM 2は、昨年リリースされた画像セグメンテーションモデル「Segment Anything Model(SAM)」の後継として開発され、画像だけでなく動画にも対応した革新的な機能を備えています。

      https://ai.meta.com/blog/segment-anything-2

      SAM 2の主な特徴

      1. 統合モデル: SAM 2は、画像と動画の両方でオブジェクトセグメンテーションを行える初めての統合モデルです。
      2. リアルタイム処理: プロンプトベースのセグメンテーションをリアルタイムで実行できます。
      3. ゼロショット汎化: 事前に学習していない物体や視覚ドメインでもセグメンテーションが可能です。
      4. 高性能: 画像と動画の両方で最先端の性能を達成しています。
      5. 柔軟性: カスタム適応なしに多様な用途に適用できます。

      技術的詳細

      SAM 2は、統一されたプロンプト可能なモデルアーキテクチャを採用しています。このモデルは、1100万枚のライセンス画像とプライバシーを尊重した画像、110万枚の高品質セグメンテーションマスクデータ、10億以上のマスクアノテーションという過去最大のデータセットで訓練されています。

      また、SAM2は、画像と動画のセグメンテーションを統合する革新的なアーキテクチャを採用しています。

      画像
      1. 画像エンコーダー: 入力フレームを高次元の特徴表現に変換します。
        • アーキテクチャ: Vision Transformer (ViT)ベース
        • 出力: 空間的に構造化された特徴マップ
      2. マスクデコーダー: セグメンテーションマスクを生成します。
        • アーキテクチャ: Transformer decoder
        • 入力: 画像特徴、プロンプト埋め込み
        • 出力: 2D確率マスク
      3. メモリメカニズム:
        • メモリエンコーダー: 現在のマスク予測からメモリトークンを生成
        • メモリバンク: 過去フレームとプロンプトからのメモリを保存
        • メモリアテンション: 現在フレーム埋め込みとメモリを統合
      4. オクルージョンヘッド: オブジェクトの可視性を予測します。
        • アーキテクチャ: 軽量なMLPネットワーク
        • 出力: フレームごとの可視性スコア

      SAM 2の特筆すべき機能の一つが「メモリバンク」です。これは最近のフレームや以前にプロンプトされたフレームの情報を空間特徴マップとして保持する機能で、短期的な物体の動きを符号化し、オブジェクトトラッキング能力を向上させています。

      応用分野

      SAM 2は以下のような幅広い分野での活用が期待されています。

      1. クリエイティブ産業: ビデオ編集の改善、ユニークな視覚効果の作成
      2. 医療画像処理: 解剖学的構造の正確な識別
      3. 自動運転: 知覚能力の向上、ナビゲーションと障害物回避の改善
      4. 科学研究: 海洋科学での音波画像のセグメンテーション、サンゴ礁の分析
      5. 災害救援: 衛星画像の分析
      6. データアノテーション: アノテーション作業の高速化

      オープンソースとデータセット

      METAは、SAM 2のコードとモデルのweightsをApache 2.0ライセンスで公開しています。さらに、SAM 2の開発に使用されたSA-Vデータセットも公開されており、約51,000本の実世界の動画と60万以上のマスクレット(時空間マスク)が含まれています。このデータセットはCC BY 4.0ライセンスで提供され、研究者やデベロッパーが自由に利用できます。

      2. ComfyUIでの実行準備

      まずは、SAM2をComfyUIで実行するための準備をしましょう。

      AICU謹製の ComfyUI Manger入りGoogle Colabノートブックです。
      https://j.aicu.ai/Comfy

      カスタムノード

      以下のカスタムノードをインストールしてください。すべてComfyUI Managerからインストール可能です。

      • ComfyUI-segment-anything-2
        • Kijai氏が作成したSAM2用のカスタムノード
        • SAM2に必要なモデルは、Kijai氏のHugging Faceのリポジトリから自動でダウンロードされる

      https://github.com/kijai/ComfyUI-segment-anything-2

      • ComfyUI-Florence2
        • Florence2を使用するためのカスタムノード
        • Florence2でプロンプトからのオブジェクト検出を実現する

      https://github.com/kijai/ComfyUI-Florence2

      • KJNodes for ComfyUI
        • ImageAndMaskPreview: 画像とマスクを両方合わせてプレビューするためのノード
        • Resize Image: 画像サイズの変更に使用されるノード

      https://github.com/kijai/ComfyUI-KJNodes

      • comfyui-tensorop
        • ComfyUI-Florence2で必要

      https://github.com/un-seen/comfyui-tensorops

      • ComfyUI-VideoHelperSuite
        • 動画を処理するためのカスタムノード

      https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite

      Google Colabのログにインストール経過が表示されます。

      画像

      ComfyUI Manager上からComfyUIの再起動が必要です。
      (URLは変わりません)

      ワークフロー

      ComfyUI-segment-anything-2のリポジトリで配布しているサンプルを使用します。サンプルは、オブジェクト自動検出による画像のセグメンテーション、同様の手法による動画のセグメンテーション、指定した箇所のセグメンテーションの3種類があります。以下のリポジトリからワークフローのJSONファイルをダウンロードし、ComfyUIのキャンバスにロードしてください。

      ロード直後は「truck.jpgがない」というエラーが出ますが、まずは動作確認をしていきましょう。気にせずにお好きな画像を左下の「Load Image」に読み込んで「Queue Prompt」を押してみてください。

      今回動作確認に使用した画像

      画像
      画像

      複雑な画像ですが見事に分離できています。

      以下は各ワークフローの詳細解説です。

      • オブジェクト自動検出による画像のセグメンテーション

      https://github.com/kijai/ComfyUI-segment-anything-2/blob/main/examples/florence_segment_2.json

      • オブジェクト自動検出による動画のセグメンテーション

      https://github.com/kijai/ComfyUI-segment-anything-2/blob/main/examples/image_batch_bbox_segment.json

      • 指定箇所のセグメンテーション

      https://github.com/kijai/ComfyUI-segment-anything-2/blob/main/examples/points_segment_video_example.json

      3. ワークフローの解説: オブジェクト自動検出による画像のセグメンテーション

      グラフの全体像

      以下がグラフの全体図になります。

      画像

      以下に今回使用するグラフのフローチャートと詳細を示します。

      画像

      このグラフは、Florence-2とSAM 2を組み合わせて画像内のオブジェクトを検出し、セグメンテーションを行うプロセスを示しています。以下に詳細な解説を提供します。

      グラフの主要コンポーネント

      1. 画像の読み込み (LoadImage ノード)
      2. Florence-2モデルのロード (DownloadAndLoadFlorence2Model ノード)
      3. SAM 2モデルのロード (DownloadAndLoadSAM2Model ノード)
      4. 画像のリサイズ (ImageResizeKJ ノード)
      5. Florence-2による物体検出 (Florence2Run ノード)
      6. 検出結果の座標変換 (Florence2toCoordinates ノード)
      7. SAM 2によるセグメンテーション (Sam2Segmentation ノード)
      8. 結果のプレビュー (ImageAndMaskPreview ノード)

      グラフの詳細な解説

      1. 画像の読み込み:
        • 「truck.jpg」という画像ファイルを読み込みます。
      2. Florence-2モデルのロード:
        • 「microsoft/Florence-2-base」モデルをFP16精度でロードします。
      3. SAM 2モデルのロード:
        • 「sam2_hiera_small.safetensors」モデルをCUDAデバイスでBF16精度でロードします。
      4. 画像のリサイズ:
        • 入力画像を768×512ピクセルにリサイズします。(大きすぎる画像を小さくしているだけなので、このノードをスキップしても問題ありません)
      5. Florence-2による物体検出:
        • リサイズされた画像に対してFlorence-2モデルを実行します。
        • 「wheel」(車輪)をプロンプトとして使用し、画像内の車輪を検出します。
        • 出力には検出されたオブジェクトの情報(バウンディングボックスなど)が含まれます。
      6. 検出結果の座標変換:
        • Florence-2の出力をSAM 2で使用可能な座標形式に変換します。
      7. SAM 2によるセグメンテーション:
        • Florence-2で検出されたバウンディングボックスを使用して、SAM 2モデルでセグメンテーションを実行します。
        • 結果として、検出されたオブジェクト(車輪)の詳細なセグメンテーションマスクが生成されます。
      8. 結果のプレビュー:
        • 元の画像とセグメンテーションマスクを組み合わせて表示します。
        • マスクは赤色(RGB: 255, 0, 0)で表示されます。

      4. ワークフローの解説: オブジェクト自動検出による動画のセグメンテーション

      グラフの全体像

      以下がグラフの全体図になります。

      画像

      以下に今回使用するグラフのフローチャートと詳細を示します。

      画像

      グラフの主要コンポーネント

      1. 動画の読み込み (VHS_LoadVideo ノード)
      2. Florence-2モデルのロード (DownloadAndLoadFlorence2Model ノード)
      3. SAM 2モデルのロード (DownloadAndLoadSAM2Model ノード)
      4. Florence-2による物体検出 (Florence2Run ノード)
      5. 検出結果の座標変換 (Florence2toCoordinates ノード)
      6. SAM 2によるセグメンテーション (Sam2Segmentation ノード)
      7. 結果の合成と表示 (MaskToImage, ImageCompositeMasked, VHS_VideoCombine ノード)

      グラフの詳細な解説

      1. 動画の読み込み:
        • 「katana_02.mp4」という動画ファイルを読み込みます。
        • 16フレームを上限とし、5フレームごとに1フレームを選択して処理します。
      2. Florence-2モデルのロード:
        • 「microsoft/Florence-2-large」モデルをFP16精度でロードします。
      3. SAM 2モデルのロード:
        • 「sam2_hiera_base_plus.safetensors」モデルをCUDAデバイスでBF16精度でロードします。
      4. Florence-2による物体検出:
        • 読み込んだ動画フレームに対してFlorence-2モデルを実行します。
        • 「sword」(剣)をプロンプトとして使用し、画像内の剣を検出します。
      5. 検出結果の座標変換:
        • Florence-2の出力をSAM 2で使用可能な座標形式(バウンディングボックス)に変換します。
      6. SAM 2によるセグメンテーション:
        • Florence-2で検出されたバウンディングボックスを使用して、SAM 2モデルでセグメンテーションを実行します。
        • 結果として、検出されたオブジェクト(剣)の詳細なセグメンテーションマスクが生成されます。
      7. 結果の合成と表示:
        • セグメンテーションマスクを画像に変換し、元の動画フレームと合成します。
        • 合成された画像をフレームごとに処理し、最終的な動画として出力します。

      5. ワークフローの解説: 指定箇所のセグメンテーション

      グラフの全体像

      以下がグラフの全体図になります。

      画像

      以下に今回使用するグラフのフローチャートと詳細を示します。

      グラフの主要コンポーネント

      1. 動画の読み込み (VHS_LoadVideo ノード)
      2. SAM 2モデルのロード (DownloadAndLoadSAM2Model ノード)
      3. ユーザーによる点の指定 (PointsEditor ノード)
      4. SAM 2によるセグメンテーション (Sam2Segmentation ノード)
      5. 結果のアニメーションプレビュー (PreviewAnimation ノード)
      6. 座標情報の表示 (ShowText ノード)

      グラフの詳細な解説

      1. 動画の読み込み:
        • 「ballerina_davinci.mp4」という動画ファイルを読み込みます。
        • 16フレームを上限とし、3フレームごとに1フレームを選択して処理します。
      2. SAM 2モデルのロード:
        • 「sam2_hiera_base_plus.safetensors」モデルをCUDAデバイスでBF16精度でロードします。
      3. ユーザーによる点の指定:
        • 動画の最初のフレームを表示し、ユーザーがセグメンテーションしたいオブジェクト(この場合はダンサー)上に点を配置できるインターフェースを提供します。
        • この例では、ダンサーの上半身に2つの正の点が配置されています。
      4. SAM 2によるセグメンテーション:
        • ユーザーが指定した点の情報と動画フレームを入力として、SAM 2モデルでセグメンテーションを実行します。
        • 結果として、指定されたオブジェクト(ダンサー)の詳細なセグメンテーションマスクが生成されます。
      5. 結果のアニメーションプレビュー:
        • 元の動画フレームとSAM 2で生成されたセグメンテーションマスクを組み合わせて、アニメーションとして表示します。
        • これにより、ユーザーはセグメンテーション結果をリアルタイムで確認できます。
      6. 座標情報の表示:
        • ユーザーが指定した点の座標情報を表示します。

      6. ワークフローの実行

      オブジェクト自動検出による画像のセグメンテーション

      今回使用した画像は以下になります。

      画像

      これを「truck.jpg」という名前でLoad Imageの「choose file to upload」でComfyUI上にアップロードします。

      画像

      画像サイズに合わせて、Resize Imageのwidthとheightを変更します。

      画像

      検出するオブジェクトは、wheelのままにします。

      画像

      これでワークフローを実行してみます。メニューの「Queue Prompt」をクリックしてください。
      しばらくすると、検出結果が出力されます。まずは、Florance2によるオブジェクトの検出結果です。しっかり写真に写っているタイヤがすべて検出されています。

      画像

      次にSAM2によるセグメンテーションの結果です。Florance2で検出したタイヤがしっかりとマスクされています。

      画像

      オブジェクト自動検出による動画のセグメンテーション

      まず、検証に使用する動画素材を入手します。以下のリンクから動画をダウンロードします。今回選んだ動画は、女性が牧場ではしゃいでいる動画になります。

      https://www.pexels.com/ja-jp/video/4919748

      今回は実験的にSAM2を動かすので、426×226の小さいサイズをダウンロードします。

      画像

      ダウンロードした動画をComfyUIにアップロードします。Load Video (Upload)の「choose video to upload」から動画をアップロードします。
      Load Video (Upload)の初期設定では、frame_load_cap(*1)が16になっており、最初の16フレーム(*2)のみを読み込むようになっています。検証としては、それで問題ないですが、もし動画を全て読み込んで欲しい場合は、frame_load_capを0に設定してください。
      また、初期設定では、select_every_nthが5になっていますが、これは1に変更してください。select_every_nthは、何フレームごとに1フレームを選択するかを指定するウィジェットです。1を設定することで、フレームをスキップせずに、全てのフレームが対象になります。

      *1 読み込むフレーム数を指定するウィジェット。例えば、24fpsの動画で、frame_load_capに16を指定すると、16/24 ≒ 0.7秒となる。
      *2 動画を構成する個々の静止画であり、1秒間に表示されるフレーム数(fps: frames per second)によって動きの滑らかさが決まります。

      画像

      次に、Florence2Runのプロンプトを変更します。今回は、女性をセグメンテーションするため、「girl」を入力します。

      画像

      これで生成を実行(Queue Prompt)します。以下が最終的な実行結果です。最初に後ろの牛を誤検出しているように見えますが、それ以外は問題ないように見えます。

      画像

      指定箇所のセグメンテーション

      前項の「オブジェクト自動検出による動画のセグメンテーション」で使用した動画を今回も使用します。動画は以下からダウンロードしてください。

      https://www.pexels.com/ja-jp/video/4919748

      前項と同様に、Load Video (Upload)の「choose video to upload」から動画をアップロードします。

      画像

      次にセグメンテーションする箇所を指定します。オブジェクトの指定は、Points Editorで行います。ワークフローの初期状態では、Points Editorにバレエの女性の写真が表示されています。

      画像

      まずは、オブジェクト検出箇所を指定するために、この写真を現在の動画の1フレーム目の画像にする必要があります。それには2つの方法があります。1つは、動画の1フレーム目の画像を用意し、Points Editorに写真の箇所を右クリックして表示されるコンテキストメニューの「Load Image」で画像を差し替える方法です。2つ目は、ワークフローを実行すると、Points Editorに写真の箇所が自動でアップロードした動画の1フレーム目に切り替わる性質を利用して、一先ずワークフローを実行し、オブジェクト検出箇所指定に使う画像を差し替える方法です。後者の方が楽なので、一先ずワークフローを実行し、画像を差し替えます。

      画像

      一度ワークフローを実行すると、以下のように動画の1フレーム目の画像が表示されます。Points Editorにバグがあるようで、左上に赤丸が残った状態になってしまいます。こちらは利用せずに、画像上に緑色の丸が表示されている場合は、女性の上に緑色の丸を配置してください。緑色の丸が表示されていない場合は、女性をクリックすると、新たに緑色の丸を追加できます。

      画像

      これで生成を実行(Queue Prompt)します。以下が最終的な実行結果です。女性が綺麗にマスクされています。

      画像

      7. まとめ: ComfyUIとSAM 2でセグメンテーションがより身近な存在に

      本記事では、画像や動画のセグメンテーションにおいて革新的な進化を遂げた「Segment Anything Model 2 (SAM 2)」について解説し、ComfyUIを用いた具体的な使用方法を紹介しました。

      SAM 2は、従来のSAMと比較して、動画への対応リアルタイム処理高精度なセグメンテーションを実現しており、その応用範囲は多岐に渡ります。

      ComfyUIのワークフローを活用することで、オブジェクトの自動検出によるセグメンテーションや、指定箇所のセグメンテーションを容易に行うことができます。

      SAM 2はまだ発展途上の技術ですが、今後の進化によって、映像制作医療画像解析自動運転など、様々な分野で大きな影響を与える可能性を秘めていると言えるでしょう。

      この記事に「いいね!」と思ったら、いいねとフォロー、おすすめをお願いします!

      https://note.com/aicu/ X(Twitter)@AICUai

      この記事を読んで「ComfyUIをマスターしたい!」と思った方はこちらもおすすめです。

      ゼロから学ぶ「ComfyUI」マガジン

      https://note.com/aicu/m/md2f2e57c0f3c

      ✨️オトクなメンバーシップについての詳細はこちら

      ComfyUIの世界はまだまだ拡がっていきそうです!

      ✨️本記事は Yas@BizDev支援のエンジニア さんの寄稿をベースにAICU AIDX Labおよび編集部にて加筆・検証したものです。ご寄稿いただきありがとうございました。


      この記事の続きはこちらから https://note.com/aicu/n/n9426cd3355f6

      Originally published at https://note.com on Aug 17, 2024.

    1. FLUX.1[dev]の実力は?比較しながらGoogle Colabで動かしてみた。

      2024年8月1日、「世界最強」といわれるベンチャーキャピタル(VC)「アンドリーセン・ホロウィッツ」(a16z)が主導で投資する、Black Forest Labs(以下BFL)が、画像生成AIの新モデル「FLUX.1」発表しました。

      Stable Diffusionの元開発者たちを取り込み開発した画像生成モデルは「12B」つまり「120億パラメータ」という大規模なパラメータサイズで、『Midjourney v6.0、DALL·E 3、Stable Diffusion 3などを上回る性能を達成した』と伝えています。驚異的な画像生成能力を持つだけでなく、『これまでのAIが苦手としてきた人間の手の描写や複雑な場面の再現にも秀でている』と伝えています。さらに、商用からオープンソースまで、多様なニーズに応える3つのバージョンを用意し、ユーザーの需要を満たそうとしています。

      本記事では、FLUX.1の実力をStability AIの「Stable Diffusion 3」と比較しながら調査してみます。そして実際にComfyUIとFLUX.1  [dev]を用いて画像生成を行うまでの手順と、Google Colabで動作するノートブックをメンバーシップ向けに共有します。

      1. FLUX.1について

      画像

      FLUX.1は、Black Forest Labsが開発した最新の画像生成AI技術です。VQGANLatent DiffusionStable Diffusionモデル ( Stable Diffusion XLStable Video DiffusionRectified Flow Transformers )、超高速のリアルタイム画像合成のためのAdversarial Diffusion Distillationの研究開発に関わった人々が参加しています。基本的な信念としては、広くアクセス可能なモデルは、研究コミュニティと学術界内での革新とコラボレーションを促進するだけでなく、信頼と幅広い採用に不可欠な透明性を高めるということです。

      FLUX.1の主な特徴

      1.最先端の性能: 既存の主要なAIモデル(Midjourney v6.0、DALL·E 3、Stable Diffusion 3など)を上回る性能を達成したと伝えています。
      テキストから画像を生成する能力において新たな基準「ELO score」と、画像の詳細さ、プロンプトへの忠実性、スタイルの多様性、シーンの複雑さなどの面で優れた性能を示していると主張しています。

      画像

      たしかに、BFLのモデルはELO scoreにおいて優位性があるようです。
      順位としては FLUX.1 [pro] > FLUX1. [dev] > SD3-Ultra > Ideogram > FLUX.1 [schnell] > Midjourney-V6.0 > Dall-E 3 HD > SD3-Medium > SD3-Turboといった序列が付けられています。このバーグラフが正しければ、FLUX.1 [dev]はSD3-Ultra並であることがわかります。

      画像

      2.多様なバリエーション: FLUX.1 [pro]、FLUX.1 [dev]、FLUX.1 [schnell]の3バージョンを提供します。それぞれ用途やライセンスモデルが異なります。

      画像

      3.革新的な技術: マルチモーダルおよび並列拡散トランスフォーマーブロックのハイブリッドアーキテクチャを採用し、12Bパラメータにスケールアップ。

      4.柔軟性: 0.1から2.0メガピクセルの範囲で多様なアスペクト比と解像度をサポート。

      画像

      5.アクセシビリティ: APIを通じたアクセスと一部バージョンのオープンソース提供。

      FLUX.1の3つのバリエーション

      Black Forest Labsは、異なるニーズに対応するため、FLUX.1を3つのバリエーションで提供しています。

      1. FLUX.1 [pro]:APIのみのフラッグシップ

      FLUX.1 [pro]は、FLUX.1の最高性能を誇るバージョンです。

      • 最先端のパフォーマンスを持つ画像生成
      • トップクラスのプロンプト追従能力
      • 卓越した視覚的品質と画像の詳細さ
      • 多様な出力

      現在、Black Forest LabsはFLUX.1 [pro]の推論コンピューティング能力を徐々に拡大しているそうです。APIを通じてアクセスできるほか、ReplicateやFal.aiなどのパートナー企業を通じても利用可能です。さらに、企業向けのカスタマイズソリューションも提供するとのことです。

      https://fal.ai/models/fal-ai/flux/dev

      https://replicate.com/black-forest-labs/flux-dev

      2. FLUX.1 [dev]:オープンウェイトモデル

      FLUX.1 [dev]は、非商用アプリケーション向けのオープンウェイトモデルです。

      • FLUX.1 [pro]から直接蒸留された効率的なモデル
      • 同等のサイズの標準モデルより高効率
      • 高品質とプロンプト追従能力を維持

      FLUX.1 [dev]の重みはHuggingFaceで公開されており、ReplicateやFal.aiで直接試すこともできます。ガイダンス蒸留を使用したトレーニングを行い、生成された出力は、ライセンスに記載されているように、個人的、科学的、商業的な目的で使用することができます。

      3. FLUX.1 [schnell]:ローカル利用向け

      FLUX.1 [schnell]は、ローカル開発と個人利用に特化した最速モデルです。

      • Apache2.0ライセンスで公開
      • Hugging Faceでweightsを入手可能
      • GitHubで推論コードを公開
      • ReplicateとFal.aiでも利用可能

      各モデルの公開が非常に戦略的に進められていることが印象的です。

      2. ComfyUIでFLUX.1[dev]を使用する

      ComfyUIの作者であるcomfyanonymous氏が早速workflowを公開しています。以下のリンクに詳細がまとめられています。AICU AIDX Labではこのリンクの内容に従い、使用準備を進めていきます。
      文末にメンバーシップ向けにGoogle Colabで動作するノートブックを公開します(AICUのGitHub上でも無償公開しています)。

      https://github.com/comfyanonymous/ComfyUI_examples/tree/master/flux

      weightsのダウンロード

      以下のリンクよりFLUX.1[dev]のweightsをダウンロードします。flux1-dev.sft (23GB) をダウンロードし、ComfyUI/models/unetに格納してください。

      https://huggingface.co/black-forest-labs/FLUX.1-dev

      CLIPのダウンロード

      以下のリンクよりCLIPモデルをダウンロードします。clip_l.safetensorst5xxl_fp16.safetensors(または省メモリ版のt5xxl_fp8_e4m3fn.safetensors)をダウンロードし、ComfyUI/models/clipに格納してください。

      https://huggingface.co/comfyanonymous/flux_text_encoders/tree/main

      VAEのダウンロード

      以下のリンクよりVAEをダウンロードします。ae.sftをダウンロードし、ComfyUI/models/vaeに格納してください。

      https://huggingface.co/black-forest-labs/FLUX.1-schnell/blob/main/ae.sft

      Workflowのロード

      以下の画像をダウンロードし、ComfyUIのキャンバスにドラッグ&ドロップしてください。画像ですが、workflowの情報が含まれているため、キャンバスにロードできます。

      https://github.com/comfyanonymous/ComfyUI_examples/blob/master/flux/flux_dev_example.png

      この狐娘さんの画像にワークフローが仕込まれています!

      画像

      ✨️このあたりのGoogle Colabでの動作がよくわからない方には以下の記事がおすすめです。

      キャンバスに上記のPNGファイルをロードすると、以下のようなフローがロードされます。

      画像

      cute anime girl with massive fluffy fennec ears and a big fluffy tail blonde messy long hair blue eyes wearing a maid outfit with a long black gold leaf pattern dress and a white apron mouth open holding a fancy black forest cake with candles on top in the kitchen of an old dark Victorian mansion lit by candlelight with a bright window to the foggy forest and very expensive stuff everywhere
      黒い金箔模様のロングドレスと白いエプロンのメイド服を着て、口を開けたまま、ろうそくの明かりに照らされた古い暗いビクトリア様式の邸宅の厨房で、ろうそくの上にろうそくを立てた黒い森のケーキを持っているかわいいアニメの女の子

      生成できました!

      画像

      FLUX.1 [dev]のモデルサイズ、Google Colabでは L4 GPU環境(GPU RAM 22.5GB)でギリギリ動作するように設計されているようです。

      画像

      dev版で高品質の画像を生成するためには、50steps必要なので、BasicSchedulerのstepsを50に変更してください。

      画像
      画像

      顔の表現が変わって、ろうそくが5本に増えてますね…

      ネットワークを読み解く

      グラフからFLUX.1のネットワークを分析してみます。

      画像

      モデル→BasicScheduler→SIGMAS→[SamplerCustomAdvanced]
      RandomNoize→[SamplerCustomAdvanced]
      KSamplerSelect→[SamplerCustomAdvanced]
      EmptySD3LatentImage(1024×1024)→[SamplerCustomAdvanced]
      DualCLIPLoader→[CLIP]→FluxGuidance→(Conditioning)→[BasicGUider]→(Guider)→[SamplerCustomAdvanced]

      [SamplerCustomAdvanced]→VAE Decode→Image

      画像

      Stable Diffusion 3の構成によく似ています。
      DualCLIP、EmptySD3LatentImageはStable Diffusion 3の部品と共通で、FluxGuidanceというノードがComfyUIによって新たに開発されています。これが従来のCFGにあたるプロンプトへの忠実度を示す値(現在は3.5)になるようです。ネガティブプロンプトやImage2Image、ControlNetはこのConditioningに与える形で提供されるのでしょうか。
      ComfyUIの開発者を取り込んだ状況や、Kolorsの最近のコミュニティでの開発状況から予想するに、早い段階でControlNet等が提供される可能性もありえます。この分野はオープンソースへのモデル提供という貢献がプラスに働くコミュニティでサイクルさせていく戦略なのでしょう。

      C2PAなどの対応はなし

      オープンモデルを自前で立てたGoogle Colab上で動かしているので当然といえば当然ですが、C2PAの埋込情報はないようです。

      画像

      有料APIでの対応がどのように提供されるのか興味深いところではあります。

      3. FLUX.1[dev]による画像生成

      実際にFLUX.1[dev]で画像生成してみました。以下に使用したプロンプトと生成された画像を貼付します。

      ヘリコプターから飛び降りる女性

      A cinematic image capturing a Japanese woman with long black hair, performing a dramatic dive from a helicopter into the vast open sky. The background features a breathtaking view of the sky filled with soaring birds, accentuating a sense of freedom and exhilaration. The woman's expression is focused and fearless, her hair flowing dramatically behind her as she dives. The helicopter is visible in the upper part of the frame, adding a touch of adventure and scale to the scene. The lighting is dynamic, highlighting the action and the expansive atmosphere.
      画像
      画像

      ダッシュする髭マッチョ男性

      A cinematic image depicting a rugged Japanese man with a beard, sprinting through the bustling streets of Shibuya, Tokyo. He is portrayed as muscular and intense, with his strong physique evident even through his clothing. The scene captures him mid-dash, with the iconic Shibuya crossing in the background blurred by the motion. Neon lights and the vibrant city life add to the dynamic and energetic atmosphere of the image. The lighting is urban and dramatic, emphasizing the man's determined expression and the fast-paced action of the scene.
      画像

      ドラゴンと勇者

      A cinematic fantasy image inspired by RPG themes, featuring a heroic scene with a dragon, a warrior, a wizard, a martial artist, and a cleric. Set in a mystical landscape, the dragon looms large in the background, spewing fire into the sky. The warrior, clad in armor, stands boldly in the foreground with a sword raised. Beside him, a wizard prepares a spell, glowing with magical energy. The martial artist, in dynamic pose, is ready to strike, and the cleric, with a staff in hand, invokes a protective spell. The scene is bathed in the ethereal light of magic and fire, creating a dramatic and epic atmosphere.
      画像

      ゾンビと逃げるカップル

      A cinematic image depicting a male and female couple frantically running from a massive horde of zombies. The scene is set in a chaotic urban environment with the army in the background, engaged in a fierce battle to contain the zombie outbreak. The couple appears desperate and terrified, dodging between abandoned cars and debris. Soldiers can be seen in the periphery, firing at the advancing zombies, providing a grim backdrop. The atmosphere is tense and suspenseful, with dark, ominous lighting amplifying the sense of impending danger.
      画像

      足の生成テスト

      A cinematic image of a Japanese woman casually displaying the soles of her feet, seated on a park bench. The scene captures her in a relaxed pose, perhaps during a leisurely afternoon in a tranquil urban park. The focus is on her bare feet, crossed elegantly as she enjoys a book or the peaceful surroundings. The background is softly blurred, emphasizing her and the detail of her feet. The lighting is warm and natural, highlighting the simplicity and quiet mood of the moment.
      画像

      軍隊の上陸作戦

      A cinematic image depicting a military landing at a beachfront during a defensive operation. The scene captures the intensity of the moment with troops disembarking from landing craft under the cover of smoke and gunfire. The ocean is rough, reflecting the turmoil of battle, with waves crashing against the shore. Soldiers in full gear advance onto the beach, facing resistance from defensive positions in the distance. The sky is overcast, adding a dramatic and somber tone to the scene, emphasizing the gravity of the military engagement.
      画像

      複数の女性がプールで遊ぶ

      A cinematic image featuring multiple Japanese women in swimsuits, enjoying a playful moment in a pool, surrounded by splashing water that creates a fantastical atmosphere. The scene captures them laughing and splashing water at each other, with the sun casting a shimmering glow on the droplets, creating a sparkling effect. The background shows a beautifully designed pool area that enhances the dreamlike quality of the image. The overall mood is joyful and ethereal, with soft, diffused lighting that adds a magical touch to the setting.
      画像

      イラスト: 魔法使いが爆発魔法を唱える

      A cinematic image inspired by anime, depicting a dramatic scene of magical alchemy leading to an explosion. The setting is a dark, mystic chamber filled with ancient symbols and glowing artifacts. In the center, a character performs a complex magical ritual, hands raised as they channel energy into a vibrant, swirling mass of light that culminates in a sudden, intense explosion. The explosion sends colorful magical energies radiating outward, casting vivid shadows and illuminating the room with a spectrum of light. The atmosphere is tense and charged with the power of unleashed magic.
      画像

      イラスト: 異世界転生したプログラマ

      A cinematic image blending realistic and anime styles, featuring a programmer who has been reincarnated into a fantastical other world. The scene shows the programmer sitting at a magical, glowing workstation filled with ancient scrolls and futuristic screens, coding to manipulate the laws of this new world. Around him, elements of a traditional fantasy setting—enchanted forests, distant castles, and mythical creatures—merge with digital effects to symbolize his unique role in this realm. The lighting is dynamic, highlighting the contrast between the old world's mystique and the new digital influence he brings.
      画像

      Animagine XL 3.1のプロンプトでLuC4を生成してみる

      AICUのキャラクターである「LuC4」をAnimagine XL 3.1用公式プロンプトで生成してみます。

      1boy, solo, upper body, front view, gentle smile, gentle eyes, (streaked hair), red short hair with light highlight, hoodie, jeans, newest

      特にアニメ要素は指定していないのですが、非常にいい感じのLuC4くんが生成されました。

      画像
      画像
      画像

      1生成あたり平均129秒といったところです。これは大きい方のCLIPを使いLowVRAMモードで起動しているのでもっと高速化することもできるかもしれません。

      4. 所感と疑問: 過学習?何故かアニメに強い

      12B、ファイルサイズで22GB。

      まず 触ってみた所感として、FLUX.1 [dev]はさすが12B、ファイルサイズで22GBという巨大なサイズです。言語理解力が高く、高品質の画像を生成するモデルではありますが、扱いやすいサイズとは言い難い。Google Colab環境のL4で快適動作するサイズのギリギリ上限として[dev]をリリースされたのは見事です。

      商用利用は可能なのか?その品質は

      商用利用可能ではありませんので、ホビーストが Text to Imageでの一発出しを楽しむレベルつまり、Midjourneyとしては十分な品質を持っているという印象があります。しかし商用ライセンスとしてはまだウェイティングリスト状態ですし、出力される画像はMidJourneyにNijiJourneyが混ざったような総花的な感覚を受けます。

      人物の表現にも偏りや、実在感の不足を感じます。例えば最近のComfyUI環境で使われている「Kolors」はフォトリアル系人物に強い中国系企業によるモデルです。英語と中国語、文字レンダリング、指、そして東アジア各国の人物表現の分離がしっかりできています。

      https://note.com/yas_bizdev/n/nc160fe614725

      https://note.com/yas_bizdev/n/n701bed443641

      ComfyUIコミュニティとの協働は評価できる

      上記の通り、BFLははComfyUIコミュニティとの協働を行っているようです。
      ネガティブプロンプトやImage to Image、ControlNetはまだありませんが、KolorsでのComfyUIが公式からリリースされたように(※2024/8/6追記)、今後、オープンソースコミュニティと協働によって開発が進むのかもしれません。今後新しいワークフローがどこからリリースされるのか注目です。

      https://comfyanonymous.github.io/ComfyUI_examples/flux

      [dev]と[pro]の互換性は?

      [dev]で鍛えたナレッジが[pro]で活かせるのかどうか、プロユーザーは調査していきたいところではあります。蒸留された[dev]と商用API経由の[pro]がシードなどを介して互換性高く利用できるのであれば理想的ですが、特性がまるで異なるようであると、ビジュアル産業の用途には使いづらいと考えます。
      余談ですが、APIモデルのライセンス提供やAPIプロバイダを介した提供などは、今後も各社が頑張っていくところだと予測します。例えばStability AIもFireworks.AI経由で高速なAPIを提供していますし、オープンモデルの商用ライセンスも提供しています。

      https://stability.ai/license

      オウンホストできる[dev]とAPI利用のみになる[pro]に互換性があるのであれば、ビジュアルエフェクトに関わるエンジニアにとって、パイプライン、ワークフローは組みやすくなります。しかし双方が全く異なるアーキテクチャーや特性をもっていると、別のシステムとして扱わなければなりません。

      APIはドキュメントがあるが招待制

      AICUでは [pro]を評価すべく https://api.bfl.ml/  において登録を行いましたが、招待制とのことで利用はできませんでした。

      画像

      API化は演算環境のアウトソーシング化や品質の維持に貢献できますが、一方ではAPI提供企業によるブラックボックス化が進みやすい、透明性を下げる点もあります。
      Stable Diffusionに例えて見回すと、Stable Diffusion 3 Medium や Stability AI が提供するAPIは過去のStable Diffusion 1.xや Stable Diffusion XL (SDXL)に比べてはるかに高速・高機能で高品質です。ですが市場にはまだたくさんのSD1.5やSDXLのモデルで画像生成サービスを提供している企業があるようです。市場の形成という意味では、画像生成AIをサービスしているプレイヤーがきちんと「最新のAPIを使っています」とか「商用ライセンスを買っています!」という企業が増えて欲しいところですし、消費者も目が肥えてきているので、選んで使っていきたいところです。例えばパープレはエンドユーザからの集金と、外部モデルの選択可能性の仕組みを上手くサービスとして構築しているように見えます。

      今後も「とりあえず出せればいい用途」は限りなく無料化していく一方で、きちんと商業ライセンスが確立するサービスには圧倒的な画質と速度、価格と、C2PAなどの来歴データ提供などを含めたトータルな安心・安全までが整備された高品質APIに需要が向くと観測します。

      ▼「Stable Diffusion」の革命から2年、画像生成AIはAPIとコミュニティの時代へ ~倫理問題の「当たり前化」のその先に

      https://forest.watch.impress.co.jp/docs/serial/aistream/1612897.html

      追加学習しづらい

      サイズが大きいということで、追加学習やファインチューニングが難しいという想像はできます。現在のリリースラインナップでは、コンシューマーレベルのGPUで扱えるサイズは[schnell]ということになるかと思います。こちらについて、評価する機会があればいずれ見てみたいと思います。

      何故かアニメに強い

      特にアニメや漫画に寄せたプロンプトの指定をしていなくてもいい感じのアニメ風の画像が出てきます。

      AICUのコラボクリエイター犬沢某さん @InsBow の作品。

      過学習の過学習をしている可能性

      過学習とは、特定の学習元に最適化されたため汎化性能が下がってしまう例です。例えば「cyberpunk」というプロンプトに対してゲーム「Cyberpunk 2077」のアートが生成されてしまうような例です。これはMidJourney v6でも言われていることですが、それをベンチマークにすることで「過学習の過学習」をしてしまう可能性が感じられます。

      具体的にはモデルの性質として、何も指定していないのにアニメ顔が出る点です。Danbooruタグと呼ばれる「1girl」という表現や、Animagine XL 3.1のプロンプトである「latest」などに反応している点からも、他のモデルの蒸留をして、さらに過学習をしている可能性があります。

      過学習は特性として慣れれば扱いやすいかもしれませんが、一方では特定の画風や作者に対してのあらぬ嫌疑をかけられる可能性があります。

      倫理的なキュレーションはされていない可能性

      過学習と並んで、倫理的なキュレーションがされていない可能性を感じます。OpenAIや Stability AIといったAI基盤モデルの先駆者たちはデータセットの素性や倫理的な精査選別を行っています。このような作業を「curation」(キュレーション)、それを行う人を「キュレーター」といいます。
      例えばOpenAIは「アライメント」や「キュレーション」に多大なコストを払っており、人間によって倫理的な調教を行っています。

      https://note.com/o_ob/n/n68bd7db03162

      画像生成モデルにおけるキュレーションの状態をテストすることは非常に簡単です。「NSFW」や裸体、子供や人種差別、大統領などを生成させればすぐに分かりますが、AICU mediaの紙面ではふさわしくないので、割愛します。

      念の為「miku」だけSeed=39で生成してみます。

      画像

      みっくみくです。念の為、Google画像検索をしてみましたが、一致する画像はありませんでした。

      画像

      学習元のデータセットやオプトアウトといった手続きがないと新たな炎上や訴訟になる可能性があることは否定できません。
      ※いずれにしても生成側に責任があることは変わりません。

      性能評価におけるベンチマーク対象が恣意的

      いまいちどBFL提供の性能評価を確認してみます。

      画像

      まず評価対象のトップにある「SD3 Ultra」ですが、ちょっと恣意的かもしれません。まず「SD3 Ultra」という名前のモデルは存在しません。Stability AIで「Ultra」と呼ばれているモデルは「Stable Image Ultra」であって「Stable Diffusion 3」でも「SD3 Ultra」でもありません。

      Made from the most advanced models, including Stable Diffusion 3, Ultra offers the best of the Stable Diffusion ecosystem.
      Stable Diffusion 3 を含む最も高度なモデルから作成された Ultraは、Stable Diffusionエコシステムの最高峰です。

      Ultraが最高峰であるとすると、Stable Diffusion 3 シリーズで公開されているモデルの最高モデルは「Stable Diffusion 3 Large」でパラメーター数は8B、つまり推定80億パラメータ。「Stable Diffusion 3 Medium」は2B、20億パラメータです。「Ultra」はこれらの Stable Diffusion 3を含んだAPIサービスとなります。

      https://stability.ai/news/stable-diffusion-3

      単に最大パラメータサイズを売りにすると、120億vs80億で、「FLUX.1のほうが強そう」ですが、「同じパラメータ数のサービスとして評価すると、FLUX.1が劣後する可能性」すらあります。LLMを使った言語系サービスに例えれば「必要な課題への必要な回答」を「高い精度」で「低い費用」で利用できるためのモデルを考えてリリースする必要があり、必ずしも「辞書の大きさ」つまりパラメータ数が多いだけではなく「その最適化」、それ以外の変数やそもそも課題設定なども、求める性能を得るためには同じくらい重要です。これらを最適化するための機械学習の手法、ハイパーパラメータの最適化なども多くの技術があります。

      このような課題や品質ををどう捉えているか、といった視点でもう一度リリースを見直してみると、Visual Quality, Prompt Following, Size/Aspect Variability, Typography, Output Diversity…といったレーダーチャートで表現をしています。Stable Diffusion 3 Ultraと比較して、「画質」はほぼ同等です。
      その他の要素では「出力の多様性」、「サイズ・アスペクト比変動性」、「タイポグラフィ(文字)」は差が大きいようです。
      多様性については評価手法が確立しているとはいい難いです。AICUではStability AI APIのCoreAPIが提供している17スタイルの評価を上位モデルと比較して1800枚程度の同一プロンプト、同一シードの画像で互換性評価を実施していますが、前述の通り『過学習の影響』は使い手が判断するしかないのが現状です。ファインチューニング手法が確立するのを待つしかないでしょうか。

      タイポグラフィ

      文字を打つ能力はStable Diffusion 3 Ultraよりは劣後するという表現になっており、[pro],[dev],[Schnell]で大きく差がつく要素になっていますが、実際には[dev]でもアルファベットはしっかりかけるようです。

      画像

      日本語や漢字は苦手なようですが、今後はこの手の文字、特に日本語・中国語・韓国語(CJK)などの東アジア言語が主戦場になるのかもしれませんね。…といったところで実験していたら✂が出てきました。先にUnicodeでの絵文字の実装を狙っているのかもしれません。

      画像

      以上、FLUX.1 [dev]の実力についてのハンズオンレビューでした。

      次は動画…[SOTA]が登場!?

      画像

      次はすべての人のための Text-to-Video「SOTA」へ

      本日「FLUX.1」 Text to Imageモデル・スイートをリリースしました。強力なクリエイティブ機能を備えたこれらのモデルは、競争力のあるジェネレーティブ Text-to-Videoシステムの強力な基盤となります。私たちのビデオモデルは、高精細でかつてないスピードでの正確な作成と編集を可能にします。私たちは、ジェネレーティブ・メディアの未来を開拓し続けることを約束します。

      今後の画像生成AIにおける新しい常識がアップデートされるのでしょうか。期待して見守りたいと思います。

      この記事に「いいね!」と思ったら、いいねとフォロー、おすすめをお願いします!

      https://note.com/aicu/ X(Twitter)@AICUai

      ✨️本記事は Yas@BizDev支援のエンジニア さんの寄稿をベースにAICU AIDX Labおよび編集部にて大幅に加筆・検証したものです。ご寄稿いただきありがとうございました。
      ✨️初稿から評価面を大幅に加筆しています(2024年8月6日)

      メンバーシップ向けボーナス・コンテンツ

      Google Colabで動くノートブックを公開しています。

      この記事の続きはこちらから https://note.com/aicu/n/n750140124c01

      Originally published at https://note.com on Aug 5, 2024.