卷积神经网络基础
-
深度学习动机
- 全连接网络的问题:参数过多、计算量大、易过拟合。
- 解决方案:局部连接(卷积)、权值共享、分层特征提取。
-
卷积神经网络(CNN)基础
- 卷积层:局部感受野、多通道卷积、填充(Padding)、步长(Stride)。
- 池化层:降维(Max/Average Pooling),一般有有平均池化和最大值池化。
- 经典结构:卷积→池化→全连接→Softmax。
- 一般来说随着网络的深入,图像会变小而通道数增加。
-
经典网络
- LeNet-5:早期CNN,5层结构(2卷积+2池化+3全连接),用于手写数字识别。
- AlexNet:引入ReLU、Dropout、多GPU训练,ILSVRC 2012冠军。例如:
- VGG-16:深层网络(16层),小卷积核堆叠,结构规整。
- 残差网络(ResNet):通过跳跃连接解决梯度消失,支持极深网络(如ResNet-50/101)。例如:
class Residual(nn.Module): #@save def __init__(self, input_channels, num_channels, use_1x1conv=False, strides=1): super().__init__() self.conv1 = nn.Conv2d(input_channels, num_channels, kernel_size=3, padding=1, stride=strides) self.conv2 = nn.Conv2d(num_channels, num_channels, kernel_size=3, padding=1) if use_1x1conv: self.conv3 = nn.Conv2d(input_channels, num_channels, kernel_size=1, stride=strides) else: self.conv3 = None self.bn1 = nn.BatchNorm2d(num_channels) self.bn2 = nn.BatchNorm2d(num_channels) def forward(self, X): Y = F.relu(self.bn1(self.conv1(X))) Y = self.bn2(self.conv2(Y)) if self.conv3: X = self.conv3(X) Y += X return F.relu(Y)
残差块设计可以如上所示,为d2l中代码示例。
-
PyTorch基础
- 张量(Tensor)操作、计算图、模块化设计(如
nn.Sequential
)。
- 张量(Tensor)操作、计算图、模块化设计(如
深度学习视觉应用
-
常用数据集
- MNIST:手写数字数据集,包含60k训练和10k测试样本,28x28灰度图。
- Fashion-MNIST:替代MNIST的10类商品图像数据集,格式与MNIST一致。
- CIFAR-10:10类32x32彩色图像,50k训练和10k测试样本。
- PASCAL VOC:目标检测/分割经典数据集,20类(如人、车辆、动物等),标注格式为XML。
- MS COCO:复杂场景理解数据集,80类,33万+图像,支持检测、分割等任务。
- ImageNet:大规模图像分类数据集(1400万+图像,2.1万类),ILSVRC是其子集。
-
评价指标
- 精确率(Precision):TP/(TP+FP),衡量“挑得准”。
- 召回率(Recall):TP/(TP+FN),衡量“找得全”。
- P-R曲线:展示精确率与召回率的权衡关系。
- AP/mAP:平均精度(多类别取平均),用于目标检测任务评估。
-
目标检测与YOLO
- 介绍YOLO(You Only Look Once)的单阶段检测思想,对比R-CNN系列方法。
-
语义分割与全卷积网络(FCN)
- FCN通过卷积层实现像素级分类,DeepLab v3是改进版本。