计算机视觉概述
计算机视觉(Computer Vision,CV)研究如何让计算机从图像和视频中获取高层次的理解。它是 AI 最活跃的应用领域之一,从自动驾驶到医疗影像都有广泛的应用。
图像分类
图像分类是 CV 中最基础的任务,目标是将输入图像分配到预定义的类别中。
经典网络架构
- LeNet(1998) — Yann LeCun 提出的第一个成功 CNN
- AlexNet(2012) — 在 ImageNet 上大幅超越传统方法
- VGGNet(2014) — 验证了网络深度的重要性
- ResNet(2015) — 残差连接使得训练超过 100 层成为可能
- EfficientNet(2019) — 通过复合缩放取得优越的效率
import torch
import torchvision.models as models
# 使用预训练的 ResNet
resnet = models.resnet50(pretrained=True)
resnet.eval()
from torchvision import transforms
from PIL import Image
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
img = Image.open("cat.jpg")
img_tensor = transform(img).unsqueeze(0)
with torch.no_grad():
output = resnet(img_tensor)
目标检测
目标检测不仅要识别图像中有哪些物体,还要确定它们的位置(用边界框表示)。
两阶段检测器
- R-CNN — 先提取候选区域,再分类
- Fast R-CNN — 共享特征计算,大幅提速
- Faster R-CNN — 引入区域建议网络,端到端训练
单阶段检测器
- YOLO(You Only Look Once) — 将检测视为回归问题,一次前向传播完成定位和分类
- SSD — 多尺度特征图上进行检测
YOLO 系列演进
YOLO 是单阶段检测器中最具影响力的系列:
- YOLOv1(2016) — 开创性工作,将检测统一为回归
- YOLOv3(2018) — 引入多尺度预测和 Darknet-53
- YOLOv5(2020) — PyTorch 实现,工业界广泛使用
- YOLOv8(2023) — Ultralytics 出品,支持检测、分割、姿态估计
# 使用 YOLOv8 进行目标检测
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # nano 版本,速度快
results = model("street.jpg")
for r in results:
for box in r.boxes:
cls = int(box.cls[0])
conf = float(box.conf[0])
x1, y1, x2, y2 = map(int, box.xyxy[0])
print(f"类别: {model.names[cls]}, 置信度: {conf:.2f}")
语义分割
语义分割将图像中的每个像素分类到某个语义类别,实现像素级的理解。
代表架构
- FCN(2015) — 全卷积网络,开创了端到端分割的思路
- U-Net(2015) — 编码器-解码器 + 跳跃连接,医学图像分割的标配
- DeepLab 系列 — 使用空洞卷积扩大感受野
- SegFormer(2021) — 将 Transformer 引入分割任务
# 使用 U-Net 风格的分割模型(简化示意)
class SimpleUNet(nn.Module):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1), nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1), nn.ReLU(),
)
self.decoder = nn.Sequential(
nn.ConvTranspose2d(64, 32, 2, stride=2),
nn.ReLU(),
nn.Conv2d(32, 1, 1) # 二分类分割
)
def forward(self, x):
x = self.encoder(x)
return self.decoder(x)
实例分割
实例分割比语义分割更进一步,不仅要对像素分类,还要区分同一个类别中的不同实例。Mask R-CNN 是代表性工作。
其他重要任务
- 目标跟踪 — 在视频流中持续追踪特定物体
- 姿态估计 — 识别人体关键点位置
- 图像生成 — GAN、扩散模型(Stable Diffusion、DALL-E)
- 3D 视觉 — 点云处理、三维重建
计算机视觉技术在工业和日常生活中的应用越来越广泛,从手机的人脸解锁到工厂的质检系统,CV 正在深刻改变我们的世界。