北航 信号与系统大作业 卷积神经网络实现
卷积神经网络作为深度学习在图像识别领域中的关键模型,其核心计算是卷积操作。本任务要求你在不使用主流深度学习框架(如 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
-
编辑(例如报告行文、代码优化)
-
理解技术细节
-
数据处理
-
可视化结果
-
为实验提供思路或运行实验
-
实现标准方法(例如让ai实现标准fft)
-
实现创新方法(例如让ai自己写一个新的神经网络架构)
-
-
requirement.txt @funjunhao @WhXcjm
-
1. 二维卷积操作实现
-
手动实现支持如下功能的二维卷积运算
-
多通道输入输出(RGB或feature maps)
-
可配置的padding与stride
-
多组不同卷积核进行特征提取
-
-
通过卷积核设计与可视化,提取图像的边缘、纹理等基础特征
2. 构建并训练一个小型卷积神经网络
- 手动搭建一个简单的CNN模型(如LeNet),包括卷积层、池化层、非线性激活层、全连接层等
- 在MNIST数据集上训练并测试模型,要求在官方测试集上达到至少95%的准确率
- 训练完成后提取模型的卷积核,说明每个卷积核都提取了什么特征。并尝试回答:训练得出的卷积核和人工设计的卷积核有何共性和差异?
你必须手动实现所有层的前向传播,即:不允许使用torch.nn.Conv2d等官方层,只能使用NumPy 或 torch.Tensor 的基础操作自行实现。(反向传播可以用库函数)
- 手动实现 Conv1d 与 Conv3d 卷积操作(要求支持参数配置),并验证其正确性
- 对卷积实现进行性能测试与分析(如处理一张图像所需时间)
- 与 PyTorch 官方的卷积操作进行对比分析,包括但不限于:
- 计算结果是否一致
- 在不同输入尺寸下的执行效率
- 设计并测试自定义卷积核,观察其在特征提取上的表现
- 其他有关卷积的理解。
-
提交内容:答辩PPT、大作业报告,程序代码文件
-
大作业报告要求:
- 提交报告,说明任务问题、原理分析、算法设计与分析、运行结果与分析等
- 报告中列表详细说明每个人的具体分工与工作量(以百分比形式给出)
-
程序代码文件要求:
- 提交算法程序源代码、直接可运行程序(windows/linux均可)及代码说明文档(Readme文件)
- 请同时在项目根目录下放置requirement.txt 文件,用于记录所有依赖包和它的确切版本号
-
提交要求:
- 邮件与报告命名规则:信号与系统大作业-组号-组长姓名_题目号(压缩包)
-
答辩说明:
- 所有题目均需要现场答辩,时长为5min(答辩)+ 3min(提问)
-
作业报告:
- 6月1日(14周周六)前交至邮箱XXXXXXXXX,以收到回复为准;同时提交至希冀平台。