snn4ecoset
Collecting and testing SNNs for Ecoset
- [SEW ResNet] The code was adapted from the paper titled "Deep residual learning in spiking neural networks" published in NeurIPS, 2021 (pdf).
【基础镜像】dockerhub.pcl.ac.cn:5000/user-images/openi:spikingjelly
BDIP组织介绍
Brain & Deep-learning Interdisciplinary Platform (BDIP)组织管理并开放了一个“大规模类脑计算研究平台”,该平台依托openI启智社区进行建设,拥有丰富的神经数据、深度学习模型以及模型评测、可视化技术,帮助脑科学研究者运用深度学习技术,为人工智能研究者提供神经数据,推动脑科学与人工智能交叉研究,促进类脑智能研究。欢迎感兴趣的小伙伴前往访问使用,同时也非常欢迎加入我们成为贡献者!
测试样例说明
本仓库为snn4ecoset打榜任务提供样例,用户可在该仓库基础上创建个人仓库,完成打榜任务。为了解最新榜单,请参见网页Snn4Ecoset榜单。
如果您想要参与snn4ecoset打榜任务,请按照下述说明进行操作。
1、注册成为openI启智社区用户,加入组织Brain & Deep-learning Interdisciplinary Platform (BDIP),成为贡献者。
2、准备好预训练模型:模型基于SpikingJelly
,输入图片尺寸为224x224x3,输出为经由softmax
函数处理得到的一维概率向量 (565类)。
3、创建项目仓库,上传SNN相关代码和预训练模型。其中,预训练模型可以存储于项目仓库中,类似于本示例中的pretrained_model/sew_resnet18.pth
。此外,预训练模型也能够通过仓库模型
栏目上传,启动任务时可通过模型
选项进行选择,启动任务后存储于/pretrainmodel/xxx.pth
。在DEBUG
模式下建议选用第一种方式。通过仓库云脑
栏目启动云脑任务DEBUG
模式,搭建镜像,调试代码,使其可运行成功。请注意单次DEBUG任务最长可持续4小时。调试成功后需要在仓库云脑
栏目对应任务条目下停止任务
前选择提交镜像
,自行命名,以备后续使用(例如,当前仓库运行使用的镜像为dockerhub.pcl.ac.cn:5000/user-images/openi:spikingjelly
,可用做基础镜像)。此外,镜像中应安装requests, json, argparse, datetime, sys, os
等基础Python包。
-
启动DEBUG
任务时,数据集选择ecoset_val.zip
,用于调试模型。启动DEBUG
任务后,仓库代码可见于/code/
路径下,其中示例测试脚本为testSNN_script_user.py
,用户可在正式评测之前通过该示例脚本进行调试,以确保评测任务能正常运行。如果预训练模型通过模型
栏目上传,那么在任务启动时可通过模型
选项可选择预训练模型,如此启动任务后预训练模型存储于/pretrainmodel/xxx.pth
。
-
评测过程需要用户准备一个utils.py
文件,其中定义一个load_MyModel()
函数和一个eval_one_batch()
函数。该文件主要涵盖如下功能:模型初始化、导入预训练模型、导入模型推断过程所需的模块及函数、对单个batch做推断。预训练模型存储地址可由用户在utils.py
文件中自行指定:如果通过模型
栏目上传,则定义为/pretrainmodel/xxx.pth
;如果存放在代码仓库中,则根据具体情况自行定义,例如/code/pretrained_model/xxx.pth
。load_MyModel()
函数返回值为一个tuple
,其中第一个元素为可直接用于推断过程的模型,第二个元素为预训练模型存储地址,后续元素为推断过程(即forward过程
)所需的参数(请注意按顺序排列)。eval_one_batch()
函数负责接收模型(及参数)和输入,输出分类概率。详情请参见该仓库中的示例文件utils.py
。评测结果包括分类准确率ACC@1、ACC@5,以及测试耗时。
4、正式进行模型评测:启动云脑评测任务
,选择模型评测
,并填入相应信息。任务名称
填写模型名称,例如sew_resnet18
(同一仓库下不可存在重复的任务名称
,若要重复使用同一个任务名称
,需先行删除之前的任务记录);任务描述
填写模型简介;评测类型
选择snn4ecoset
;镜像
选择前述自行搭建的镜像;模型
选择预训练模型。填写信息完成之后,点击新建任务
即可开始模型评测任务。在openI云脑测试任务中,社区提供1个GPU (V100)和4个CPU的计算资源。当前测试脚本选用GPU作为torch.device
。任务结束后,评测脚本会将任务相关信息、模型相关信息、及测试结果写入后端数据库,并据此更新榜单页面。随后,用户可以通过云脑
栏目下对应任务条目的评测类型
按钮(即snn4ecoset
)查看最新的榜单页面。
5、下述两段代码分别展示了调试所需的shell脚本snn4ecoset_test.sh
,以及示例测试脚本testSNN_script_user.py
中接收模型及模型推断
对应的重要代码。注:本示例只针对sew_resnet18
模型,如需测试其他模型,需要对应地修改utils.py
文件(例如,如果选择测试sew_resnet152
模型,需将utils.py
文件中第22行修改为model = sew_resnet152(num_classes=565, cnf="ADD")
,具体模型定义可参见sewResnet/SEWResNet.py
)。
#!/bin/bash
# self debugging
/opt/conda/bin/python /code/testSNN_script_user.py --datapath '/dataset/' --modelpath '/code/pretrained_model/sew_resnet18.pth' --modelname 'sew_resnet18' --modeldescription 'A directedly trained snn model proposed in Fang et al. NeurIPS 2021 (Deep residual learning in spiking neural networks)'
sys.path.append("/code/")
import utils
model_pars = utils.load_MyModel()
model = model_pars[0]
abs_modelpath = model_pars[1]
if len(model_pars) > 2:
forward_pars = model_pars[2:]
...
...
if len(model_pars) == 2:
output = utils.eval_one_batch(model, data)
elif len(model_pars) > 2:
output = utils.eval_one_batch(model, data, *forward_pars)
图1:预训练模型上传。
图2:新建DEBUG任务。
图3:评分榜单。