Link to this sectionYOLOアーキテクチャの解説:YOLOv3からYOLO26まで#
すべてのUltralytics YOLOモデルは3つのステージで構成されています。特徴を抽出するバックボーン、スケール間で特徴を融合するネック、そしてボックスとクラスを予測するヘッドです。本ガイドでは、各ステージを構成するモジュールと、YOLOv3からYOLO26への変化について解説し、すべてのコンポーネントをultralytics/cfg/models/内の設定ファイルとultralytics/nn/modules/内のモジュールクラスに照らし合わせて説明します。
各モデルは、YAMLファイル内でレイヤーの順序付きリストとして宣言的に定義されます。各レイヤーは[from, repeats, module, args]形式に従います。これには、どのレイヤーから入力されるか、モジュールを何回繰り返すか、レイヤーのクラス(Conv、C3k2、SPPF、Detectなど)、およびそのコンストラクター引数が含まれます。モデルYAML設定ガイドでは、この形式(バリアントの深さと幅の倍数に応じてrepeatsやargsがどのようにスケールするかを含む)と、完全なモジュール解決システムについて文書化しています。本ガイドではモジュールそのものと、バージョン間でそれらがどのように変化したかに焦点を当てます。
Link to this section3つのステージ#
すべてのUltralytics YOLOモデルは、以下の3つの連続したステージを通じて画像を処理し、それぞれが明確な役割を担っています。
| ステージ | 役割 | 出力 |
|---|---|---|
| バックボーン | 入力画像から複数の解像度で特徴を抽出する | ストライド8、16、32(P3、P4、P5)における特徴マップ |
| ネック | スケール間で特徴を融合し、小さなオブジェクトと大きなオブジェクトの両方にコンテキストを持たせる | マルチスケール融合特徴マップ |
| ヘッド | 融合された特徴からバウンディングボックスとクラススコアを予測する | アンカーポイントごとの検出 |
基本ユニットは**Conv**ブロック(conv.pyで定義)であり、2D畳み込み、バッチ正規化、およびSiLU活性化関数が順次適用されます。以下のすべての大きなモジュールは、Convブロックを組み合わせることで構築されています。
Link to this sectionアーキテクチャ図#
Each version keeps the same backbone → neck → head skeleton and changes specific stages. The tabs below show the per-version structure: the backbone and neck stages follow the configs in ultralytics/cfg/models/, while the YOLOv3 and YOLOv5 heads are drawn in their original anchor-based form rather than the anchor-free u-variant head their package configs actually ship. Stepping through the tabs shows what each generation added. In short, the progression is: YOLOv3 is an FPN-only, anchor-based detector; YOLOv5 adds the bottom-up PAN path and SPPF; YOLOv8 switches to the C2f block with an anchor-free, DFL head; YOLO11 inserts C2PSA attention and the C3k2 block; and YOLO26 adds an SPPF residual and makes the head NMS-free and DFL-free. Node colors follow the documentation diagram convention: green input, blue backbone, slate spatial pooling and attention, orange neck, purple head and output.
flowchart TD
IN[Input 640x640]:::start --> ST[Conv stem<br/>5x stride-2 down to P1-P5]:::proc
ST --> BB[Darknet-53 backbone<br/>stacked Bottleneck]:::proc
BB --> FPN[Neck FPN only<br/>top-down Upsample + Concat]:::decide
FPN --> HD[Detect head<br/>3 scales, anchor-based]:::out
HD --> O[Predictions + NMS]:::out
classDef start fill:#4CAF50,color:#fff
classDef proc fill:#2196F3,color:#fff
classDef decide fill:#FF9800,color:#fff
classDef out fill:#9C27B0,color:#fffThe YOLOv3 and YOLOv5 diagrams show the original anchor-based head. The ultralytics package ships the anchor-free YOLOv3u and YOLOv5u configs — the same Darknet-53 and C3 backbones with YOLOv8's Detect head — described under Detection Head.
Link to this sectionバックボーンブロック:Bottleneck → C3 → C2f → C3k2#
バックボーンは、ストライド2のConvダウンサンプリングレイヤーの間に繰り返しCSP(Cross-Stage Partial)ブロックを積み重ねます。その繰り返しブロックこそが、バージョン間で最も変化した部分です。以下のすべてのブロックはblock.pyに存在します。c1/c2は入力/出力チャンネルであり、c = 0.5 * c2は隠れ層の幅です。
Link to this sectionBottleneck (YOLOv3)#
基本ユニットはBottleneckであり、2つのConvレイヤー(デフォルトカーネルサイズは(3, 3))と、shortcut=Trueかつc1 == c2の場合のオプションの残差加算で構成されます。YOLOv3のDarknet-53バックボーンはこれらを直接積み重ね、CSP分割を行わずに3つのスケール(ストライド8、16、32)で検出を行います。
Link to this sectionC3 (YOLOv5)#
YOLOv5のC3は、入力を2つの1x1畳み込みに分割します。cv1はn個の連続したBottleneckブロック(カーネルサイズは(1, 1)と(3, 3))に供給され、cv2はそれらをバイパスします。2つのパスは連結され、3つ目の1x1 Convによって融合されます。
def forward(self, x):
# C3: bottleneck path m(cv1(x)) concatenated with bypass cv2(x), then fused by cv3
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))最終的なボトルネック出力のみが融合用畳み込みに到達するため、cv3は2つの特徴マップを参照します。
Link to this sectionC2f (YOLOv8)#
YOLOv8のC2f(
cv1 = Conv(c1, 2 * c, 1)、次にchunk(2)が出力を2つのcチャンネルテンソルに分割します。n個のBottleneck(c, c)ブロック(カーネルサイズは(3, 3)、(3, 3))が順次実行され、それぞれが前段のブロックの出力を入力として受け取ります。- すべての
n + 2個の中間テンソルが連結され、cv2 = Conv((2 + n) * c, c2, 1)によって融合されます。
C3が2つの特徴マップを融合用畳み込みに渡すのに対し、C2fはn + 2個を渡します。すべてのボトルネックの中間出力が再利用されます。
Link to this sectionC3k2 (YOLO11およびYOLO26)#
YOLO11 and YOLO26 use C3k2, a subclass of C2f that swaps the repeating unit. Each of the n blocks becomes, depending on the constructor flags:
- 通常の
Bottleneck(デフォルト、c3k=False) C3kブロック(c3k=True):カーネルサイズが設定可能なC3のバリアントBottleneck+PSABlockのペア(attn=True)
The second YAML arg sets c3k; for example [-1, 2, C3k2, [512, True]] builds one C3k2 module at 512 output channels whose internal blocks are C3k (since c3k=True). For CSP modules, the repeats field — here 2, before it is scaled by the variant's depth multiple — becomes the block's internal repeat count rather than stacking separate modules.
Link to this section空間プーリング:SPP → SPPF#
バックボーンの最後には、受容野を広げるための空間ピラミッドプーリングブロックがあります。YOLOv5は、元のマルチカーネルSPPを**SPPF**(Spatial Pyramid Pooling - Fast)に置き換えました。これは、MaxPool2d(kernel_size=5, stride=1, padding=2)をn = 3回連続で適用し、入力と3つのプーリング出力をすべて連結して1x1 Convで融合するものです。これは数学的にはSPP(k=(5, 9, 13))と同等ですが、連結された5x5プーリングがより大きなカーネルの受容野をカバーするため、より低コストです。
YOLO26はショートカットフラグ(SPPF, [1024, 5, 3, True])を渡します。最も深いレイヤーでc1 == c2 == 1024となるため、SPPFは残差接続(return y + x)を追加します。
Link to this section空間アテンション:C2PSA (YOLO11以降)#
YOLO11 added C2PSA after SPPF. It is a CSP block whose active branch is a stack of n PSABlock (Position-Sensitive Attention) modules: cv1 = Conv(c1, 2 * c, 1) splits the features, one half passes through the PSABlock stack, and cv2 = Conv(2 * c, c1, 1) fuses the concatenation. Each PSABlock applies multi-head attention followed by a two-layer feed-forward network (Conv(c, 2 * c, 1) → Conv(2 * c, c, 1)), each with a residual connection. YOLO26 keeps the same C3k2 + C2PSA backbone.
Link to this sectionネック:FPN + PAN#
ネックは、バックボーンのP3/P4/P5特徴マップを、トップダウンのFeature Pyramid Network (FPN)とそれに続くボトムアップのPath Aggregation Network (PAN)で融合します。YAMLヘッドセクションにおいて、FPNはnn.Upsample + Concat(意味情報を高解像度へ伝達)、PANはストライド2のConv + Concat(局所化情報を上方へ伝達)です。
# YOLO11 head (FPN top-down, then PAN bottom-up)
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, False]] # 13
# ... second upsample + concat to P3 ...
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 13], 1, Concat, [1]] # cat head P4 (PAN)
- [-1, 2, C3k2, [512, False]] # 19ネックは、その世代のバックボーンブロック(YOLOv5ではC3、YOLOv8ではC2f、YOLO11およびYOLO26ではC3k2)を再利用するため、各マージポイントではバックボーンと同じモジュールが実行されます。3つの融合出力がヘッドに供給されます。YOLOv3は例外で、そのネックはトップダウンのFPNのみであり(YAMLヘッドにストライド2のダウンサンプリングがない)、YOLOv5が導入したボトムアップのPANパスはありません。
Link to this section検出ヘッド:アンカーベース → アンカーフリー → NMSフリー#
ヘッドは、3つの融合特徴マップを検出タスクのための予測へと変換します。その設計は、アンカーベースからアンカーフリー、そしてNMSフリーへとバージョン間で変化しています。
Link to this sectionアンカーフリー、デカップリングされたDetect#
オリジナルのYOLOv3およびYOLOv5は、アンカーベースのカップリングされたヘッドを使用していました。これは事前定義されたアンカーボックスと、ボックスおよびクラス予測用の共有ブランチを持つものです。スタンドアロンのultralytics/yolov3およびultralytics/yolov5リポジトリはそのアンカーベース設計を維持しています。主要なultralyticsパッケージは、アンカーフリーのYOLOv3uおよびYOLOv5uバリアントを提供しています。これらはDarknet-53とC3バックボーンをYOLOv8のアンカーフリーDetectヘッドと組み合わせたものであり、ここで文書化されているyolov3.yamlおよびyolov5.yaml設定は、歴史的な設計ではなく、これらのuバリアントです。
Detectヘッド(head.py)はアンカーフリーかつデカップリングされています。ピラミッドレベルごとに2つの並列ブランチを実行し、アンカーボックスに対してではなく、グリッドポイント上で直接予測を行います。
- ボックスブランチ(
cv2):Conv(x, c2, 3)→Conv(c2, c2, 3)→Conv2d(c2, 4 * reg_max, 1)。 - クラスブランチ(
cv3): YOLO11およびYOLO26では、2つの深さ方向に分離可能なブロック(DWConv+1x1 Conv) →Conv2d(c3, nc, 1)。YOLOv8はレガシーなバリアントであり、2つの3x3 Convレイヤー →Conv2d(c3, nc, 1)を使用します。
したがって、各アンカーポイントはno = nc + 4 * reg_max個の出力を生成します。事前定義されたアンカーを削除することで、調整が必要なハイパーパラメータからアンカーボックスのサイズとアスペクト比が排除されます。
Link to this sectionDistribution Focal Loss (DFL)#
YOLOv8およびYOLO11は、4つのボックス座標のそれぞれを単一のスカラーではなく、reg_max = 16個のビンの分布として回帰します(Generalized Focal Lossの積分形式)。DFLモジュールは4 * reg_max個のボックスチャンネルを(4, reg_max)に再形成し、reg_maxビン全体にソフトマックスを適用し、予想されるビンインデックスを取得します(各ビンインデックスにそのソフトマックス確率を重み付けして合計)。これは固定された1x1畳み込みとして実装されており、その重みはビンインデックスarange(reg_max)であるため、重み付けされた合計は単一の内積となります。
Link to this sectionYOLO26:NMSフリー、DFLフリー#
YOLO26は、ヘッドが直接読み取る2つのYAMLパラメータを設定します。
end2end: True—Detectはブランチをone-to-oneヘッド(one2one_cv2/one2one_cv3)にディープコピーし、オブジェクトごとに単一の予測を生成することで、非最大値抑制(NMS)後処理ステップを削除します。エクスポートと移行の詳細については、エンドツーエンド検出ガイドを参照してください。reg_max: 1— ビンが1つの場合、self.dflはnn.Identity()になり、no = nc + 4となります。ヘッドは座標を直接回帰し、エクスポートされたONNXグラフにはDFL演算は表示されません。
Across its five model sizes (n/s/m/l/x), YOLO26 reaches 40.9-57.5 mAP on COCO at 1.7-11.8 ms T4 TensorRT latency, as reported in the YOLO26 paper.
Link to this sectionバージョン別概要#
| バージョン | バックボーンブロック | 空間プーリング | アテンション | 検出ヘッド | DFL |
|---|---|---|---|---|---|
| YOLOv3 | Darknet-53 (Bottleneck) | 基本設定になし | なし | オリジナル:アンカーベース、uバリアント:アンカーフリー | なし / あり (u) |
| YOLOv5 | C3 (CSP) | SPPF | なし | オリジナル:アンカーベース、uバリアント:アンカーフリー | なし / あり (u) |
| YOLOv8 | C2f | SPPF | なし | アンカーフリー、デカップリング | あり (reg_max=16) |
| YOLO11 | C3k2 | SPPF | C2PSA | アンカーフリー、デカップリング | あり (reg_max=16) |
| YOLO26 | C3k2 | SPPF + ショートカット | C2PSA | アンカーフリー、NMSフリー (end2end) | 削除済み (reg_max=1) |
モデルごとの詳細、性能表、および使用例については、YOLOv3、YOLOv5、YOLOv8、YOLO11、およびYOLO26の各個別ページを参照してください。
Link to this sectionアーキテクチャを自分で調査する#
model.info()メソッドは、レイヤー、パラメータ、およびFLOPsの要約を出力し、解析されたモジュールリストはmodel.model.modelで利用可能です。
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo11n.pt")
# Fuse Conv + BatchNorm layers so counts match the published specs
model.fuse()
# Print a summary: layers, parameters, gradients, GFLOPs
model.info()
# Inspect the detection head (the last module in the network)
head = model.model.model[-1]
print(type(head).__name__, "| reg_max:", head.reg_max, "| end2end:", head.end2end)3世代にわたってスニペットを実行すると、変更点が数値で示されます。これらはultralyticsパッケージからの実際の融合モデル出力であり、各モデルページで公開されているパラメータおよびFLOPs数と一致します。
| モデル | レイヤー | パラメータ | GFLOPs | reg_max | end2end | DFLレイヤー |
|---|---|---|---|---|---|---|
| YOLOv8n | 72 | 3,151,904 | 8.7 | 16 | False | DFL |
| YOLO11n | 100 | 2,616,248 | 6.5 | 16 | False | DFL |
| YOLO26n | 122 | 2,408,932 | 5.4 | 1 | True | Identity |
YOLO26nはreg_max=1、end2end=True、およびIdentity DFLレイヤーを報告しており、これはNMSフリーかつDFLフリーのヘッドのアーキテクチャ上の特徴です。
Parameter and FLOPs values are reported for the fused model (model.fuse()), which merges each Conv and its batch normalization layer. This matches the published specifications; a freshly loaded checkpoint reports slightly higher counts before fusing.
Link to this section結論#
バージョン間で、YOLOアーキテクチャは一度に1つのステージが変更されました。バックボーンはDarknet-53からCSPベースのC3、C2f、C3k2ブロック(C2PSAアテンション付き)へ移行し、ネックはFPN + PAN構造を維持しつつSPPがSPPFになり、ヘッドはアンカーベースからアンカーフリーへ、そしてYOLO26のNMS不要・DFL不要のエンドツーエンド設計へと移行しました。
カスタムアーキテクチャを定義するには、Model YAML Configuration Guideを参照するか、モデルページでモデルを比較してください。質問がある場合は、GitHubまたはDiscordまでお問い合わせください。
Link to this sectionよくある質問 (FAQ)#
Link to this sectionYOLOアーキテクチャの3つのステージとは何ですか?#
YOLOモデルには、ストライド8、16、32で画像から特徴を抽出するバックボーン、FPNとPANを使用してスケール間でそれらの特徴を融合するネック、そしてバウンディングボックスとクラススコアを予測するヘッドがあります。YOLOv3からYOLO26までのすべてのUltralytics YOLOモデルは、この3ステージ設計に従っています。
Link to this sectionC2fブロックとC3k2ブロックの違いは何ですか?#
C2f (YOLOv8) is a CSP block that concatenates the outputs of every internal Bottleneck — n + 2 feature maps — before its fusion convolution, where the older C3 passes only 2. C3k2 (YOLO11 and YOLO26) is a subclass of C2f that can replace each Bottleneck with a C3k block (a C3 variant with a configurable kernel size) when its c3k flag is set. Both are defined in block.py.
Link to this sectionYOLOv8とYOLO11の間でアーキテクチャの何が変わりましたか?#
YOLO11 makes three structural changes to YOLOv8: it replaces the C2f backbone and neck block with C3k2, inserts a C2PSA self-attention block after SPPF, and switches the head's classification branch to lighter depthwise-separable convolutions. Both keep the same anchor-free, decoupled Detect head with reg_max=16 DFL regression, so the changes lower parameter and FLOPs counts while raising accuracy rather than redesigning the detection interface.
Link to this sectionYOLOはアンカーフリーですか?#
最新のUltralytics YOLOモデルはアンカーフリーです。YOLOv8、YOLO11、およびYOLO26は、ボックス回帰と分類に別々のブランチを持つアンカーフリーのデカップル型Detectヘッドを使用しています。元のYOLOv3とYOLOv5はアンカーベースでしたが、UltralyticsはこれらをYOLOv3uおよびYOLOv5uバリエーションとして提供しており、その設定ではYOLOv8と同じアンカーフリーヘッドが使用されています。
Link to this sectionYOLO26はNMSを削除しましたか?#
はい。YOLO26はend2end=Trueを設定しており、これによりDetectはオブジェクトごとに1つの予測を行う1対1のヘッドを持ち、以前のモデルで必要とされていたNMS(非最大値抑制)の後処理ステップを削除します。詳細については、End-to-End Detectionガイドを参照してください。
Link to this sectionDFL(Distribution Focal Loss)とは何ですか?また、なぜYOLO26はそれを削除したのですか?#
DFLは、各ボックスの座標をreg_maxビン(YOLOv8およびYOLO11ではデフォルトで16)上のソフトマックス分布として回帰し、単一のスカラーを予測するのではなく、期待値を座標として取得します。YOLO26はreg_max=1に設定されているため、DFL層は恒等演算となり、ヘッドは直接座標を回帰します。そのため、エクスポートされたONNXまたはTensorRTグラフにはDFL演算は表示されません。
Link to this section特定のYOLOモデルのアーキテクチャを確認するにはどうすればよいですか?#
Pythonでモデルをロードし、model.info()を呼び出して、レイヤー、パラメータ、GFLOPsの概要を取得します。解析されたレイヤーはmodel.model.modelにあります。例えば、model.model.model[-1]はDetectヘッドであり、reg_maxやend2endのような属性を公開しています。完全なアーキテクチャは、モデルのYAML設定ファイルで定義されています。