Segment_SNN主要实现了一个利用VGG16和FPN作为backbone,采用encoder-decoder架构实现的语义分割网络。其中对VGG16和FPN网络实现了细粒度的脉冲神经元替换(卷积、线性、池化、批归一化)。 我们的实验主要分为两个阶段
- 首先是对VGG16网络进行SNN的转换,并将转换后的网络在nminst数据集上进行分类训练,来验证模型转换效果
- 第二阶段我们对FPN网络也进行了转换,并且将其与上一步转换过的VGG16网络进行拼接得到我们的语义分割模型Segment_SNN
文件内容:
- 数据文件夹结构
- datasets
- coco
- val2017
- coco
- datasets
- basic.py文件包含了所有的神经元以及基础模块的定义
- dataset.py文件定义了数据的预处理方式(包含快速眼动生成序列帧以及数据增强)
- fpn.py文件包含转换后的脉冲FPN网络
- vgg16.py文件定义了转换后的脉冲VGG16网路
- model.py定义了整合VGG和FPN网络的分割模型Segment_SNN
- train.py包含训练代码
- predict.py包含预测代码
- 使用coco数据训练
- 数据使用快速眼动法生成dvs帧(共9帧)作为模型输入,方法参考
Lin Y, Ding W, Qiang S, et al. Es-imagenet: A million event-stream classification dataset for spiking neural networks[J]. Frontiers in neuroscience, 2021, 15: 1546.
python train.py --batch_size 8 --step 8 --learning_rate 0.01 --num_epochs 100 -output_size (480, 480)
python predict.py --image_path './test/img' --step 8 --output_size (480, 480) --output_dir './test/out'
- 快速眼动法生成dvs数据集
- 每张图片通过移动差分生成8张差分序列(包括原数据共9帧),差分后的dvs数据包括正负两通道,在通道维拼接(6通道),输入到模型中。
- 对模型中的如下模块进行了替换
- Conv2D
$\rightarrow$ LayerWiseConvModule - Linear
$\rightarrow$ LayerWiseLinearModule - BatchNorm
$\rightarrow$ TEP
- Conv2D
- 对模型使用不同种类神经元类型进行了实验
- BiasLIFNode
$\rightarrow$ DoubleSidePLIFNode(通过将初始x与avgpool(x)统一维度后做差完成正负脉冲的实现)
- BiasLIFNode
- 我们在nminst数据集上训练17个epoch后的结果
![94d9608c9238ed6bfae8465e9da21d9](https://private-user-images.githubusercontent.com/84215971/292192053-99bc2e72-d151-4a2b-bdce-2b81c9982185.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzODEzMTMsIm5iZiI6MTczOTM4MTAxMywicGF0aCI6Ii84NDIxNTk3MS8yOTIxOTIwNTMtOTliYzJlNzItZDE1MS00YTJiLWJkY2UtMmI4MWM5OTgyMTg1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE3MjMzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRkZDMwY2Y0ZTEzOGZlZjg4OWUzYTE2NjgwMjk5ODFhZTlhZWFhOTBlZjdmY2RmMzhjYzFjNjM0MzAwYjdjNjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.oCa6UYwPr1LE48CUfMKFR8PiRfWykgNiZnYA9w5KmpM)
- 我们改进神经元模型之后的分类效果
![1703174288062](https://private-user-images.githubusercontent.com/101793579/292254821-58f14cb4-04a5-4944-a5a6-82c4acec3ea2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzODEzMTMsIm5iZiI6MTczOTM4MTAxMywicGF0aCI6Ii8xMDE3OTM1NzkvMjkyMjU0ODIxLTU4ZjE0Y2I0LTA0YTUtNDk0NC1hNWE2LTgyYzRhY2VjM2VhMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxNzIzMzNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jZWFlNzA4MDlhYTE2OTcyM2VkOWU4MTI0YmZhYTEzYjBiNzVjNmRhMDY2M2ZlOGM2NWU0NDcyNDMzMjE1Nzg2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.u15unX4c0HT7CGNunB3ZjL9P0ZKwOTGOSptB_yN6ntM)
由于计算资源有限,仅使用小样本数据集进行训练,数据集分布不均匀,因此模型收敛速度较慢,以下是相应的训练结果。
- 训练的Kaggle Notebook(包括FCN和SNN):https://www.kaggle.com/code/littleweakweak/test-pycocotools
后续在增大数据集规模后,可考虑进一步改进模型,以获得更好的训练效果。
- 韦亚辉:VGG分割模型向Snn模型转化 模型训练
- 徐一翀:数据预处理 基于快速眼动算法的dvs数据集转化 模型训练
- 王妍紫:基于神经元的Snn模型改进 模型训练
- 袁冶:数据预处理 基于快速眼动算法的dvs数据集转化
- 陈浩林:相关文献阅读 关键理论支撑与准备工作