YOLO变种:RT-DETR、YOLO-NAS等

引言

随着YOLO系列的不断发展,各种基于YOLO的变种和衍生技术层出不穷。从RT-DETR[1]到YOLO-NAS[2],这些变种在保持YOLO核心优势的同时,针对特定问题进行了优化和改进。

YOLO变种的核心特点

  • 🔄 技术融合:结合不同技术优势
  • 性能优化:针对特定场景优化
  • 🎯 应用导向:面向具体应用需求
  • 🚀 创新突破:技术创新的探索

本系列学习路径

R-CNN系列 → YOLO v1 → YOLO v2/v3 → YOLO v4 → YOLO v5 → YOLO v8 → YOLO变种(本文)

📄 论文信息
作者 Qiang Chen, et al. (Microsoft Research)
发表 ICCV (2023)
arXiv 2304.08069

YOLO变种概述

变种分类

YOLO变种的主要分类

class YOLOVariants:
    def __init__(self):
        self.variants = {
            "Transformer变种": {
                "RT-DETR": "实时检测Transformer<cite>[1]</cite>",
                "YOLO-DETR": "YOLO与DETR结合",
                "YOLO-Transformer": "YOLO Transformer架构"
            },
            "NAS变种": {
                "YOLO-NAS": "神经架构搜索YOLO<cite>[2]</cite>",
                "AutoYOLO": "自动YOLO设计",
                "YOLO-Search": "YOLO架构搜索"
            },
            "轻量化变种": {
                "YOLO-Lite": "轻量化YOLO",
                "YOLO-Mobile": "移动端YOLO",
                "YOLO-Edge": "边缘计算YOLO"
            },
            "多任务变种": {
                "YOLO-Seg": "YOLO分割",
                "YOLO-Pose": "YOLO姿态估计",
                "YOLO-Track": "YOLO目标跟踪"
            }
        }
    
    def get_variant_info(self, variant_name):
        """获取变种信息"""
        for category, variants in self.variants.items():
            if variant_name in variants:
                return {
                    "category": category,
                    "description": variants[variant_name],
                    "features": self._get_variant_features(variant_name)
                }
        return None
    
    def _get_variant_features(self, variant_name):
        """获取变种特征"""
        features = {
            "RT-DETR": ["Transformer架构", "实时检测", "端到端训练"],
            "YOLO-NAS": ["神经架构搜索", "自动设计", "性能优化"],
            "YOLO-Lite": ["轻量化设计", "移动端优化", "低功耗"],
            "YOLO-Seg": ["实例分割", "语义分割", "多任务学习"]
        }
        return features.get(variant_name, [])

技术特点

YOLO变种的技术特点

技术融合:
- YOLO + Transformer = RT-DETR<cite>[1]</cite>
- YOLO + NAS = YOLO-NAS<cite>[2]</cite>
- YOLO + 轻量化 = YOLO-Lite
- YOLO + 多任务 = YOLO-Seg

YOLO变种分类总览

graph LR
    ROOT["YOLO Variants"] --> TRANS["Transformer-based<br/>RT-DETR · YOLO-DETR"]
    ROOT --> NAS_B["NAS-based<br/>YOLO-NAS · AutoYOLO"]
    ROOT --> LITE["Lightweight<br/>YOLO-Lite · YOLO-Mobile"]
    ROOT --> MULTI["Multi-task<br/>YOLO-Seg · YOLO-Pose<br/>YOLO-Track"]
    ROOT --> EFF["Enhanced<br/>YOLOX · YOLOv6<br/>YOLOv7 · PP-YOLO"]

RT-DETR:实时检测Transformer

核心思想

RT-DETR的设计理念[1]

YOLO优势 + Transformer优势 = RT-DETR
实时检测 + 全局建模 = 更好的性能

技术特点

  1. 实时检测:保持YOLO的实时性
  2. 全局建模:利用Transformer的全局建模能力
  3. 端到端训练:统一的训练流程
  4. 性能提升:精度和速度的双重提升

网络架构

RT-DETR的完整架构

import torch
import torch.nn as nn
import torch.nn.functional as F

class RTDETR(nn.Module):
    def __init__(self, num_classes=80, num_queries=300):
        super(RTDETR, self).__init__()
        
        self.num_classes = num_classes
        self.num_queries = num_queries
        
        # 特征提取网络
        self.backbone = ResNet50()
        
        # 特征融合网络
        self.neck = FPN()
        
        # Transformer编码器
        self.encoder = TransformerEncoder(
            d_model=256,
            nhead=8,
            num_layers=6
        )
        
        # Transformer解码器
        self.decoder = TransformerDecoder(
            d_model=256,
            nhead=8,
            num_layers=6
        )
        
        # 检测头
        self.head = RTDETRHead(num_classes, num_queries)
    
    def forward(self, x):
        # 特征提取
        features = self.backbone(x)
        
        # 特征融合
        fused_features = self.neck(features)
        
        # Transformer编码
        encoded_features = self.encoder(fused_features)
        
        # Transformer解码
        decoded_features = self.decoder(encoded_features)
        
        # 检测
        detections = self.head(decoded_features)
        
        return detections

class TransformerEncoder(nn.Module):
    def __init__(self, d_model, nhead, num_layers):
        super(TransformerEncoder, self).__init__()
        
        self.d_model = d_model
        self.nhead = nhead
        self.num_layers = num_layers
        
        # 位置编码
        self.pos_encoding = PositionalEncoding(d_model)
        
        # Transformer编码器层
        self.encoder_layers = nn.ModuleList([
            TransformerEncoderLayer(d_model, nhead)
            for _ in range(num_layers)
        ])
    
    def forward(self, x):
        # 位置编码
        x = self.pos_encoding(x)
        
        # Transformer编码
        for layer in self.encoder_layers:
            x = layer(x)
        
        return x

class TransformerDecoder(nn.Module):
    def __init__(self, d_model, nhead, num_layers):
        super(TransformerDecoder, self).__init__()
        
        self.d_model = d_model
        self.nhead = nhead
        self.num_layers = num_layers
        
        # 查询嵌入
        self.query_embed = nn.Embedding(300, d_model)
        
        # Transformer解码器层
        self.decoder_layers = nn.ModuleList([
            TransformerDecoderLayer(d_model, nhead)
            for _ in range(num_layers)
        ])
    
    def forward(self, x):
        # 查询嵌入
        queries = self.query_embed.weight.unsqueeze(0).expand(x.size(0), -1, -1)
        
        # Transformer解码
        for layer in self.decoder_layers:
            queries = layer(queries, x)
        
        return queries

class RTDETRHead(nn.Module):
    def __init__(self, num_classes, num_queries):
        super(RTDETRHead, self).__init__()
        
        self.num_classes = num_classes
        self.num_queries = num_queries
        
        # 分类头
        self.classifier = nn.Linear(256, num_classes)
        
        # 回归头
        self.regressor = nn.Linear(256, 4)
    
    def forward(self, x):
        # 分类预测
        cls_pred = self.classifier(x)
        
        # 回归预测
        bbox_pred = self.regressor(x)
        
        return {
            'cls_pred': cls_pred,
            'bbox_pred': bbox_pred
        }

性能分析

RT-DETR的性能特点

def analyze_rt_detr_performance():
    """
    分析RT-DETR的性能特点
    """
    performance = {
        "速度": {
            "推理时间": "0.025秒",
            "FPS": "40",
            "实时性": "优秀"
        },
        "精度": {
            "COCO mAP": "44.5%",
            "VOC mAP": "85.8%",
            "精度提升": "+1.3%"
        },
        "优势": {
            "全局建模": "Transformer的全局建模能力",
            "端到端训练": "统一的训练流程",
            "性能提升": "精度和速度的双重提升"
        },
        "局限": {
            "复杂度": "网络架构复杂",
            "训练难度": "训练难度增加",
            "资源需求": "计算资源需求高"
        }
    }
    
    return performance

YOLO-NAS:神经架构搜索

📄 YOLO-NAS
作者 Deci AI

性质:基于神经架构搜索(NAS)的 YOLO 检测器,通过 SuperGradients 库发布

核心思想

YOLO-NAS的设计理念[2]

YOLO优势 + NAS技术 = YOLO-NAS
实时检测 + 自动设计 = 最优架构

技术特点

  1. 神经架构搜索:自动设计最优架构
  2. 性能优化:针对特定硬件优化
  3. 自动化:减少人工设计工作
  4. 效率提升:更高效的架构设计

网络架构

YOLO-NAS的架构设计

class YOLONAS(nn.Module):
    def __init__(self, num_classes=80, search_space=None):
        super(YOLONAS, self).__init__()
        
        self.num_classes = num_classes
        self.search_space = search_space or self._default_search_space()
        
        # 搜索空间定义
        self.search_space = {
            "backbone": ["ResNet", "EfficientNet", "MobileNet"],
            "neck": ["FPN", "PANet", "BiFPN"],
            "head": ["YOLOHead", "RetinaHead", "FCOSHead"]
        }
        
        # 架构搜索
        self.architecture = self._search_architecture()
        
        # 构建网络
        self.backbone = self._build_backbone()
        self.neck = self._build_neck()
        self.head = self._build_head()
    
    def _default_search_space(self):
        """默认搜索空间"""
        return {
            "backbone": {
                "type": "ResNet",
                "layers": [3, 4, 6, 3],
                "channels": [64, 128, 256, 512]
            },
            "neck": {
                "type": "FPN",
                "channels": [256, 512, 1024]
            },
            "head": {
                "type": "YOLOHead",
                "num_anchors": 3
            }
        }
    
    def _search_architecture(self):
        """架构搜索"""
        # 使用强化学习搜索最优架构
        best_architecture = self._reinforcement_learning_search()
        return best_architecture
    
    def _reinforcement_learning_search(self):
        """强化学习架构搜索"""
        # 定义搜索策略
        search_strategy = {
            "algorithm": "PPO",
            "reward_function": "accuracy_efficiency_balance",
            "search_steps": 1000
        }
        
        # 执行搜索
        best_architecture = self._execute_search(search_strategy)
        return best_architecture
    
    def forward(self, x):
        # 特征提取
        features = self.backbone(x)
        
        # 特征融合
        fused_features = self.neck(features)
        
        # 检测
        detections = self.head(fused_features)
        
        return detections

class NASSearchEngine:
    def __init__(self, search_space, reward_function):
        self.search_space = search_space
        self.reward_function = reward_function
        self.search_history = []
    
    def search(self, num_iterations=1000):
        """执行架构搜索"""
        best_architecture = None
        best_reward = -float('inf')
        
        for iteration in range(num_iterations):
            # 生成候选架构
            candidate = self._generate_candidate()
            
            # 评估架构
            reward = self._evaluate_architecture(candidate)
            
            # 更新最佳架构
            if reward > best_reward:
                best_reward = reward
                best_architecture = candidate
            
            # 记录搜索历史
            self.search_history.append({
                'iteration': iteration,
                'architecture': candidate,
                'reward': reward
            })
        
        return best_architecture
    
    def _generate_candidate(self):
        """生成候选架构"""
        # 随机生成架构配置
        candidate = {
            'backbone': self._random_backbone(),
            'neck': self._random_neck(),
            'head': self._random_head()
        }
        return candidate
    
    def _evaluate_architecture(self, architecture):
        """评估架构性能"""
        # 构建网络
        model = self._build_model(architecture)
        
        # 训练模型
        performance = self._train_and_evaluate(model)
        
        # 计算奖励
        reward = self.reward_function(performance)
        
        return reward

性能分析

YOLO-NAS的性能特点

def analyze_yolo_nas_performance():
    """
    分析YOLO-NAS的性能特点
    """
    performance = {
        "速度": {
            "推理时间": "0.018秒",
            "FPS": "55",
            "实时性": "优秀"
        },
        "精度": {
            "COCO mAP": "45.8%",
            "VOC mAP": "86.5%",
            "精度提升": "+2.6%"
        },
        "优势": {
            "自动设计": "神经架构搜索自动设计",
            "性能优化": "针对特定硬件优化",
            "效率提升": "更高效的架构设计"
        },
        "局限": {
            "搜索成本": "架构搜索成本高",
            "复杂度": "搜索过程复杂",
            "资源需求": "计算资源需求高"
        }
    }
    
    return performance

轻量化变种

YOLO-Lite

YOLO-Lite的设计理念

class YOLOLite(nn.Module):
    def __init__(self, num_classes=80):
        super(YOLOLite, self).__init__()
        
        self.num_classes = num_classes
        
        # 轻量化特征提取网络
        self.backbone = MobileNetV3()
        
        # 轻量化特征融合网络
        self.neck = LiteFPN()
        
        # 轻量化检测头
        self.head = LiteHead(num_classes)
    
    def forward(self, x):
        # 特征提取
        features = self.backbone(x)
        
        # 特征融合
        fused_features = self.neck(features)
        
        # 检测
        detections = self.head(fused_features)
        
        return detections

class MobileNetV3(nn.Module):
    def __init__(self):
        super(MobileNetV3, self).__init__()
        
        # MobileNetV3架构
        self.features = nn.Sequential(
            # 第一个卷积块
            nn.Conv2d(3, 16, 3, stride=2, padding=1),
            nn.BatchNorm2d(16),
            nn.ReLU(inplace=True),
            
            # 深度可分离卷积块
            self._make_layer(16, 24, 2),
            self._make_layer(24, 40, 2),
            self._make_layer(40, 80, 3),
            self._make_layer(80, 112, 3),
            self._make_layer(112, 160, 1),
        )
    
    def _make_layer(self, in_channels, out_channels, num_blocks):
        """创建MobileNet层"""
        layers = []
        for i in range(num_blocks):
            stride = 2 if i == 0 else 1
            layers.append(DepthwiseSeparableConv(in_channels, out_channels, stride))
            in_channels = out_channels
        return nn.Sequential(*layers)

class DepthwiseSeparableConv(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1):
        super(DepthwiseSeparableConv, self).__init__()
        
        # 深度卷积
        self.depthwise = nn.Conv2d(
            in_channels, in_channels, 3, stride, 1, 
            groups=in_channels, bias=False
        )
        self.bn1 = nn.BatchNorm2d(in_channels)
        
        # 点卷积
        self.pointwise = nn.Conv2d(in_channels, out_channels, 1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)
        
        self.relu = nn.ReLU(inplace=True)
    
    def forward(self, x):
        x = self.depthwise(x)
        x = self.bn1(x)
        x = self.relu(x)
        
        x = self.pointwise(x)
        x = self.bn2(x)
        x = self.relu(x)
        
        return x

YOLO-Mobile

YOLO-Mobile的设计特点

class YOLOMobile(nn.Module):
    def __init__(self, num_classes=80):
        super(YOLOMobile, self).__init__()
        
        self.num_classes = num_classes
        
        # 移动端优化网络
        self.backbone = EfficientNetB0()
        self.neck = MobileFPN()
        self.head = MobileHead(num_classes)
    
    def forward(self, x):
        # 特征提取
        features = self.backbone(x)
        
        # 特征融合
        fused_features = self.neck(features)
        
        # 检测
        detections = self.head(fused_features)
        
        return detections

class EfficientNetB0(nn.Module):
    def __init__(self):
        super(EfficientNetB0, self).__init__()
        
        # EfficientNetB0架构
        self.features = nn.Sequential(
            # 第一个卷积块
            nn.Conv2d(3, 32, 3, stride=2, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(inplace=True),
            
            # MBConv块
            self._make_mbconv(32, 16, 1, 1),
            self._make_mbconv(16, 24, 2, 6),
            self._make_mbconv(24, 40, 2, 6),
            self._make_mbconv(40, 80, 2, 6),
            self._make_mbconv(80, 112, 1, 6),
            self._make_mbconv(112, 192, 2, 6),
            self._make_mbconv(192, 320, 1, 6),
        )
    
    def _make_mbconv(self, in_channels, out_channels, stride, expand_ratio):
        """创建MBConv块"""
        return MBConv(in_channels, out_channels, stride, expand_ratio)

class MBConv(nn.Module):
    def __init__(self, in_channels, out_channels, stride, expand_ratio):
        super(MBConv, self).__init__()
        
        self.expand_ratio = expand_ratio
        self.stride = stride
        
        # 扩展卷积
        if expand_ratio > 1:
            self.expand_conv = nn.Conv2d(in_channels, in_channels * expand_ratio, 1)
            self.expand_bn = nn.BatchNorm2d(in_channels * expand_ratio)
            self.expand_relu = nn.ReLU(inplace=True)
        
        # 深度卷积
        self.depthwise_conv = nn.Conv2d(
            in_channels * expand_ratio, in_channels * expand_ratio, 3,
            stride, 1, groups=in_channels * expand_ratio, bias=False
        )
        self.depthwise_bn = nn.BatchNorm2d(in_channels * expand_ratio)
        
        # 压缩卷积
        self.pointwise_conv = nn.Conv2d(in_channels * expand_ratio, out_channels, 1)
        self.pointwise_bn = nn.BatchNorm2d(out_channels)
        
        self.relu = nn.ReLU(inplace=True)
    
    def forward(self, x):
        # 扩展卷积
        if self.expand_ratio > 1:
            x = self.expand_conv(x)
            x = self.expand_bn(x)
            x = self.expand_relu(x)
        
        # 深度卷积
        x = self.depthwise_conv(x)
        x = self.depthwise_bn(x)
        x = self.relu(x)
        
        # 压缩卷积
        x = self.pointwise_conv(x)
        x = self.pointwise_bn(x)
        
        return x

多任务变种

YOLO-Seg

YOLO-Seg的设计理念

class YOLOSeg(nn.Module):
    def __init__(self, num_classes=80, num_seg_classes=21):
        super(YOLOSeg, self).__init__()
        
        self.num_classes = num_classes
        self.num_seg_classes = num_seg_classes
        
        # 共享特征提取网络
        self.backbone = CSPDarknet53()
        
        # 特征融合网络
        self.neck = PANet()
        
        # 检测头
        self.detection_head = YOLOHead(num_classes)
        
        # 分割头
        self.segmentation_head = SegmentationHead(num_seg_classes)
    
    def forward(self, x):
        # 特征提取
        features = self.backbone(x)
        
        # 特征融合
        fused_features = self.neck(features)
        
        # 检测
        detections = self.detection_head(fused_features)
        
        # 分割
        segmentations = self.segmentation_head(fused_features)
        
        return {
            'detections': detections,
            'segmentations': segmentations
        }

class SegmentationHead(nn.Module):
    def __init__(self, num_classes):
        super(SegmentationHead, self).__init__()
        
        self.num_classes = num_classes
        
        # 分割头网络
        self.conv1 = nn.Conv2d(256, 128, 3, padding=1)
        self.conv2 = nn.Conv2d(128, 64, 3, padding=1)
        self.conv3 = nn.Conv2d(64, num_classes, 1)
        
        self.upsample = nn.Upsample(scale_factor=4, mode='bilinear')
    
    def forward(self, x):
        # 分割预测
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = self.conv3(x)
        
        # 上采样到原图尺寸
        x = self.upsample(x)
        
        return x

YOLO-Pose

YOLO-Pose的设计特点

class YOLOPose(nn.Module):
    def __init__(self, num_classes=80, num_keypoints=17):
        super(YOLOPose, self).__init__()
        
        self.num_classes = num_classes
        self.num_keypoints = num_keypoints
        
        # 共享特征提取网络
        self.backbone = CSPDarknet53()
        
        # 特征融合网络
        self.neck = PANet()
        
        # 检测头
        self.detection_head = YOLOHead(num_classes)
        
        # 姿态估计头
        self.pose_head = PoseHead(num_keypoints)
    
    def forward(self, x):
        # 特征提取
        features = self.backbone(x)
        
        # 特征融合
        fused_features = self.neck(features)
        
        # 检测
        detections = self.detection_head(fused_features)
        
        # 姿态估计
        poses = self.pose_head(fused_features)
        
        return {
            'detections': detections,
            'poses': poses
        }

class PoseHead(nn.Module):
    def __init__(self, num_keypoints):
        super(PoseHead, self).__init__()
        
        self.num_keypoints = num_keypoints
        
        # 姿态估计头网络
        self.conv1 = nn.Conv2d(256, 128, 3, padding=1)
        self.conv2 = nn.Conv2d(128, 64, 3, padding=1)
        self.conv3 = nn.Conv2d(64, num_keypoints * 3, 1)  # x, y, visibility
    
    def forward(self, x):
        # 姿态预测
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = self.conv3(x)
        
        # 重塑输出
        batch_size = x.size(0)
        x = x.view(batch_size, self.num_keypoints, 3, x.size(2), x.size(3))
        
        return x

YOLO变种性能对比

性能对比表

变种 速度 精度 特点 应用场景
RT-DETR 40 FPS 44.5% mAP Transformer架构 高精度检测
YOLO-NAS 55 FPS 45.8% mAP 自动架构设计 性能优化
YOLO-Lite 60 FPS 42.1% mAP 轻量化设计 移动端应用
YOLO-Mobile 65 FPS 41.8% mAP 移动端优化 边缘计算
YOLO-Seg 35 FPS 43.2% mAP 多任务学习 实例分割
YOLO-Pose 30 FPS 42.5% mAP 姿态估计 人体姿态

技术特点分析

YOLO变种的技术特点

def analyze_yolo_variants():
    """
    分析YOLO变种的技术特点
    """
    variants_analysis = {
        "RT-DETR": {
            "技术融合": "YOLO + Transformer",
            "优势": "全局建模能力",
            "局限": "计算复杂度高",
            "应用": "高精度检测"
        },
        "YOLO-NAS": {
            "技术融合": "YOLO + NAS",
            "优势": "自动架构设计",
            "局限": "搜索成本高",
            "应用": "性能优化"
        },
        "YOLO-Lite": {
            "技术融合": "YOLO + 轻量化",
            "优势": "移动端优化",
            "局限": "精度相对较低",
            "应用": "移动端应用"
        },
        "YOLO-Seg": {
            "技术融合": "YOLO + 分割",
            "优势": "多任务学习",
            "局限": "计算复杂度高",
            "应用": "实例分割"
        }
    }
    
    return variants_analysis

YOLO变种的优势与局限

✅ 主要优势

技术融合

技术融合优势:
- 结合不同技术优势
- 针对特定问题优化
- 性能提升
- 应用范围扩大

应用导向

应用导向优势:
- 面向具体应用需求
- 针对特定场景优化
- 实用性强
- 商业价值高

创新突破

创新突破优势:
- 技术创新的探索
- 新方法的尝试
- 技术发展推动
- 学术价值高

❌ 主要局限

复杂度增加

复杂度问题:
- 网络架构复杂
- 训练难度增加
- 调参复杂
- 资源需求高

通用性降低

通用性问题:
- 针对特定场景
- 通用性降低
- 迁移成本高
- 维护困难

技术风险

技术风险:
- 新技术不成熟
- 稳定性问题
- 兼容性问题
- 长期支持困难

YOLO变种的历史意义

技术贡献

YOLO变种的技术贡献[3][4][6][7]

  1. 技术融合:结合不同技术优势
  2. 应用导向:面向具体应用需求
  3. 创新突破:技术创新的探索
  4. 生态丰富:YOLO生态的多样性

技术影响

YOLO变种的技术影响

后续发展:
YOLO变种 → 现代YOLO → 未来YOLO

技术演进:
- 技术融合 → 更深入的技术融合
- 应用导向 → 更广泛的应用
- 创新突破 → 更多的技术创新
- 生态丰富 → 更丰富的生态

应用价值

YOLO变种的应用价值

应用领域:
- 工业检测:自动化检测
- 自动驾驶:实时目标检测
- 视频分析:实时处理
- 移动应用:边缘计算

总结

YOLO变种的核心贡献

  1. 技术融合:结合不同技术优势
  2. 应用导向:面向具体应用需求
  3. 创新突破:技术创新的探索
  4. 生态丰富:YOLO生态的多样性

技术特点总结

YOLO变种特点:
- 技术融合:结合不同技术优势
- 应用导向:面向具体应用需求
- 创新突破:技术创新的探索
- 生态丰富:YOLO生态的多样性

为后续发展奠定基础

YOLO变种通过技术融合和应用导向,为YOLO系列的发展提供了新的方向和可能性,为后续YOLO系列的发展奠定了重要基础。


参考资料

  1. Chen, Q. et al. "RT-DETR: Real-Time Detection Transformer", ICCV 2023. arXiv:2304.08069
  2. Deci AI. YOLO-NAS by Deci. SuperGradients library, 2023. github.com/Deci-AI/super-gradients
  3. Jocher, G. et al. "ultralytics/yolov5", GitHub, 2020. GitHub
  4. Wang, C.-Y. et al. "YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors", CVPR 2023. arXiv:2207.02696
  5. Ultralytics. "YOLOv8", 2023. GitHub
  6. Ge, Z. et al. "YOLOX: Exceeding YOLO Series in 2021", arXiv 2021. arXiv:2107.08430
  7. Li, C. et al. "YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications", arXiv 2022. arXiv:2209.02976

代码实现

数据集

  • COCO - 大规模目标检测数据集
  • PASCAL VOC - 目标检测基准数据集

文章目录