graph LR
A[NumPy数组] -->|加速| B[PyTorch张量]
B -->|GPU加速| C[高速计算]
B -->|自动求导| D[反向传播]
C --> E[深度学习模型]
D --> E
style B fill:#667eea,color:#fff
style E fill:#764ba2,color:#fff
解决的痛点:
NumPy只能用CPU,处理大数据太慢
PyTorch的Tensor可以在GPU上运行,速度快几十倍
提供自动求导机制,无需手动计算梯度
import torch
# 创建张量
x = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# GPU加速
x = x.cuda() # 将张量移到GPU
# 自动求导
x = torch.tensor(2.0, requires_grad=True)
y = x**2
y.backward() # 自动计算梯度 dy/dx = 4
1.2 PyTorch三大核心特性
graph TD
A[PyTorch核心特性] --> B[张量计算 Tensor]
A --> C[自动求导 Autograd]
A --> D[动态计算图 Dynamic Graph]
B --> B1[类似NumPy]
B --> B2[支持GPU加速]
B --> B3[丰富的运算操作]
C --> C1[自动计算梯度]
C --> C2[反向传播]
C --> C3[无需手动求导]
D --> D1[运行时构建]
D --> D2[易于调试]
D --> D3[支持动态网络]
style A fill:#667eea,color:#fff
style B fill:#48bb78,color:#fff
style C fill:#ed8936,color:#fff
style D fill:#9f7aea,color:#fff
graph LR
A[原始图像] --> B[Layer 1 边缘检测]
B --> C[Layer 2 纹理特征]
C --> D[Layer 3 局部模式]
D --> E[Layer 4 物体部件]
E --> F[Layer 5 完整物体]
B -.-> B1[横线/竖线/斜线]
C -.-> C1[网格/圆点/条纹]
D -.-> D1[眼睛/鼻子/耳朵]
E -.-> E1[狗头/人脸]
F -.-> F1[完整识别]
style A fill:#e2e8f0
style B fill:#ffc107
style C fill:#ed8936
style D fill:#667eea,color:#fff
style E fill:#764ba2,color:#fff
style F fill:#48bb78,color:#fff
graph LR
A[输入图像] --> B[CNN骨干网络 特征提取]
B --> C[YOLO检测头 位置+类别]
C --> D[输出结果]
B -.-> B1[技术组件 提取特征]
C -.-> C1[解决方案 目标检测]
D --> D1[边界框坐标]
D --> D2[类别概率]
D --> D3[置信度分数]
style B fill:#667eea,color:#fff
style C fill:#48bb78,color:#fff
style D fill:#764ba2,color:#fff
关键区别:
CNN:技术组件,负责从图片提取特征(边缘、纹理、形状)
YOLO:完整解决方案,用CNN提取特征后,还要预测物体位置和类别
比喻:CNN是砖块,YOLO是用砖块盖起来的摩天大楼
5.2 目标检测算法分类
graph TD
A[目标检测算法] --> B[Two-Stage 两阶段]
A --> C[One-Stage 单阶段]
B --> B1[R-CNN]
B --> B2[Fast R-CNN]
B --> B3[Faster R-CNN]
C --> C1[YOLO系列]
C --> C2[SSD]
C --> C3[RetinaNet]
B -.-> B4[准确率高 速度慢]
C -.-> C4[速度快 实时检测]
B1 --> B5[1. 生成候选区域 2. 分类+回归]
C1 --> C5[直接预测 端到端]
style B fill:#ed8936,color:#fff
style C fill:#48bb78,color:#fff
style C1 fill:#667eea,color:#fff
特性
Two-Stage (R-CNN系列)
One-Stage (YOLO/SSD)
检测流程
1. 生成候选区域 2. 分类和定位
直接预测类别和位置
速度
较慢(5-10 FPS)
快速(45-155 FPS)
准确率
高
略低但实用
应用场景
精度要求高的场景
实时检测、视频流
5.3 YOLO-v1核心原理
# YOLO输出张量计算
S = 7 # 网格大小 7x7
B = 2 # 每个网格预测2个边界框
C = 20 # PASCAL VOC数据集有20个类别
# 每个边界框:(x, y, w, h, confidence) = 5个值
# 每个网格:B个边界框 + C个类别概率
output_size = S * S * (B * 5 + C)
# = 7 * 7 * (2 * 5 + 20) = 7 * 7 * 30 = 1470
print(f"YOLO-v1输出张量大小: {S}×{S}×{B*5+C} = {output_size}")
graph TD
A[开始] --> B[Step 1: 定义网络结构]
B --> C[Step 2: 初始化模型参数]
C --> D[Step 3: 训练循环]
D --> E[3.1 前向传播 Forward Pass]
E --> F[3.2 计算损失 Loss Calculation]
F --> G[3.3 反向传播 Backward Pass]
G --> H[3.4 更新权重 Optimizer Step]
H --> I{是否收敛?}
I -->|否| E
I -->|是| J[训练完成]
style B fill:#667eea,color:#fff
style E fill:#48bb78,color:#fff
style F fill:#ed8936,color:#fff
style G fill:#9f7aea,color:#fff
style H fill:#ffc107
import torch
import torch.nn as nn
import torch.optim as optim
# Step 1: 定义网络结构
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 50)
self.fc2 = nn.Linear(50, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# Step 2: 初始化模型
model = SimpleNet()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# Step 3: 训练循环
for epoch in range(100):
# 3.1 前向传播
outputs = model(inputs)
# 3.2 计算损失
loss = criterion(outputs, targets)
# 3.3 反向传播
optimizer.zero_grad() # 清空梯度
loss.backward() # 计算梯度
# 3.4 更新权重
optimizer.step()
graph LR
A[基础阶段] --> B[进阶阶段]
B --> C[实战阶段]
C --> D[工业应用]
A --> A1[Python编程]
A --> A2[NumPy基础]
A --> A3[线性代数]
B --> B1[PyTorch框架]
B --> B2[CNN原理]
B --> B3[目标检测算法]
C --> C1[YOLO实战]
C --> C2[数据标注]
C --> C3[模型训练]
D --> D1[硬件集成]
D --> D2[系统部署]
D --> D3[性能优化]
style A fill:#e2e8f0
style B fill:#667eea,color:#fff
style C fill:#48bb78,color:#fff
style D fill:#764ba2,color:#fff