Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

C3, C2f, and C3k2 are composite feature-extraction blocks used mainly in the backbone and neck of Ultralytics YOLO models—not separate YOLO algorithms. In broad terms, C3 is the older CSP-style design associated with YOLOv5, C2f is the feature-reusing design used by YOLOv8, and C3k2 is a C2f-based block used in standard YOLO11 configurations. Most importantly, the 2 in C3k2 does not mean a 2×2 convolution.

First, where these blocks fit

A YOLO detector is easier to understand as three cooperating sections:

Backbone → Neck → Detection head
  • Backbone: extracts increasingly abstract features while reducing spatial resolution.
  • Neck: combines features from different resolutions so the detector can handle objects of different sizes.
  • Detection head: turns the fused features into class and bounding-box predictions.

C3, C2f, and C3k2 are principally used in the backbone and neck. They are not the final prediction head and do not, by themselves, define a complete YOLO model.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The names come from Ultralytics’ implementation. They are useful labels for specific module designs, but they are not a universal naming standard followed identically by every YOLO repository.

#1 Best Overall
BW21-CBV-Kit AI Vision Recognition Supports YOLOv7 Object Detection Model
  • 【Main Functions】BW21-CBV-Kit is a local AI vision recognition development board capable of independently running object recognition models
  • 【Camera Specifications】Equipped with a 1920 x 1080 resolution, 2MP, 30fps wide-angle camera, a condenser microphone, and support for 2TB memory card storage
  • 【Strong Communication Capabilities】Based on the RTL8735B chip, it supports dual-band 2.4GHz/5GHz WiFi and Bluetooth 5.1, providing high-performance wireless transmission capabilities for smoother image transmission
  • 【Development Method】Utilizes the Arduino development approach, allowing you to easily implement your ideas, such as face recognition, gesture recognition, object recognition, component defect detection, people counting, pet recognition, etc
  • 【Rich Interfaces】Two sets of 18-pin headers provide 30 programmable I/Os, facilitating project expansion. Combined with AI recognition, it unlocks limitless possibilities

What CSP means

All three names are related to Cross Stage Partial (CSP) design. At a practical level, a CSP-style block divides the incoming features into routes:

  1. One route is transformed by one or more bottleneck modules.
  2. Another route provides a shorter path for information and gradients.
  3. The routes—or several intermediate results from them—are concatenated.
  4. A final convolution fuses the combined features into the requested output width.

CSP should not be reduced to “split the channels exactly in half.” The hidden width depends on the implementation’s expansion ratio, input and output channels, model scale, and configuration. Current Ultralytics code commonly derives hidden channels using an expansion value such as e=0.5, but the actual dimensions must be read from the model configuration and installed source.

Ultralytics’ current block implementations are available in the official block source.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

C3: the YOLOv5-era CSP bottleneck

Ultralytics documents C3 as a “CSP Bottleneck with 3 convolutions.” The three principal convolutions in the wrapper are two branch projections and one output-fusion convolution.

input
 ├─ 1×1 Conv → bottleneck sequence ─┐
 └─ 1×1 Conv ───────────────────────┤ concatenate
                                    └─ 1×1 fusion Conv → output

Conceptually, the input is sent through two paths. The first path is processed by repeated bottlenecks. The second path bypasses that sequence. Once both paths have been projected to compatible widths, C3 concatenates them and applies a final convolution.

A simplified representation of the wrapper is:

self.cv1 = Conv(c1, c_, 1, 1)       # processed path
self.cv2 = Conv(c1, c_, 1, 1)       # bypass path
self.cv3 = Conv(2 * c_, c2, 1)       # fusion

The exact class may vary across releases, but this structure explains the name and the data flow. The 3 refers to the wrapper’s three main convolution layers. It does not mean that the whole module contains only three convolution operations: every repeated bottleneck adds more convolutions, and the configured repeat count matters.

C3 is associated primarily with the canonical Ultralytics YOLOv5 architecture. The historical YOLOv5 implementation can be inspected in its official source.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

C2f: keeping more intermediate features

C2f is documented by Ultralytics as a “Faster Implementation of CSP Bottleneck with 2 convolutions.” The central difference from C3 is not merely the number in the name. It is what the block preserves and sends to the final fusion layer.

A simplified C2f structure is:

input
      └─ 1×1 Conv → split into y0, y1
                         │
                         y1 → Bottleneck → y2
                                      │
                                      y2 → Bottleneck → y3
                                                   │
                                                   y3 → Bottleneck → y4

concatenate: y0, y1, y2, y3, y4
      └─ 1×1 fusion Conv → output

In the current implementation, the main projections are conceptually:

self.cv1 = Conv(c1, 2 * self.c, 1, 1)
self.cv2 = Conv((2 + n) * self.c, c2, 1)

Its forward path first creates two feature chunks, then applies the internal bottleneck sequence to the latest feature and appends each result:

y = list(self.cv1(x).chunk(2, 1))
y.extend(m(y[-1]) for m in self.m)
return self.cv2(torch.cat(y, 1))

With n internal bottlenecks, the fusion convolution receives n + 2 hidden feature tensors: the two initial chunks plus one output from each bottleneck.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Block What reaches the fusion layer
C3 The bypass branch and the final output of the processed branch
C2f The two initial chunks plus every intermediate bottleneck output

That denser feature reuse is the key conceptual distinction. The letter f means Ultralytics calls this a faster implementation; it should not be treated as a universal mathematical abbreviation used by every YOLO project.

Rank #2
Tapo 2K+ Indoor/Outdoor Wired Security Camera, Baby Monitoring, C121
  • COMPACT, VERSATILE, WEATHERPROOF: The Tapo C121 is a compact camera suitable for indoor and outdoor use, featuring an IP66 rating for withstanding rain, dust, and rugged conditions.
  • MAGNETIC BASE FOR FLEXIBLE MOUNTING: Easily attach the C121 camera to any metal surface with its magnetic base. Versatile mounting on railings, frames, or even the refrigerator.
  • 2K QHD 4MP RESOLUTION: Crystal-clear detail in every shot. Capture every moment with stunning 2K quality that ensures even the finest details are never missed. Connects via 2.4GHz Wi-Fi Band
  • StARLIGHT COLOR NIGHT VISION: The built-in Starlight sensor delivers bright, colorful video at night, with two spotlights for extra illumination in darker conditions.
  • INVISIBLE IR MODE: Get night vision up to 30ft with IR light. If the red light is distracting, switch to invisible mode for discreet monitoring.

C2f is the characteristic repeated block in the standard YOLOv8 configuration. The official YAML uses it in both backbone and head sections; see the YOLOv8 model configuration.

C3k and C3k2: the name is easy to misread

C3k is a C3-derived block whose internal bottlenecks accept a configurable kernel size. In the current source, it is defined as a subclass of C3:

class C3k(C3):

Its k parameter controls the kernel used by the internal bottlenecks. The default is 3, so the default internal convolution remains 3×3. The letter k is a kernel-size parameter, not a promise that every use of the class has the same kernel.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

C3k2 is different from simply “C3 with a 2×2 kernel.” In the current Ultralytics implementation, it is defined as a subclass of C2f:

class C3k2(C2f):

That means its outer structure follows the C2f pattern:

C3k2 = C2f-style split → repeated internal units → concatenate → fuse

Depending on its options, each internal unit can be a regular Bottleneck, a C3k block, or an attention-containing combination in implementations that enable that path. When the C3k option is enabled, the current constructor creates a C3k unit with an internal repeat count of 2.

So the safest practical reading is:

  • C3: the older three-convolution CSP wrapper.
  • C2f: a two-convolution CSP-style wrapper that retains every intermediate bottleneck output.
  • C3k2: a C2f-based wrapper that can use C3k internal units, with the current implementation passing an internal repeat count of two.

The 2 in C3k2 is not a 2×2 convolution kernel. The current Ultralytics source shows that kernel size and internal repetition are separate concepts.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

C3, C2f, and C3k2 side by side

Block Core pattern Main distinction Typical Ultralytics generation
C3 Two branches, then concatenation and fusion Three principal wrapper convolutions; the processed branch contributes its final output YOLOv5
C2f Split features, process sequentially, concatenate all retained outputs Dense reuse of intermediate bottleneck outputs YOLOv8
C3k2 C2f structure with selectable internal units Can use C3k units with configurable kernels and an internal repeat count of two in the current implementation YOLO11 and later configurations

Ultralytics’ architecture guide describes the broad progression as C3 in YOLOv5, C2f in YOLOv8, and C3k2 in YOLO11 and YOLO26. This describes standard Ultralytics configurations, not every repository or model carrying a YOLO label. See the official architecture guide.

Which YOLO versions use them?

  • YOLOv5: the canonical Ultralytics configuration primarily uses C3.
  • YOLOv8: the standard configuration repeatedly uses C2f in the backbone and neck.
  • YOLO11: the standard configuration uses C3k2 in corresponding repeated sections and also introduces other architectural components, including C2PSA after SPPF.
  • YOLO26: the current architecture guide lists C3k2 among its principal blocks.

“Uses” should be read carefully. Third-party forks may copy these names while changing expansion ratios, shortcut behavior, kernels, attention modules, constructor arguments, or parser logic. Even the same model name can differ between releases or tasks.

How to read a C3k2 line in a YOLO YAML file

Consider this representative YOLO11 line:

- [-1, 2, C3k2, [256, False, 0.25]]

Under the usual Ultralytics model YAML convention:

Field Meaning
-1 Use the output of the previous layer as input.
2 Repeat the module at the YAML/parser level, subject to depth scaling.
C3k2 The module class to instantiate.
256 The configured output-channel argument for this layer.
False The relevant constructor flag in this configuration; for C3k2, this position controls whether the C3k internal option is enabled.
0.25 An expansion-related argument in this model configuration.

There are two different kinds of repetition here:

  1. YAML repetition: the first 2 tells the parser how many outer C3k2 modules to place, before depth scaling.
  2. Internal repetition: when the C3k option is enabled, the current C3k2 implementation may construct a C3k replacement with its own internal n=2.

Those numbers are not automatically the same thing. Constructor signatures and parser behavior can change, so inspect the source belonging to the exact installed Ultralytics version before changing argument positions.

The standard YOLO11 YAML also defines model scale multipliers for variants such as n, s, m, l, and x. The parser applies depth and width scaling, meaning the final instantiated network may not have exactly the base repeat and channel counts shown in the file.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Should you replace C3, C2f, or C3k2?

Replacing one block is an architecture change, not a cosmetic rename. Treat it as an experiment that requires compatibility checks, retraining or fine-tuning, and validation.

Rank #3
Sale
Hidden Camera Detector,GPS Tracker Detector,Anti-Spy Camera Finder(Black)
  • AI-Powered Smart Signal Analysis – This camera detector, built in intelligent AI chip processes RF signals in real time, reducing background interference and false alarms for more reliable detection of hidden wireless cameras, audio bugs, and GPS trackers. The adjustable sensitivity dial lets you fine-tune scanning levels to match different environments – from busy hotels to quiet homes – so you get precise alerts without constant beeping.
  • 4-in-1 Detection with 5-Level Sensitivity – As a reliable hidden camera detectors, it scans for wireless cameras, hidden pinhole lenses, GPS trackers, and magnetic field devices, giving you complete coverage against various surveillance threats. The 5-level adjustable sensitivity lets you dial in the right detection range for any setting – turn it up for weak signals in large spaces, or lower it in crowded areas to reduce interference. Works great at home, in hotel rooms, and while traveling, so you always know your privacy is protected.
  • Easy Operation with 4 Modes – With a built-in GPS tracker detector, switch between wireless signal scanning, hidden camera finder, magnetic field detection, and flashlight – all in one compact device. Select between sound or vibration alerts for quiet, discreet scanning in any environment.
  • Long Battery Life & Portable Design – Built-in 800mAh rechargeable battery provides up to 25 hours of continuous use. Fully charges in just 1.5 hours via USB. Small enough to carry anywhere – weighs next to nothing, so you can take it on every trip.

Check compatibility first

  • Does the installed Ultralytics version expose the requested module?
  • Can the YAML parser resolve the class name?
  • Are the constructor arguments valid for that release?
  • Do concatenated tensors have compatible channel dimensions?
  • Will pretrained weights still match the modified graph?
  • Does the export target support every operation used by the replacement?

Do not assume a performance guarantee

C2f is described by Ultralytics as a faster implementation, but deployed latency depends on hardware, backend, batch size, input resolution, precision, and fusion. Likewise, C3k2 is not automatically faster or more accurate than C2f.

Larger kernels may broaden local context but can increase computation and activation memory. Attention-enabled variants may improve contextual modeling for some data but add complexity and may be a poor fit for a small edge device. The block name alone cannot determine accuracy, latency, memory use, or suitability.

Measure the complete model under the conditions that matter: the same task, image size, hardware, inference backend, precision, and validation split. Keep the original model as a baseline.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Inspect the model instead of guessing

For an Ultralytics model, the architecture guide demonstrates this basic inspection path:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.fuse()
model.info()

print(model.model.model)

You can also inspect the final module, while remembering that layer indexes and attributes differ between tasks and custom models:

head = model.model.model[-1]
print(type(head).__name__, "| reg_max:", head.reg_max, "| end2end:", head.end2end)

model.info() can help reveal the instantiated layer structure and summary. Do not treat one parameter count or GFLOPs figure as universal: results change with model scale, input resolution, task head, Ultralytics release, and whether the model is fused.

Common mistakes

“C3k2 means a 2×2 convolution”

No. In the current source, k is the configurable kernel-size parameter, while the 2 passed when constructing a C3k unit is an internal repeat count. The default C3k kernel is 3×3.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“C3 contains only three convolutions”

No. Three refers to the principal convolutions in the C3 wrapper. Repeated bottlenecks contain additional convolutions.

“The YAML repeat number is the number in the class name”

No. A YAML repeat count controls outer module replication and may be depth-scaled. Internal bottleneck or C3k repeats are separate.

“These blocks are the detection head”

No. They mainly extract and fuse features in the backbone and neck. The detection head is a separate component that produces predictions.

“Every YOLO repository defines them identically”

No. These are implementation names. Always inspect the source and YAML for the repository, release, and commit you are using.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The practical mnemonic

  • C3: split, process one path, bypass the other, concatenate, and fuse.
  • C2f: split, retain every intermediate bottleneck output, concatenate, and fuse.
  • C3k2: use the C2f outer structure with optional C3k internal units; the 2 is not a 2×2 kernel.

For choosing a standard model, select the complete YOLO generation and scale that fit your codebase, task, data, and deployment hardware—not a block name in isolation. For a custom model, verify the exact implementation, expect to retrain after structural changes, and judge the result with controlled benchmarks rather than nomenclature.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.