二分类与多分类图像分类

使用 PyTorch 进行图像深度学习

Michal Oleszak

Machine Learning Engineer

我们将用 PyTorch 学什么?

任务

使用 PyTorch 进行图像深度学习

我们将用 PyTorch 学什么?

任务

使用 PyTorch 进行图像深度学习

我们将用 PyTorch 学什么?

任务

使用 PyTorch 进行图像深度学习

我们将用 PyTorch 学什么?

任务

使用 PyTorch 进行图像深度学习

先修知识

使用 PyTorch 进行图像深度学习

PyTorch 库

torchvision

使用 PyTorch 进行图像深度学习

PyTorch 库

torchvision

使用 PyTorch 进行图像深度学习

PyTorch 库

torchvision

使用 PyTorch 进行图像深度学习

PyTorch 库

torchvision

使用 PyTorch 进行图像深度学习

图像分类

             二分类

binary

  • 两个类别(猫、狗)
  • 激活函数:Sigmoid

             多分类

multi-class

  • 多个类别(船、火车、汽车)
  • 激活函数:Softmax
  • 概率最高者为预测结果
使用 PyTorch 进行图像深度学习

卷积神经网络(CNN)模型

  卷积神经网络示意图

使用 PyTorch 进行图像深度学习

卷积神经网络(CNN)模型

  二分类示意图

使用 PyTorch 进行图像深度学习

卷积神经网络(CNN)模型

  二分类示意图

使用 PyTorch 进行图像深度学习

卷积神经网络(CNN)模型

  二分类示意图

使用 PyTorch 进行图像深度学习

卷积神经网络(CNN)模型

  二分类示意图

使用 PyTorch 进行图像深度学习

数据集:类别标签

图像文件夹

from torchvision import datasets
import torchvision.transforms as transforms


train_dir = '/data/train' train_dataset = ImageFolder(root=train_dir, transform=transforms.ToTensor())
classes = train_dataset.classes
print(classes)
['cat', 'dog']
print(train_dataset.class_to_idx)
{'cat': 0, 'dog': 1}
使用 PyTorch 进行图像深度学习

二分类图像:卷积层

  • Conv2d():
    • 输入:3 个 RGB 通道(红、绿、蓝)
    • 输出:16 个通道
    • 卷积核:3×3 矩阵
    • 步幅 = 1:卷积核每次移动 1 步
    • 填充 = 1:边缘各加 1 像素
  • ReLU():
    • 非线性激活函数
  • MaxPool2d():
    • 核大小:2×2
    • 步幅:2
class BinaryCNN(nn.Module):
    def __init__(self):
        super(BinaryCNN, self).__init__()

self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
self.relu = nn.ReLU()
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
def forward(self, x): return x
使用 PyTorch 进行图像深度学习

二分类图像:全连接层

  • Flatten():
    • 将张量展平为 1D 向量
  • Linear():
    • 输入:特征图 × 高 × 宽
    • 输出:单一类别
  • Sigmoid():
    • 取值范围:[0,1]
class BinaryCNN(nn.Module):
    def __init__(self):
        super(BinaryCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16,
                kernel_size=3, stride=1, padding=1)
        self.relu = nn.ReLU()
        self.pool = nn.MaxPool2d(kernel_size=2, 
                     stride=2)

self.flatten = nn.Flatten()
self.fc1 = nn.Linear(16 * 112 * 112, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.pool(self.relu(self.conv1(x))) x = self.fc1(self.flatten(x)) x = self.sigmoid(x)]
return x
使用 PyTorch 进行图像深度学习

CNN 的多分类图像分类

class MultiClassCNN(nn.Module):
    def __init__(self, num_classes):
        super(MultiClassCNN, self).__init__()
        ...

self.fc = nn.Linear(16 * 112 * 112, num_classes)
self.softmax = nn.Softmax(dim=1)
def forward(self, x): ...
x = self.softmax(x)
return x
使用 PyTorch 进行图像深度学习

Passons à la pratique !

使用 PyTorch 进行图像深度学习

Preparing Video For Download...