YOLO26の紹介: 次世代のビジョンAI。
Ultralytics
Ultralytics YOLO

Ultralyticsで、お気に入りのチップでYOLOモデルを高速化する方法

UltralyticsがCPU、GPU、エッジデバイス全体でYOLOモデルの速度を最適化する方法を紹介します。チップ、メモリ、そして量子化、融合、プルーニングといったスマートな手法について解説します。

FRFrancesco Mattioli
8 min read
CPU、GPU、エッジチップ全体でのYOLOモデルの最適化

Ultralyticsではコンピュータビジョンモデルを開発しています。簡単に言えば、コンピュータに「見る」ことを教えています。これらのモデルは、巨大な数学的レシピのようなものだと考えてください。モデルは演算(私たちはこれを「レイヤー」と呼びます)と、「重み」と呼ばれる膨大な数の数値で構成されています。

弊社のUltralytics YOLOモデルは、画像を「数値の配列」として処理します。各ピクセルは実際には、画像を構成するすべての点における赤、緑、青(RGB)の色値に過ぎません。私たちは、この数値配列を「テンソル」と呼んでいます。これは、「多次元行列」や「数値が積み重なったもの」といった呼び方よりもずっとかっこよく聞こえるからです。

モデルに画像を入力すると、その画像はネットワークを巡る壮大な旅に出ます。テンソルがレイヤーからレイヤーへとサーフィンし、変換され、畳み込まれ、そして数学的に美しく操作される様子を想像してみてください。これはダンスパーティーのようなもので、数値同士が混ざり合い、猫を猫たらしめるもの、あるいは車を車たらしめるものの本質を抽出します。私たちはこのプロセスを「特徴抽出」と呼びます。

最後に何が出てくるのでしょうか?それは数値です!意味のある数値です。検出タスクでは、画像内の物体がどこにあるのか、そしてそれが何である可能性が高いのかを正確に示します。「おっと、座標 (x, y) にあるのは95%の確率で犬ですね!」私たちはこの魔法のようなプロセスを「推論」と呼んでいます。

さて、モデルがその魔法を発揮する前に、モデルは学習という名の「学校」に通う必要があります。学習パートこそが最も負荷のかかる部分です。

トレーニング中、ネットワークに画像を与えるたびに、単に答えを得ているだけではありません。非常に負荷のかかる2つの処理を行っています。第一に、ネットワークがどれほど間違っていたかを計算します(これをロスと呼び、基本的には的の中心からの距離です)。第二に、そしてここが重要な点ですが、そのロスに基づいてネットワーク内のすべての数値(または重み)を更新します。これは、何千もの小さなつまみを一度に回すようなもので、それぞれの調整は、ネットワークの精度を毎回向上させるために計算されています。

私たちは本質的に、修正を通じてネットワークをトレーニングしています。間違いのたびに「何をすべきではないか」を学習させ、すべての重みを調整することで、次に同様の画像を見たときに正しい答えに近づけるようにします。つまり、ネットワークは間違いを繰り返しながら正しい方向に導かれることで学習し、最終的に正確な予測ができるようになります。

一体どれくらいの数値の話をしているのでしょうか?私たちのコンパクトなYOLO11nには数百万のパラメータがあります。しかし、YOLO11xはどうでしょう。このモデルは5000万以上のパラメータを保持しています!パラメータが増えるほど、クレヨンで描くのと本格的な絵の具パレットを使うのとの違いのように、より詳細な情報をエンコードできるようになります。

推論中、このパラメータ数は決定的に重要になります。300万パラメータのネットワークを実行するのは、ブロックの周りをジョギングするようなものです。一方、5,000万パラメータのネットワークを実行するのは、松明をジャグリングしながらマラソンを走るようなものです。

では、「演算」とは正確には何なのでしょうか?このすべての数値計算は実際にどのように行われるのでしょうか?どうすれば高速化できるのでしょうか?そして、「演算の最適化」とは何を意味するのでしょうか?

Link to this sectionチップが実際に計算を行う仕組み#

演算はチップで行われます。これらの小さなシリコンの正方形は、基本的に宇宙で最も組織化された「砂の城」です。コンピュータが行うあらゆる演算、加算、比較、「もしこれならばあれをする」といった判断のすべてが、物理的にシリコンに刻み込まれています。チップ上の特定の領域には、数値を加算するための物理回路や、論理演算専用の回路が実際に存在します。異なる地区が異なる種類の数学を専門とする小さな街があるようなものです。

コンピュータサイエンティストであっても、これは奇妙に聞こえるかもしれません。その理由は、我々が過去40年間にわたり何層もの抽象化を積み上げてきたからです。まるで技術的なラザニアのように高く積み上がり、底のプレートさえ見えなくなっています。あまりにも単純化しすぎたため、今日のほとんどのプログラマは、シリコン上で演算が実際にどのように行われているのかを知りません。彼らのせいではなく、設計によるものなのです!

これらのレイヤーを剥がしてみましょう。このごく単純なPythonコードを見てください:

x = 1
if x == 1:
    y = x + 1

変数xを作成して1を代入し、もしxが1ならば(ネタバレ:1です)、xに1を加えた値をyとして作成します。3行。簡単ですね。

しかし、ここからが面白いところです。その3行の純粋なコードと、シリコンを流れる実際の電子との間には、少なくとも4つの巨大な翻訳レイヤーが存在します(実際にはもっと多いのですが、弊社のデジタルコンテンツマネージャーが文字数を気にして不安がっています)。この驚くべき旅路を案内しましょう。

レイヤー1:Python → バイトコード まず、Pythonはコードを読み取り、「バイトコード」と呼ばれるものにコンパイルします。これはコンピュータが解釈しやすい中間言語ですが、人間が読もうとすれば目が眩むようなものです。

レイヤー2:バイトコード → マシンコード Pythonインタプリタ(CPythonなど)は、そのバイトコードを「マシンコード」に変換します。これはプロセッサが理解できる実際の命令です。ここで、エレガントな「if x == 1」というコードは、「レジスタをロードし、レジスタを比較し、ゼロフラグがセットされていればジャンプせよ」といった内容に変わります。

レイヤー3:マシンコード → マイクロコード 意外な展開!現代のプロセッサはマシンコードを直接実行すらしていません。プロセッサはそれをさらに「マイクロコード」に分解し、チップ内部のコンポーネントが扱えるさらに小さな操作に変換します。一つの「ADD」命令が、複数のマイクロ演算になる可能性があります。

レイヤー4:マイクロコード → 物理電子回路 ついにシリコンに到達します。これらのマイクロ演算が、トランジスタを流れる実際の電気信号をトリガーします。何十億もの小さなスイッチがオン・オフに切り替わり、電子が慎重に設計された経路を踊り、魔法のように1 + 1が2になるのです。

各レイヤーは、その下にある狂気じみた複雑さを隠すために存在します。まるでロシアのマトリョーシカ人形のようですが、それぞれの人形が全く異なる言語を話し、一番小さな人形は文字通り砂に閉じ込められた稲妻でできています。

皮肉なことに、たった3行のPythonコードがおそらく何百万ものトランジスタスイッチを動かしています。しかし、これらの抽象化のおかげで、そんなことを考える必要はありません。ただ「y = x + 1」と書き、シリコンの奥深くで魔法が起こることを信頼すればよいのです。

Link to this sectionアーキテクチャ#

すべての操作はシリコンに物理的に実装されており、チップ上の「どこで」それが発生するかは、チップのトポロジーに完全に依存します。電子のための都市計画のようなものです。加算器はここに、乗算器はあそこに配置され、それらが効率的に通信する必要があります。

市場には何百種類もの異なるチップがあり、それぞれが異なる目的のために設計されています。それらの間で何が変わるのでしょうか?トポロジー、つまり操作が物理領域でどのように配置・実装されているかです。これが私たちが「アーキテクチャ」と呼ぶもので、世の中には多くの種類が存在します。

  • x86 (IntelおよびAMD) - デスクトップコンピューティングの先祖であり、複雑ですが強力です
  • ARM - 携帯電話や、近年ではノートパソコンにも採用されており、効率を重視して設計されています
  • RISC-V - あらゆる場所で勢いを増しているオープンソースの反逆児
  • PowerPC - IBMの強力なプロセッサで、ゲーム機やサーバーで今も稼働しています
  • MIPS - 学術界で人気のある、シンプルでエレガントな設計
  • SPARC - Sun Microsystems(現Oracle)によるハイパフォーマンスコンピューティングへの貢献
  • GPUアーキテクチャ (NVIDIAのCUDAコア、AMDのRDNA) - 並列処理のモンスター

各アーキテクチャはトランジスタの配置が異なるだけでなく、異なる言語を話します。これらのマシンに命令を送るための抽象化手法も完全に異なります。車に合わせてフランス語、中国語、あるいはジェスチャーで道案内を書かなければならないようなものです。

Link to this sectionシリコンの鼓動#

チップの燃料は電子、つまりチップに流れ込んで計算のためのエネルギーを供給する電気です。しかしエネルギーだけでは不十分です。チップが実際に機能し、複雑なトポロジーを通じてデータを移動させるためには、一つの重要なコンポーネントである「クロック」にすべてがかかっています。これこそが、特定の時間と特定のパスに沿って電子を流すものです。これがないと、単に電源が入っているだけで何も機能しないシリコンの塊になってしまいます。

何十億ものコンポーネントが完璧な同期の中で動く大規模なパフォーマンスを調整することを想像してみてください。拍子(リズム)がなければ、そこは混沌と化します。クロックはまさに、プロセッサのためにその役割を果たします。クロックは信じられないほど一定の速度で振動するクリスタルであり、1秒間に何十億回も電気パルスを送り出します。

「3.5 GHzプロセッサ」というとき、そのGHz(ギガヘルツ)はクロック速度、つまり1秒間に35億回の鼓動を意味します。一回の鼓動を「クロックサイクル」と呼び、これがコンピューティングにおける基本的な時間の単位です。

クロックサイクルの間には「何も」起こりません。コンピュータ全体が次の鼓動を待って停止します。宇宙で最も過酷な「だるまさんがころんだ(赤信号・青信号)」のようなものです。各「青信号」(クロックパルス)ごとに以下のことが行われます:

  • コンポーネント間でのデータ移動
  • 計算の実行
  • 論理判断の決定
  • メモリの読み書き

一つのサイクルで終わる操作(単純な加算)もあれば、多くのサイクルを要する操作(除算やRAMからのデータ取得)もあります。何十億ものコンポーネントがこの絶え間ない鼓動に同期して、特定の操作を正確に実行するよう振り付けられているのです。

クリスタルの振動を速くすることでプロセッサをオーバークロックできます。すべてが高速化しますが、同時に熱が発生し、安定性が低下します。やりすぎると、電子が鼓動に追いつけなくなり、コンピュータはクラッシュします。

かつて、これらの演算は部屋と同じ大きさのマシンで実装されていました。しかし、すべての計算を行うコンポーネントは驚くほど単純で、単なるスイッチです。オンかオフかのスイッチです。

これらのスイッチを正しいパターンで十分に接続すれば、それは計算になります。デジタル革命のすべては、洗練されたスイッチの配置に行き着きます。

この単純さは、スイッチさえあれば何でもコンピュータを構築できることを意味します。人々は水道管やバルブ、ドミノ、LEGOブロック、ビー玉、さらにはMinecraftのレッドストーンを使って機能するコンピュータを構築してきました。

その原理は1940年代から変わっていません。私たちは単に、スイッチを極限まで小さくすることに成功したのです。あなたのスマートフォンには、人類を月に送ったすべてのコンピュータを合わせたよりも多くの計算能力があり、原子レベルでスイッチを作る方法を見つけたおかげで、ポケットに収まるサイズになっています。

何百万ものパラメータを持つニューラルネットワークを実行するとき、私たちはこれらの小さなスイッチを1秒間に何十億回も切り替えており、すべてがクリスタルの鼓動に完璧に同期しています。すべての重みの更新、行列の乗算、活性化関数は、すべてクロックの鼓動に合わせて行進しているのです。

モデルの学習中に、コンピュータが離陸しようとしているかのような音がするのは当然のことです!

Link to this sectionニューラルネットワークを爆速化させる方法#

さて、クリスタルの鼓動に合わせて踊る何十億ものスイッチを持つチップがあり、そこに何百万ものパラメータを持つニューラルネットワークを実行したいとします。簡単なはずですよね?チップに数値を投げ込んで、やらせればいいだけです!

ニューラルネットワークを高速に実行するのは、冷蔵庫が3ブロック先にあり、鍋は1つしかなく、すべての材料が250キロもあるキッチンで5コースのフルコースを作ろうとするようなものです。計算自体が最大の問題ではありません。他のすべてが問題なのです。

Link to this sectionアーキテクチャの不一致#

ほとんどのチップはニューラルネットワークではなく、Microsoft Wordを実行するために設計されました。CPUは、if文やループを実行し、たまに税金の計算(スーパーコンピュータでさえ感情的に疲れ果てる唯一の計算です)をして人生を終えることを想定して作られました。CPUは順次実行に最適化されています。つまり、「これをして、あれをして、それをする」といった処理です。

しかし、ニューラルネットワークは全く異なります。ネットワークは「すべてを同時に」行いたいのです。学習中、予測がどれほど間違っていたかに基づいて何百万もの重みを更新します。推論(学習済みモデルの実際の使用)中には、何百万もの計算を同時にデータに適用しています。100万個の数値に別の100万個の数値を乗算する必要があると想像してください。あなたのCPUは、非常に高速ですが非常に几帳面な会計士のように、それらを一つずつ処理したがります。

これがGPUがAIコンピューティングのバックボーンになった理由です。GPUは、何百万ものピクセルの色を同時に計算する必要があるビデオゲームのために設計されました。ピクセルの色を計算することとニューラルネットワークの数学を実行することは、驚くほど似ています。どちらも大量のデータに対して同じ演算を並列に行う必要があるからです。

しかし、GPUでさえニューラルネットワークには完璧ではありません。そのため、企業は現在、AI専用のチップ(TPU、NPU、その他PUで終わるあらゆる頭字語のチップ)を構築しています。これらのチップは、ニューラルネットワークを高速化するという一つの仕事のためにゼロから設計されています。これらは、一つの料理しか作れないが、超人的な速さでそれを作るシェフを雇うようなものです。CPUが行列演算に順次追われ、GPUが並列処理でそれらをうまくこなす一方で、これらの専用チップは朝食、昼食、夕食に行列を食べてしまいます。

Link to this sectionメモリの壁(あるいは:ビットを移動させることが計算よりも難しい理由)#

現代のニューラルネットワーク計算では、実際に「計算」することよりも、データを「移動」させることに多くの時間とエネルギーを費やしています。

コンピュータチップを、稲妻のような速さで働く天才数学者だと想像してください。しかし、彼らの参考書はすべて街のあちこちの異なる建物に保管されています。どんな方程式でも即座に解けますが、まず数値を手に入れなければならず、その旅に永遠の時間がかかります。

チップは1クロックサイクルで2つの数値を乗算できます(繰り返しになりますが、1秒間に何十億もの鼓動があるうちの1回です)。稲妻のような速さです!しかし、メモリからチップへその数値を持ってくるのはどうでしょう?数百サイクルかかるかもしれません。数学者は1秒で問題を解けますが、図書館まで往復するのに5分かかるようなものです。

理由は距離(と空間)です。電気は速く進みますが、無限に速いわけではありません。チップ上でのデータの移動距離が長いほど、時間がかかります。コンピュータ設計者は、距離の異なる複数のストレージロケーションを持つ「メモリ階層」を作成することでこれを解決しました。

  • レジスタ(演算ユニットに直接組み込まれている):数学者のデスクです。即座にアクセス可能です!しかし非常に小さく、ここに保持できるのは約32個の数値のみです。目の前にメモを置いているようなものです。
  • L1キャッシュ(数マイクロメートル先):オフィス内の本棚です。何かを取得するのに3〜4サイクルかかります。ここには数千個の数値を格納できます。
  • L2キャッシュ(数ミリメートル先):廊下の先にあるファイルキャビネットです。10〜15サイクルかかり、数百万個の数値を格納できます。
  • L3キャッシュ(チップ全体):下の階の倉庫です。30〜50サイクルかかり、数千万個の数値を保持できます。
  • RAM(全く別のチップ上):街の向こう側にある倉庫です。100〜300サイクルかかります。ここには数十億の数値が住んでいます。
  • SSD/ハードドライブ(ケーブルで接続):完全に別の都市です。数百万サイクルかかります。巨大なストレージですが、氷河のような速度です。

正確な構造は異なります。スマートフォンのチップはL3キャッシュをスキップするかもしれませんが、サーバーCPUは大量に搭載している可能性があります。しかし、原則は同じです。メモリは近いほど高速ですが、容量は小さくなります。

さて、ここからがニューラルネットワークにとって痛手となります。弊社のUltralytics YOLOモデルが5,000万のパラメータを持っていると想像してください(ちなみにChatGPTは数十億です)。5,000万個の数値が、メモリから演算ユニットへと移動し、戻る必要があります。各数値がわずか4バイトだとしても、システム内を移動する必要があるデータは200メガバイトになります。

チップは各数値を1サイクルで処理できるかもしれませんが、RAMからその数値を取得するのに100サイクルかかるなら、時間の99%を配送待ちに費やしていることになります。交通渋滞に巻き込まれたF1カーのようなものです。計算能力がすべて揃っているのに、データが届くのを待っているだけです。

ここに重要な洞察があります。これが現代コンピューティングにおける「ボトルネック」です。これは「フォン・ノイマン・ボトルネック」と呼ばれます。チップの計算速度を上げるのは比較的簡単です。メモリを速くするのは物理的な限界に突き当たります。AIのパフォーマンス最適化の「ほぼすべて」がメモリレベルで行われるのはこのためです。エンジニアがニューラルネットワークを高速化するとき、計算を速くすることは稀です。その代わり、データをあまり移動させない、キャッシュを有効活用する、あるいは賢くアクセスするといった工夫を行っています。

現代のAIチップは計算速度だけでなく、メモリ帯域幅とデータの移動戦略に執着しています。データを先読みし、キャッシュにある値を再利用し、メモリへの往復を最小限に抑えるように計算を整理します。AIハードウェアの競争における勝者は、最速の電卓を持つ者ではなく、電卓にデータを供給し続ける方法を見つけた者たちです。ゲームのすべては、メモリへのアクセスパターンを最適化することにあるのです。

データを1ビット移動させるたびにエネルギーを消費します。大した量ではなく、ピコジュール単位の話ですが、1秒間にテラバイト単位を移動させれば、あっという間に積み上がります。実際、チップ上を1mm移動させることは、実際の計算を行うことよりも多くのエネルギーを消費します!

ニューラルネットワークの学習中にノートパソコンがジェットエンジンのような音を立てるのはこのためです。熱を発生させているのは計算ではなく、データの移動です。すべてのパラメータ更新、すべての勾配計算、すべてのフォワードパスが、文字通り部屋を暖めているのです。

現代のAIアクセラレータは、基本的に熱力学の実践です。チップが溶けるまでにどれだけの計算を詰め込めるか?どれだけ速く熱を逃がせるか?オーバークロックに似ていますが、クロックは常に最大値を指しており、火災を起こさないように必死な状態です。

Link to this section解決策は?アーキテクチャを意識した設計#

最も高速なニューラルネットワークとは、必ずしも最も賢いネットワークではなく、チップを念頭に置いて設計されたネットワークのことです。それらは:

  • データを可能な限りローカルに保持する
  • 計算を執拗なまでに再利用する
  • ハードウェアの能力と完全に整合させる
  • メモリの移動をコストをかけても最小限に抑える

これは「地元の食料品店の材料を使う」というレシピと、「チベットからスパイスを、フランスからチーズを、南極から水を輸入する」必要があるレシピの違いのようなものです。どちらも美味しいかもしれませんが、どちらが実用的かは明らかです。

だからこそ、ニューラルネットワークの高速化は芸術なのです。良い計算式を持つだけでは不十分で、ハードウェアを理解し、メモリ階層を尊重し、アーキテクチャと完璧に調和させる必要があるのです。

コンピュータサイエンスが物理学に出会い、工学に出会い、そして純粋な魔法に出会う世界へようこそ。ここでは数値を動かすことが計算することよりもコストがかかります。並列は高速ですが、同期は致命的です。あなたの最大の敵は複雑さではなく、距離なのです。

Link to this sectionYOLOを高速化する方法#

YOLOモデルを学習させると、学習環境で美しく動作するニューラルネットワークが得られます。しかし、ここがポイントです。あなたのゲーム用GPU、iPhone、そしてセキュリティカメラの中にある小さなチップは、それぞれ全く異なる言語を話しています。それらは異なる長所と短所を持っており、データをどのように処理するかについて全く異なる考え方を持っています。

このように考えてみてください。GPUには同時に動ける何千ものコアがあり、並列処理向けに作られています。一方、モバイルチップにはAI操作用に特別設計された回路があるかもしれませんが、特定の数学タイプしか処理できないかもしれません。そして、ドアベルカメラのエッジデバイスは?LED電球よりも少ない電力バジェットでAIを実行しようとしています。

Ultralyticsでは、10種類以上のエクスポートフォーマットをサポートしています。なぜなら、それぞれが異なるハードウェアに合わせて最適化されているからです。オプションが多すぎるということではなく、あなたの特定のニーズに最適な選択肢を用意しているということです。

Link to this section演算の融合:より少ない手間で、より多くのことを#

オリジナルのYOLOモデルでは、多くの操作が順次行われます。例えば、畳み込みを行い、次に結果を正規化し、次に活性化関数を適用するとします。これは3つの別々のステップであり、それぞれにメモリの読み書きが必要です。

しかし、ここが賢いポイントです。これらの操作を単一のステップに結合できるのです。YOLOをデプロイ用にエクスポートするとき、私たちはこれらの操作を融合させます。以下のようにする代わりに:

  1. 畳み込みの計算 → メモリに保存
  2. メモリから読み込み → 正規化 → メモリに保存
  3. メモリから読み込み → 活性化の適用 → メモリに保存

以下のようにします:

  1. 畳み込み + 正規化 + 活性化の計算 → メモリに保存

640×640の画像を処理する標準的なYOLOモデルにとって、この単純なトリックは何ギガバイトもの不要なメモリ転送を排除します。モバイル端末では、これがスムーズなリアルタイム検出と、イライラするようなラグの分かれ目となります。

Link to this sectionより小さな数値の使用:量子化の魔法#

YOLOは、物体を正確に検出するために、超高精度な数値は実際には必要としません。学習中には各重みを表すために32ビットを使用しますが、これはサンドイッチの材料を計量するために科学計算機を使うようなものです。実際のデプロイでは?8ビットで十分なのです。

これは量子化と呼ばれるもので、当社の最も強力な最適化手法の1つです。より小さな数値を使用することで、以下のような効果が得られます。

  • モデルサイズが75%縮小(Ultralytics YOLO11xの場合、200MBから50MBに)
  • ほとんどのデバイスで実行速度が2〜4倍に向上
  • 消費電力が大幅に削減(スマートフォンのバッテリーも長持ちします)

YOLOのすべてのレイヤーが、この削減に対して同じように敏感なわけではありません。基本的なエッジや形状を検出する初期レイヤーは堅牢であり、8ビット数値を使用しても何ら問題はありません。一方、「これは猫か、それとも犬か?」を判断する最終的な検出レイヤーには、もう少し精度が必要です。そのため、精度を維持しながら速度を最大化できるように、レイヤーごとに必要なビット数を使用して精度を調整しています。

入念な量子化を行うことで、Ultralytics YOLOは元の精度の99.5%を維持しながら、スマートフォン上での実行速度を3倍にできることがわかっています。これこそが、研究用モデルと現実世界で実際に使用できるモデルとの違いです。

Link to this section最適なアルゴリズムの選択#

同じ数学的演算を実行する方法は数十通りあります。単純な畳み込み(YOLOにおける中核的な演算)は、まったく異なるアルゴリズムを使用して計算でき、どれが最適かは特定のハードウェアや入力サイズに依存します。

YOLOをエクスポートする際、当社の最適化フレームワークは実際にさまざまなアルゴリズムをテストし、特定のケースに最適なものを選び出します。これは、目的地までの複数のルートがあり、現在の交通状況に基づいて選ぶようなものです。GPU上では多数のピクセルを同時に処理するアルゴリズムを使用し、CPU上では順次処理に最適化されたアルゴリズムを使用するかもしれません。計算内容は同じでも、実行戦略はまったく異なります。

Link to this sectionメモリ:隠れたボトルネック#

現代のコンピューティングにおいて、メモリが真のボトルネックであるという話を覚えていますか?これはYOLOにとって特に当てはまります。モデルには5000万のパラメータがある場合があり、推論中に数ギガバイトもの中間結果が生成されます。これらすべてのデータを移動させることは、実際の計算よりも時間がかかることがよくあります。

当社は、メモリ移動を最小限に抑えるためにいくつかのトリックを使用しています。

スマートスケジューリング:データが高速なキャッシュメモリにある間に即座に使用されるよう、演算を配置します。YOLOのフィーチャピラミッドネットワークにおいて、これによりメモリトラフィックが40%削減されます。

タイリング:画像全体を一度に処理するのではなく、キャッシュに収まる小さなタイルに分割します。これにより、プロセッサは低速なメインメモリから絶えずデータを取得するのではなく、高速なローカルメモリを使用して作業できるようになります。

バッファ再利用:中間結果のために絶えず新しいメモリ領域を作成するのではなく、同じメモリバッファを再利用します。これは非常に効率的で、YOLOのバックボーン全体を再利用可能なバッファのセットだけで実行できます。

Link to this sectionプルーニング:Less is more(少ないことは、より豊かなこと)#

驚くべき事実ですが、YOLOモデルはしばしば過剰にエンジニアリングされています。多くのレイヤーでチャネルの30%を削除しても、精度にはほとんど影響がありません。これは単にモデルを小さくするだけでなく、実行すべき計算が文字通り減るため、モデルの高速化にもつながります。

そのプロセスは洗練されています。ネットワークのどの部分が最終的な検出結果への寄与が少ないかを分析して削除し、その後、補償のためにモデルを微調整します。プルーニングされたYOLO11mモデルは、元の精度の99%を維持しながら30%高速化できます。バッテリー駆動のデバイスにおいて、この効率向上は数時間の追加動作時間に相当します。

Link to this sectionハードウェアアクセラレーション:各チップの強みを活かす#

プロセッサによって得意なことは異なり、パフォーマンスの差は驚くほど大きいです。同じYOLO11nモデルでも以下のような差が出ます。

  • 最新のIntel CPUで1フレームあたり45ミリ秒
  • NVIDIA RTX GPUで4ミリ秒
  • ハイエンドのスマートフォンプロセッサで22ミリ秒
  • Google Coral edge TPUで15ミリ秒

これらは単なるクロック周波数による速度差ではなく、根本的なアーキテクチャの違いを反映しています。GPUにはYOLOの畳み込み処理に最適な、並列動作する何千ものコアがあります。モバイルNPUにはニューラルネットワーク専用に設計された特殊回路があります。CPUは万能型であり、柔軟ですが特化はしていません。

最適化の鍵は、YOLOの演算を各チップが最も得意とすることに一致させることです。GPUは大量のデータに対して同じ演算を同時に行うことを好みます。モバイルNPUは特定の演算しかサポートしていないかもしれませんが、それを驚くほど効率的に実行します。edge TPUは8ビット整数でしか動作しませんが、その制約下で驚異的な速度を実現します。

Link to this sectionコンパイルの魔法#

YOLOモデルをエクスポートする際、舞台裏で驚くべきことが起こります。単にファイル形式を変換するだけでなく、ターゲットとなるハードウェア専用にモデルをコンパイルしているのです。これはGoogle翻訳とネイティブスピーカーの違いのようなものです。コンパイルプロセスでは以下が行われます。

  1. モデルを分析し、その構造と要件を理解する
  2. ハードウェアの能力を考慮し、得意なこと、苦手なことを把握する
  3. ハードウェアのネイティブ言語で話す最適化されたコードを生成する

コンパイラは、プロセッサのキャッシュをより良く使用するために演算を再構成したり、チップがサポートする特殊な命令を選択したり、機械学習を使用して最適な最適化戦略を見つけたりすることさえあります。そうです、私たちはAIを最適化するためにAIを使用しているのです。未来はここにあります!

このコンパイルステップにより、パフォーマンスに10倍の違いが生まれることがあります。同じYOLOモデルでも、汎用コードでは動作が遅い一方で、適切に最適化された命令セットでは高速に動作します。

Link to this section現実世界のエッジ展開#

YOLOが現実世界、特にエッジデバイスの厳しい世界に直面したときに何が起こるか話しましょう。24時間年中無休で物体検出を行うためにYOLOを実行する必要があるセキュリティカメラを想像してください。そこには過酷な制約があります。

  • メモリ:RAMの合計がわずか512MBから2GBである可能性がある
  • 電力:多くの場合、わずか2〜5ワット(スマートフォン充電器よりも少ない)
  • 冷却:ファンがなく、パッシブな放熱のみ
  • 信頼性:クラッシュすることなく継続的に実行する必要がある

実際に最適化によって達成できることは以下の通りです。YOLO11sを実行するセキュリティカメラの場合:

  • 元のモデル:15ワット、85°Cで高温になり、20 FPSを達成
  • 量子化とプルーニングで最適化:3ワット、快適な45°C、25 FPSを達成

消費電力を80%削減しながら、パフォーマンスを実際に向上させました!これこそが、オーバーヒートしてバッテリーを消耗するデバイスと、何年も確実に動作し続けるデバイスとの違いです。

鍵となるのは、適切なトレードオフを選択することです。エッジデバイスでは、多くの場合、以下のことを行います。

  • INT8量子化の使用(精度は低くなりますが、消費電力は大幅に抑えられます)
  • 活動が少ないときはフレームの処理数を減らす
  • 熱を管理するために、さまざまなプロセッサ間で処理を分散させる
  • モデルを高速メモリに完全に収まるサイズに保つ

Link to this section最適化プロセス#

Ultralyticsでは、最適化に対して体系的なアプローチをとっています。まず、モデルをプロファイリングして、どこで実際に時間が費やされているかを理解します。多くの場合、ボトルネックは予想外の場所にあります。時間の80%がわずか数個のレイヤーで費やされていたり、メモリ転送が計算時間を支配していたりするかもしれません。

次に、最適化を反復的に適用します。

  1. 最大のボトルネックから開始する
  2. 一度に1つの最適化を適用する
  3. 速度向上と精度の影響の両方を測定する
  4. 適切なトレードオフを提供する最適化を保持する
  5. 目標に達するまで繰り返す

例えば、スマートフォンへのYOLO11m展開の場合:

  • ベースライン:1フレームあたり200ms、200MBモデル
  • 量子化後:1フレームあたり80ms、50MBモデル
  • プルーニング後:1フレームあたり60ms、35MBモデル
  • 演算融合後:1フレームあたり45ms、35MBモデル

各ステップで、元の精度の99%以上を維持しつつパフォーマンスが向上します。その結果、ポケットに入るデバイス上でリアルタイム物体検出が可能になるのです。

Link to this section未来:ヘテロジニアスコンピューティング#

現代のデバイスは、複数のプロセッサを連携させることでより賢くなっています。スマートフォンには1つのプロセッサだけでなく、いくつかのプロセッサがあり、それぞれが異なるタスクに特化しています。

  • カメラセンサーには、前処理を行うためのISP(Image Signal Processor)がある
  • NPU(Neural Processing Unit)がYOLO推論を実行する
  • CPUが複雑なロジックと連携を処理する
  • GPUが画面上に結果をレンダリングする

YOLO最適化の未来は、これらのプロセッサ全体にモデルをインテリジェントに分割することです。おそらく、NPUが主要な畳み込みを処理し、CPUが最終的な検出ロジックを行い、GPUが結果を可視化するでしょう。各プロセッサが最も得意なことを実行し、単一のプロセッサで達成できるよりも効率的なパイプラインを作り出します。

私たちは、利用可能なプロセッサ間でYOLOを分割する最良の方法を自動的に見つけ出すスマートなパーティショニングアルゴリズムを開発しています。それらの能力だけでなく、プロセッサ間でのデータ移動コストも考慮に入れています。

Link to this section結論#

YOLOモデルの最適化は、単なるファイル形式の変換ではありません。最先端のAIを現実世界で実際に機能するものに変えることです。量子化(小さな数値の使用)、プルーニング(不要な部分の削除)、演算融合(ステップの結合)、スマートなメモリ管理といった手法を通じて、精度を維持しながら10〜100倍のパフォーマンス向上を達成します。

興味深いことに、普遍的な「最善の」最適化というものはありません。無制限の電力を持つクラウドサーバーには、バッテリー駆動のドローンとは異なる最適化が必要です。専用のAIチップを搭載したスマートフォンは、Raspberry Piとは異なる扱いが必要です。そのため、Ultralyticsは非常に多くのエクスポートオプションを提供しており、それぞれが異なるシナリオに対して最適化されています。

私たちが議論したすべての最適化は、コンピュータビジョンをどこでも利用できるようにするという1つの目標に貢献しています。スマートドアベル、ドローンアプリケーション、大規模なクラウドサービスなど、どのような構築においても、制約の中でYOLOを機能させるためのツールを提供します。

UltralyticsでYOLOモデルをエクスポートするとき、単にファイルを保存しているだけではありません。ニューラルネットワークを実用的にするための長年の研究を活用しているのです。最先端のAIモデルを、現実のハードウェア、現実の制約下で動作し、現実の問題を解決できるものに変えているのです。

これこそが、Ultralyticsで行っていることです。私たちはAI研究と実践的な展開との間のギャップを埋めます。AIの未来は最高のモデルを持つことだけではなく、それらのモデルを現実世界で有用にすることにあるため、私たちはコンピュータビジョンをどこでも機能させます。

Explore solutions

Real-time AI that works with your team

ロボティクスにおけるAI

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律航行、認識、物体追跡、リアルタイム制御を推進します。
詳細はこちら
Real-time AI that works with your team

物流におけるAI

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物の検査、仕分け、車両追跡、リアルタイムの倉庫安全モニタリングが可能になります。
詳細はこちら
Real-time AI that works with your team

小売業界におけるAI

Ultralytics YOLOモデルで小売を再定義しましょう。ビジョンAIは、在庫追跡、棚のモニタリング、キュー管理、そしてより賢明な顧客インサイトを促進します。
詳細はこちら
Real-time AI that works with your team

ヘルスケアにおけるAI

Ultralytics YOLOモデルを使用してヘルスケアソリューションを構築しましょう。ヘルスケア分野におけるビジョンAIは、より高速な医療画像診断、よりスマートな診断、患者モニタリングを推進します。
詳細はこちら
Real-time AI that works with your team

製造におけるAI

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPEコンプライアンス、組立ラインの自動化を促進します。
詳細はこちら
Real-time AI that works with your operation

自動車におけるAI

Ultralytics YOLOモデルを使用して、自動車分野にコンピュータビジョンを適用しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳細はこちら
Real-time AI tailored to your operation

農業におけるAI

Ultralytics YOLOモデルを使用して、スマート農業にビジョンAIを導入しましょう。作物モニタリング、家畜のトラッキング、精密農業を強化し、より高くスマートな収穫を実現します。
詳細はこちら
Real-time AI that works with your team

ロボティクスにおけるAI

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律航行、認識、物体追跡、リアルタイム制御を推進します。
詳細はこちら
Real-time AI that works with your team

物流におけるAI

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物の検査、仕分け、車両追跡、リアルタイムの倉庫安全モニタリングが可能になります。
詳細はこちら
Real-time AI that works with your team

小売業界におけるAI

Ultralytics YOLOモデルで小売を再定義しましょう。ビジョンAIは、在庫追跡、棚のモニタリング、キュー管理、そしてより賢明な顧客インサイトを促進します。
詳細はこちら
Real-time AI that works with your team

ヘルスケアにおけるAI

Ultralytics YOLOモデルを使用してヘルスケアソリューションを構築しましょう。ヘルスケア分野におけるビジョンAIは、より高速な医療画像診断、よりスマートな診断、患者モニタリングを推進します。
詳細はこちら
Real-time AI that works with your team

製造におけるAI

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPEコンプライアンス、組立ラインの自動化を促進します。
詳細はこちら
Real-time AI that works with your operation

自動車におけるAI

Ultralytics YOLOモデルを使用して、自動車分野にコンピュータビジョンを適用しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳細はこちら
Real-time AI tailored to your operation

農業におけるAI

Ultralytics YOLOモデルを使用して、スマート農業にビジョンAIを導入しましょう。作物モニタリング、家畜のトラッキング、精密農業を強化し、より高くスマートな収穫を実現します。
詳細はこちら
Real-time AI that works with your team

ロボティクスにおけるAI

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律航行、認識、物体追跡、リアルタイム制御を推進します。
詳細はこちら
Real-time AI that works with your team

物流におけるAI

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物の検査、仕分け、車両追跡、リアルタイムの倉庫安全モニタリングが可能になります。
詳細はこちら
Real-time AI that works with your team

小売業界におけるAI

Ultralytics YOLOモデルで小売を再定義しましょう。ビジョンAIは、在庫追跡、棚のモニタリング、キュー管理、そしてより賢明な顧客インサイトを促進します。
詳細はこちら
Real-time AI that works with your team

ヘルスケアにおけるAI

Ultralytics YOLOモデルを使用してヘルスケアソリューションを構築しましょう。ヘルスケア分野におけるビジョンAIは、より高速な医療画像診断、よりスマートな診断、患者モニタリングを推進します。
詳細はこちら
Real-time AI that works with your team

製造におけるAI

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPEコンプライアンス、組立ラインの自動化を促進します。
詳細はこちら
Real-time AI that works with your operation

自動車におけるAI

Ultralytics YOLOモデルを使用して、自動車分野にコンピュータビジョンを適用しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳細はこちら
Real-time AI tailored to your operation

農業におけるAI

Ultralytics YOLOモデルを使用して、スマート農業にビジョンAIを導入しましょう。作物モニタリング、家畜のトラッキング、精密農業を強化し、より高くスマートな収穫を実現します。
詳細はこちら

AIの未来を共に築き上げましょう!

機械学習の未来とともに旅を始めましょう