Backbone
バックボーンとは、ビジョンモデルの基盤となる事前学習済みネットワークです。ピクセルをネックとヘッドに渡すマルチスケールの特徴マップに変換します。
バックボーンとは、ニューラルネットワークの一部で、生の入力を、モデルの残りの部分で使用する特徴マップに変換します。コンピュータービジョンでは通常、大規模なImageNetなどのデータセットで事前学習された畳み込みニューラルネットワーク(CNN)またはビジョンTransformer(ViT)がバックボーンになります。その後のレイヤーは通常、ネックとタスク固有のヘッドで構成され、特徴量をクラスラベル、バウンディングボックス、マスク、キーポイントに変換します。バックボーン、エンコーダー、特徴抽出器は同義語として使われることがよくあります。U-NetなどのU-Netのようなエンコーダー・デコーダーモデルでは、通常「エンコーダー」という名称が使われます。
バックボーンの仕組み#
ビジョンバックボーンは、画像を段階的に処理します。各段階では畳み込みブロックまたはアテンションブロックを積み重ね、空間解像度を半分にし、通常はチャネル数を増やします。そのため、640×640の入力は、ストライド8で80×80、ストライド16で40×40、ストライド32で20×20のマップになります。初期段階ではエッジ、色、テクスチャに反応します。後段では、各出力位置が入力画像のより広い受容野をカバーするため、物体の部品や物体全体に反応します。検出モデルとセグメンテーションモデルは、最後の3段階から特徴を取り出し、特徴ピラミッドネットワーク(FPN)などのネックに渡します。これにより、高解像度マップでは小さな物体を、低解像度マップでは大きな物体を検出できます。
バックボーン、ネック、ヘッドの比較#
現代の物体検出アーキテクチャの大半は3つの部分に分かれており、コンポーネントの交換やレイヤーの凍結を行う際には、その境界が重要になります。
- バックボーン: 特徴抽出を行い、複数の解像度で特徴マップを生成します。さまざまなタスクやデータセットに転用できる汎用的な視覚知識を保持します。
- ネック: バックボーンの各スケールを融合し、各出力レベルが空間的な細部と高レベルの意味の両方を持つようにします。FPNはトップダウンパスを追加し、PANetはその後にもう1つのボトムアップパスを追加します。分類モデルには通常ネックがなく、バックボーンの最終段階をプーリングして単一のベクトルにします。
- ヘッド: 融合された各特徴マップをタスクの出力に変換します。検出ヘッドはボックスとクラススコアを予測し、セグメンテーションヘッドとポーズヘッドは同じ種類の特徴量からマスクとキーポイントを予測します。
代表的なバックボーンの系統#
- ResNet: 残差接続によって信号がブロックをスキップできるため、最大152層のネットワークをトレーニングできます。ResNetのアンサンブルはILSVRC 2015の分類タスクで優勝しました。ResNet-50は、検出器を比較する際の標準的な参照バックボーンとして現在も使われています。
- CSPNet: Cross Stage Partialネットワークは、各段階のチャネルの一部だけをその段階のブロックに通し、残りを最後に合流させます。これにより、ImageNetの精度を維持または向上させながら計算量を20%削減しました。YOLOv4のバックボーンであるCSPDarknet53は、これらの段階から構成されています。
- ConvNeXt: 大きなカーネルや少ない正規化レイヤーなど、Transformerから取り入れた設計を用いて現代化したResNetです。ImageNetのトップ1精度で87.8%を達成し、COCO検出ではSwin Transformerを上回りました。
- ViTとSwin Transformer: 通常のViTは最初から最後まで単一の解像度を維持するため、検出モデルでは代わりにSwinがよく使われます。Swinはシフトする局所ウィンドウ内でアテンションを計算し、CNNに似た段階的な階層構造を生成します。
- 自己教師あり基盤バックボーン: DINOv3は、ラベルのない17億枚の画像を使って、70億パラメーターのViTをトレーニングします。バックボーンを凍結したままでも、セグメンテーションや深度推定などの密な予測タスクで、その特徴量は高い性能を発揮します。
事前学習済みバックボーンと転移学習#
バックボーンをスクラッチから学習するには、大規模なデータセットと長い学習スケジュールが必要なため、ほとんどのプロジェクトは事前学習済み重みから開始します。この転移学習が有効なのは、あるデータセットで学習したエッジ、テクスチャ、形状が、多くの場合ほかのデータセットでも役立つためです。事前学習ドメインに近い小規模データセットでは、バックボーンを凍結すると汎用特徴が維持され、過学習が抑えられ、学習時のメモリ使用量も減ります。凍結したレイヤーには勾配やオプティマイザー状態が保存されないためです。X線や熱画像のようにデータセットが大規模または遠いドメインの場合は、バックボーンもファインチューニングすることで特徴を適応させられます。YOLO26では、バックボーンはレイヤー0~10(ストライド畳み込み、C3k2ブロック、SPPFプーリングブロック、C2PSAアテンションブロック)で構成されます。freeze=11学習引数を指定すると、これらすべてが凍結され、ネックと検出ヘッドだけが更新されます。この設定についてはファインチューニングガイドで詳しく説明しています。
from ultralytics import YOLO
# COCOで事前学習したYOLO26検出モデルを読み込む
model = YOLO("yolo26n.pt")
# バックボーン全体(レイヤー0~10)を凍結した状態で、小規模なデータセットにファインチューニングする
results = model.train(data="coco8.yaml", epochs=3, imgsz=640, freeze=11)トレーナーは最初のエポックの前にFreezing layer 'model.0.conv.weight'をログに出力します。レイヤー0~10の他のパラメーターについても同様の行が出力されます。これらのパラメーターは固定されたまま、ネックとヘッドが新しいデータを学習します。










