Skip to content

WhXcjm/Manual-CNN

Repository files navigation

Manual-CNN

北航 信号与系统大作业 卷积神经网络实现

Intro

卷积神经网络作为深度学习在图像识别领域中的关键模型,其核心计算是卷积操作。本任务要求你在不使用主流深度学习框架(如 PyTorch、TensorFlow)的前提下,手动实现卷积运算和一个小型CNN模型,从底层理解卷积如何提取图像特征,进而完成图像分类任务。通过本任务,你将掌握卷积计算的机制、参数设置、特征图生成流程,以及CNN整体结构设计与训练。

注意:如果你用for循环嵌套去写的话速度会慢到你想死,可以看看对应库的向量化操作(毕竟numpy、torch这种库做出来就是为了加速运算的)

参考:https://zhuanlan.zhihu.com/p/23864713858

分工安排:

  • Code

    • B1. Conv2d @funjunhao

      • core code with vectorize @funjunhao

      • test with common kernels @raregas-48

      • validity test & benchmark @funjunhao

    • B2. LeNet-minst @Fay-777

      • core code @Fay-777

      • accuracy @Fay-777

      • LeNet kernel demostrate @Fay-777 @WhXcjm

    • A1. Conv1d @Fay-777

      • core code

      • accuracy

      • custom kernel

    • A2. Conv3d @WhXcjm

      • core code

      • accuracy

      • custom kernel

    • A3. Comparison & Benchmark @WhXcjm

      • conv1d @WhXcjm

      • conv3d @WhXcjm

    • A4. custom kernels(二维)卷积核自定义设计与可视化 @raregas-48

  • Slides

    • Basic 1 - conv2d

      • what is conv2d @funjunhao

      • padding & stride @funjunhao

      • vectorize @funjunhao @WhXcjm

      • benchmark @funjunhao

      • custom kernels @raregas-48

    • Basic 2 - lenet @raregas-48

      • lenet 架构

      • 训练 loss & acc

      • kernels & feature_maps & 对应影响

    • Conv1d @WhXcjm

    • Conv3d @WhXcjm

      • custom figure
    • benchmark for conv1d & conv3d @WhXcjm

  • Report

    • 各自完成 report,再整合检查 @WhXcjm

      • intro @Fay-777

      • conv2d core code @funjunhao

      • conv2d custom kernels @raregas-48

      • lenet & conv1d @Fay-777

      • conv3d & its custom kernels @WhXcjm

      • benchmark @WhXcjm @funjunhao

      • 分工表整理 @WhXcjm

    • 代码说明文档(Readme.md)每个一级文件夹下一个,各自负责,再整体整理 @WhXcjm

    • 大模型使用说明-各自提出 @All,再整合 @Fay-777

      1. 编辑(例如报告行文、代码优化)

      2. 理解技术细节

      3. 数据处理

      4. 可视化结果

      5. 为实验提供思路或运行实验

      6. 实现标准方法(例如让ai实现标准fft)

      7. 实现创新方法(例如让ai自己写一个新的神经网络架构)

    • requirement.txt @funjunhao @WhXcjm

Tasks

Basic

1. 二维卷积操作实现

  1. 手动实现支持如下功能的二维卷积运算

    1. 多通道输入输出(RGB或feature maps)

    2. 可配置的padding与stride

    3. 多组不同卷积核进行特征提取

  2. 通过卷积核设计与可视化,提取图像的边缘、纹理等基础特征

2. 构建并训练一个小型卷积神经网络

  1. 手动搭建一个简单的CNN模型(如LeNet),包括卷积层、池化层、非线性激活层、全连接层等
  2. 在MNIST数据集上训练并测试模型,要求在官方测试集上达到至少95%的准确率
  3. 训练完成后提取模型的卷积核,说明每个卷积核都提取了什么特征。并尝试回答:训练得出的卷积核和人工设计的卷积核有何共性和差异?

你必须手动实现所有层的前向传播,即:不允许使用torch.nn.Conv2d等官方层,只能使用NumPy 或 torch.Tensor 的基础操作自行实现。(反向传播可以用库函数)

进阶

  • 手动实现 Conv1d 与 Conv3d 卷积操作(要求支持参数配置),并验证其正确性
  • 对卷积实现进行性能测试与分析(如处理一张图像所需时间)
  • 与 PyTorch 官方的卷积操作进行对比分析,包括但不限于:
    • 计算结果是否一致
    • 在不同输入尺寸下的执行效率
  • 设计并测试自定义卷积核,观察其在特征提取上的表现
  • 其他有关卷积的理解。

其他要求:

  • 提交内容:答辩PPT、大作业报告,程序代码文件

  • 大作业报告要求:

    • 提交报告,说明任务问题、原理分析、算法设计与分析、运行结果与分析等
    • 报告中列表详细说明每个人的具体分工与工作量(以百分比形式给出)
  • 程序代码文件要求:

    • 提交算法程序源代码、直接可运行程序(windows/linux均可)及代码说明文档(Readme文件)
    • 请同时在项目根目录下放置requirement.txt 文件,用于记录所有依赖包和它的确切版本号
  • 提交要求:

    • 邮件与报告命名规则:信号与系统大作业-组号-组长姓名_题目号(压缩包)
  • 答辩说明:

    • 所有题目均需要现场答辩,时长为5min(答辩)+ 3min(提问)
  • 作业报告:

    • 6月1日(14周周六)前交至邮箱XXXXXXXXX,以收到回复为准;同时提交至希冀平台。

About

北航 信号与系统 手动卷积神经网络实现

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •