剪定Ultralytics のようなニューラルネットワークを最適化する仕組みを学びましょう。冗長なパラメータを除去することで実現します。エッジAI向けの構造化および非構造化手法を探求します。
剪定は戦略的な モデル最適化手法であり、 不要なパラメータを除去することで ニューラルネットワークのサイズと計算複雑性を低減する。 庭師が枯れた枝や伸びすぎた枝を剪定して樹木の成長を促すように、 剪定アルゴリズムは冗長な重みとバイアスを特定し除去する。 weights and biases を特定し除去する。 主な目的は、高い精度を維持しつつ 大幅に少ないメモリとエネルギーを消費する 圧縮された「疎な」モデルを作成することである。 この削減は推論遅延の改善に不可欠であり、 高度なアーキテクチャが 携帯電話や組み込みデバイスなどの リソース制約のあるハードウェア上で 効率的に動作することを可能にする。
現代の深層学習モデルはしばしば 過パラメータ化されており、特定の課題を解決するために必要な接続数をはるかに超えた接続を含んでいる。 プルーニングはこの特性を活用し、出力への影響が無視できると仮定して、 値がゼロに近い接続を除去する。 パラメータ除去後、モデルは通常微調整プロセスを経る。これは残存重みを調整し、失われた性能を回復させるための短時間の再学習である。この概念は「宝くじ仮説」と密接に関連しており、大規模ネットワークには同等の精度を達成可能な小型で高効率なサブネットワークが存在すると示唆している。
剪定戦略には主に二つのカテゴリーがある:
エッジAIをハードウェアリソースが限られる様々な産業で実現するには、 剪定が不可欠である:
YOLO26のような最先端モデルは効率性を重視して設計されていますが、開発者はPyTorchなどのライブラリを用いて層のさらなる最適化に剪定を適用できます。 PyTorchなどのライブラリを使用してレイヤーをさらに最適化できます。以下の例は、畳み込み層に非構造化プルーニングを適用する方法を示しています。
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of weights with the lowest magnitude
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity (percentage of zero parameters)
sparsity = 100.0 * float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Sparsity achieved: {sparsity:.2f}%")
モデルを効果的に最適化して デプロイするには、 プルーニングを他の手法と区別することが有用である:
包括的なライフサイクル管理(トレーニング、アノテーション、最適化モデルのデプロイを含む)には、 Ultralytics を活用できます。これにより、 データセット管理からONNXやPyTorch 3.0などのハードウェア対応フォーマットでのモデルエクスポートに至るワークフローが簡素化されます。 ONNX や TensorRTといったハードウェアに最適化された形式でのモデルエクスポートに至るまでのワークフローを簡素化します。