logo
0
0
WeChat Login

计算机视觉前沿技术作业

本项目用于完成计算机视觉前沿技术课程作业,提供完整的 Python 开发环境和计算机视觉相关库。

📋 项目概览

本仓库包含两次课程的完整实现:

  • 作业一: 线性神经网络与二分类任务
  • 作业二: 多层感知机(MLP)与MNIST手写数字识别

技术栈

  • Python: 3.12
  • 包管理器: uv(高性能 Python 包管理器)
  • 深度学习框架: PyTorch 2.0+
  • 数值计算: NumPy
  • 数据处理: Pandas
  • 机器学习: scikit-learn
  • 可视化: Matplotlib
  • 交互式开发: Jupyter Notebook

📁 项目结构

/workspace ├── LinearNeuralNetwork/ # 作业一:线性神经网络 │ ├── train_numpy.py # NumPy 实现版本 │ ├── train_pytorch.py # PyTorch 实现版本 │ ├── visualization.py # 可视化工具 │ ├── binary_classification.txt # 二分类数据集 │ ├── loss_curve_*.png # 损失曲线图 │ ├── decision_boundary_*.png # 决策边界图 │ ├── 实验报告.pdf # 作业报告 │ └── 线性神经网络.pdf # 课程讲义 │ ├── MultilayerPerceptron/ # 作业二:多层感知机 │ ├── mlp_mnist_numpy.py # MLP MNIST分类完整版 │ ├── mlp_numpy.py # MLP MNIST分类基础版 │ ├── test_mnist.py # 测试脚本 │ ├── archive/ # MNIST 数据集 │ │ ├── train-images.idx3-ubyte │ │ ├── train-labels.idx1-ubyte │ │ ├── t10k-images.idx3-ubyte │ │ └── t10k-labels.idx1-ubyte │ ├── mlp_training_curves.png # 训练曲线 │ ├── mnist_samples.png # MNIST 样本示例 │ └── 多层感知机.pdf # 课程讲义 │ ├── file/ # 其他文档 │ └── 报告模板.pdf │ ├── Dockerfile # Docker 镜像构建文件 ├── settings.json # VS Code 配置 └── README.md # 项目说明文档(本文件)

🎯 作业一:线性神经网络

任务描述

实现线性分类器进行二分类任务,对比 NumPy 和 PyTorch 两种实现方式。

实现内容

1. NumPy 实现 (train_numpy.py)

  • 网络结构: 单层线性分类器 (2 → 2)
  • 激活函数: Softmax
  • 损失函数: 交叉熵损失
  • 优化器: SGD
  • 初始化: Xavier 初始化
  • 训练参数: epochs=10, lr=0.1

核心组件:

# 前向传播 probs = softmax(X @ W) # 损失计算 loss = cross_entropy_loss(probs, y) # 反向传播 gradients = compute_gradients(X, y, probs) # 参数更新 W -= lr * gradients

2. PyTorch 实现 (train_pytorch.py)

  • 网络结构: nn.Linear(2, 2)
  • 损失函数: nn.CrossEntropyLoss()
  • 优化器: optim.SGD()
  • 训练参数: epochs=200, lr=0.1
  • 训练至收敛,不限制 epoch 数

3. 可视化 (visualization.py)

  • 损失曲线绘制
  • 决策边界动态可视化
  • 对比不同实现的训练过程

运行方式

# NumPy 实现 cd LinearNeuralNetwork python train_numpy.py # PyTorch 实现 python train_pytorch.py

结果对比

  • NumPy 实现展示了完整的数学推导和梯度计算过程
  • PyTorch 实现验证了框架的自动化训练流程
  • 两种实现在相同数据上达到相当的分类效果

🎯 作业二:多层感知机(MLP)

任务描述

使用多层感知机(MLP)进行 MNIST 手写数字分类任务,实现深度学习基础架构。

实现内容

1. 数据处理 (MnistDataloader)

  • MNIST 数据集加载器
  • 支持 .idx 格式二进制文件读取
  • 按类别采样(每类30%)
  • 数据归一化 (0-255 → 0-1)

2. 网络结构 (MLP)

输入层: 784 (28×28 像素) ↓ 隐藏层: 256 (ReLU 激活) ↓ 输出层: 10 (Softmax)

网络参数:

  • 权重初始化: Xavier/Glorot 初始化
  • 偏置初始化: 零初始化
  • 激活函数: ReLU (隐藏层), Softmax (输出层)

3. 训练流程

  • 损失函数: 交叉熵损失
  • 优化器: SGD
  • 训练参数:
    • epochs: 20-30
    • learning_rate: 0.1
    • batch_size: 128
  • 数据增强: 随机打乱、小批量训练

4. 核心实现

前向传播:

# 输入层 → 隐藏层 z1 = X @ W1 + b1 a1 = relu(z1) # 隐藏层 → 输出层 z2 = a1 @ W2 + b2 probs = softmax(z2)

反向传播:

# 输出层梯度 dz2 = (probs - y_onehot) / n dW2 = a1.T @ dz2 db2 = np.sum(dz2, axis=0, keepdims=True) # 隐藏层梯度 da1 = dz2 @ W2.T dz1 = da1 * relu_derivative(z1) dW1 = X.T @ dz1 db1 = np.sum(dz1, axis=0, keepdims=True)

运行方式

# 完整版实现 cd MultilayerPerceptron python mlp_mnist_numpy.py # 基础版实现 python mlp_numpy.py # 测试脚本 python test_mnist.py

实验结果

  • 训练集准确率: ~98%+
  • 验证集准确率: ~97%+
  • 损失曲线平滑收敛
  • 成功识别手写数字 0-9

🔧 开发环境

容器镜像

  • 基础镜像: Ubuntu 24.04 LTS
  • Docker 镜像: docker.cnb.cool/orionseeker/frontiers-cv:latest

VS Code 扩展

  • Python 语言支持
  • Git 图形化历史查看
  • AI 辅助编程
  • YAML 语言支持
  • 缩进彩虹
  • CSV 文件高亮

🚀 快速开始

启动 Jupyter Notebook

jupyter notebook

Python 虚拟环境

虚拟环境位于 /opt/venv,Python 解释器路径:/opt/venv/bin/python


🔨 构建镜像

docker build -t docker.cnb.cool/orionseeker/frontiers-cv:latest .

📤 推送镜像

docker push docker.cnb.cool/orionseeker/frontiers-cv:latest

📚 学习要点

作业一核心概念

  • 线性分类器的数学原理
  • Softmax 函数与交叉熵损失
  • 梯度下降与反向传播
  • NumPy 与 PyTorch 的实现对比

作业二核心概念

  • 多层感知机架构
  • 激活函数的作用(ReLU、Softmax)
  • 小批量训练(Mini-batch SGD)
  • Xavier 初始化的重要性
  • 过拟合与验证集的使用

💡 注意事项

  • 预装库已就绪,无需额外安装
  • 使用 uv pip install 安装额外依赖(比 pip 快 10-100 倍)
  • Jupyter Notebook 支持直接在浏览器中运行代码
  • MNIST 数据集已包含在 archive/ 目录中
  • 所有实验结果图表已自动生成并保存

About

State-of-the-Art Computer Vision Technologies

Language
Python84.6%
Dockerfile15.4%