エッジAI向けに、モデルプルーニングがニューラルネットワークのサイズと複雑さを削減する方法を学びましょう。モバイル端末での推論高速化に向け、Ultralytics 最適化する戦略を探求します。
モデルプルーニングは、機械学習における手法であり、不要なパラメータを体系的に除去することで、 ニューラルネットワークのサイズと計算上の複雑さを削減するために用いられる。 庭師が枯れた枝や伸びすぎた枝を剪定して樹木の成長を促すように、開発者は人工ネットワークを剪定することで、より高速で小型、かつエネルギー効率の高いネットワークを実現します。このプロセスは、スマートフォン、組み込みセンサー、エッジコンピューティングハードウェアなど、リソースが限られたデバイス上で現代的な深層学習アーキテクチャを展開するために不可欠です。
剪定の核心的な考え方は、深層ニューラルネットワークがしばしば「過パラメータ化」されているという点にある。つまり、それらは weights and biases が 特定の課題を解決するために厳密に必要な量よりもはるかに多い状態を指します。学習過程において、モデルは膨大な数の 接続を学習しますが、それら全てが最終出力に等しく寄与するわけではありません。プルーニングアルゴリズムは学習済みモデルを分析し、 こうした冗長または非情報的な接続(典型的には重みがゼロに近いもの)を特定して除去します。
剪定済みモデルのライフサイクルは、一般的に以下の手順に従います:
この手法はしばしば宝くじ仮説と関連付けられる。 この仮説によれば、密なネットワークには孤立した小さな部分ネットワーク(当選券)が含まれており、 それらが単独で学習された場合、元のモデルと同等の精度を達成し得る。
剪定方法は、一般的に除去対象の構成要素の構造に基づいて分類される。
エッジAIにとって、プルーニングは重要な実現手段であり、 クラウド接続が利用できない、または遅すぎる環境でも高度なモデルを実行可能にする。
モデル剪定は強力な手法ではあるものの、他のモデル最適化技術と混同されたり併用されたりすることが多い。
Python 、PyTorchを使用して畳み込み層に非構造化プルーニングを適用する方法を示しています。 PyTorch。これは、モデルを ONNX ONNXなどの最適化形式にエクスポートする前の一般的な手順です。
import torch
import torch.nn as nn
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
module = nn.Conv2d(in_channels=1, out_channels=20, kernel_size=3)
# Apply unstructured pruning to remove 30% of the connections
# This sets the weights with the lowest L1-norm to zero
prune.l1_unstructured(module, name="weight", amount=0.3)
# Calculate and print the sparsity (percentage of zero elements)
sparsity = 100.0 * float(torch.sum(module.weight == 0)) / module.weight.nelement()
print(f"Layer Sparsity: {sparsity:.2f}%")
データセットとモデルの全ライフサイクル(トレーニング、評価、デプロイを含む)を管理したいユーザー向けに、Ultralytics 合理化されたインターフェースを提供します。YOLO26のような高度に最適化されたモデルの作成プロセスを簡素化し、TensorRTなどのハードウェア対応フォーマットへのエクスポートを可能にします。 TensorRT やCoreMLMLといったハードウェア対応フォーマットへのエクスポートを簡素化します。