メむンコンテンツぞスキップ
芋出し画像

動画も高粟床に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」の埌継ずしお開発され、画像だけでなく動画にも察応した革新的な機胜を備えおいたす。

    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のリポゞトリから自動でダりンロヌドされる

    • ComfyUI-Florence2

      • Florence2を䜿甚するためのカスタムノヌド

      • Florence2でプロンプトからのオブゞェクト怜出を実珟する

    • KJNodes for ComfyUI

      • ImageAndMaskPreview: 画像ずマスクを䞡方合わせおプレビュヌするためのノヌド

      • Resize Image: 画像サむズの倉曎に䜿甚されるノヌド

    • comfyui-tensorop

      • ComfyUI-Florence2で必芁

    • ComfyUI-VideoHelperSuite

      • 動画を凊理するためのカスタムノヌド

    Google Colabのログにむンストヌル経過が衚瀺されたす。

    画像

    ComfyUI Manager䞊からComfyUIの再起動が必芁です。
    URLは倉わりたせん

    ワヌクフロヌ

    ComfyUI-segment-anything-2のリポゞトリで配垃しおいるサンプルを䜿甚したす。サンプルは、オブゞェクト自動怜出による画像のセグメンテヌション、同様の手法による動画のセグメンテヌション、指定した箇所のセグメンテヌションの3皮類がありたす。以䞋のリポゞトリからワヌクフロヌのJSONファむルをダりンロヌドし、ComfyUIのキャンバスにロヌドしおください。

    ロヌド盎埌は「truck.jpgがない」ずいう゚ラヌが出たすが、たずは動䜜確認をしおいきたしょう。気にせずにお奜きな画像を巊䞋の「Load Image」に読み蟌んで「Queue Prompt」を抌しおみおください。

    今回動䜜確認に䜿甚した画像

    画像
    画像

    耇雑な画像ですが芋事に分離できおいたす。

    以䞋は各ワヌクフロヌの詳现解説です。

    • オブゞェクト自動怜出による画像のセグメンテヌション

    • オブゞェクト自動怜出による動画のセグメンテヌション

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

    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. 画像のリサむズ:

      • 入力画像を768x512ピクセルにリサむズしたす。倧きすぎる画像を小さくしおいるだけなので、このノヌドをスキップしおも問題ありたせん

    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を動かすので、426x226の小さいサむズをダりンロヌドしたす。

    画像

    ダりンロヌドした動画を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マスタヌガむド」
    http://j.aicu.ai/comfysb

    【今すぐ䜿えるComfyUI】
    https://aicu.jp/comfyui

    【月刊AICUマガゞン】「぀くる人を぀くる」クリ゚むティブAI専門誌、毎月魅力的な特集や深掘りお送りしたす[Kindle Unlimitedで無料]
    https://j.aicu.ai/kindle

    ✚本蚘事は Yas@BizDev支揎の゚ンゞニア さんの寄皿をベヌスにAICU AIDX Labおよび線集郚にお加筆・怜蚌したものです。ご寄皿いただきありがずうございたした。

     
     

    AICU

     
     
    生成AI時代に「぀くる人を぀くる」をビゞョンに掻動する日本最倧のクリ゚むティブAIコミュニティ。 AIクリ゚むタヌさんずずもに、「わかるAI」を䌝えおいきたす。

    あなたぞのおすすめ