# ADBench **Repository Path**: Crzzy/ADBench ## Basic Information - **Project Name**: ADBench - **Description**: ADBench是国际测试委员会(BenchCouncil)开放协作网络节点-广西师范大学计算机科学与信息工程学院基准测试实验室用于医学大数据科学装置的代码托管平台 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-19 - **Last Updated**: 2024-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Clinical AIBench #### Clinical AIBench 介绍 Clinical AIBench是*国际测试委员会(BenchCouncil)开放协作网络节点-广西师范大学计算机科学与信息工程学院基准测试实验室*用于**医学大数据科学装置**的代码托管平台(*持续更新中...*)。 #### 安装依赖 1. configparser==5.0.2 2. pandas==1.0.5 3. numpy==1.18.5 4. nibabel==3.2.1 5. flask==1.1.2 6. scikit-learn==0.23.1 #### 使用示例 ``` python from SCConfig import SCClient # 1.配置文件路径 # iniPath = 'C:\\Users\\Crzzy\\Desktop\\场景配置\\服务器测试\\3个场景的配置文件-服务器\\dataset.ini' iniPath = '/home/huangyunyou/crzzy/ini/dataset.ini' # 2.数据集保存路径 # dataSavePath = 'C:\\Users\\Crzzy\\Documents\\scconfig\\datasave' dataSavePath = '/home/huangyunyou/crzzy/downloadData' # 3.创建场景配置对象 client = SCClient() # 4.按照配置文件加载数据集(如果下载好了直接加载,没下载的先下载后加载返回) # proportion: 训练集 验证集 测试集的比例, 暂时默认数据 0.7为训练集,0.2为验证集,0.1为测试集 # constraint: 限制条件,[(6, 0, 2), (0, 0, 1)] 表示有两组限制,训练集、验证集、测试集对应编号0、1、2, # 第一组限制为:数据的第6行相同的数据不能同时出现在训练集和验证集,第二组限制为:数据的第0行相同的数据不能同时出现在训练集和验证集 X_train, y_train, X_verif, y_verif, X_test, y_test = client.loadData(iniPath, dataSavePath, proportion=[7, 2, 1], constraint=[]) print("训练集维度:") print(X_train.shape) print("验证集维度:") print(X_verif.shape) print("测试集维度:") print(X_test.shape) print("测试集:") print(X_test) history, model = NN(X_train.shape[1], y_train, X_train) print("Loss: \n ", history.epoch, history.history.get('loss')) print("accuracy: \n", history.epoch,history.history.get('accuracy')) result = model.predict(X_test) print("predict:") print(result) ``` #### 关于服务端返回体说明 ``` python """ { 客户端数组: "client":[ { "列名1": [客户端1列名1的列数据], "列名2": [客户端1列名2的列数据], }, ], "propertyName": [属性列名], "labelName": [标签列名], "imageCol": [图像列名称], "audioCol": [音频列名称], "videoCol": [视频列名称], } """ ``` #### 关于配置文件 对于本项目的使用,很大程度上依赖于配置文件的编写,任何返回的数据可通过配置文件中声明,本配置文件采用的语法参考ini格式,具体使用方法如下例子说明: ``` ini # 联邦学习版 [scenarion] # 使用时需要配置本地的数据存放路径(场景数据可能过大) # [必填] # 场景名称 name=GENE description=TEST version=v1.0 createdate=2020-10-16 contribution= cite1 = cite2 = @article{liang2020isolated, title={An isolated data island benchmark suite for federated learning}, author={Liang, Yuan and Guo, Yange and Gong, Yanxia and Luo, Chunjie and Zhan, Jianfeng and Huang, Yunyou}, journal={arXiv preprint arXiv:2008.07257}, year={2020}} ; ###### 数据集规范以及上传限制:###### ; 1.上传的附件必须是一个文件夹,命名为该数据集的名称,所有该数据集相关的文件必须在这个文件夹下 ; 2.文件夹根目录必须包含config.ini和dataset.ini两个配置文件,还有对应的数据文件,每个场景都必须包含其所对应的配置文件 ; 3.数据文件必须是csv格式,必须包含列名,分隔符为英文逗号“,”,该数据集可以包含多类数据, ; 当配置场景的时候,针对的是某一类数据,如果该类数据包含 ; 图片、音频或者视频,则在对应的列上填写对应文件所在这个数据集文件夹的相对目录。 ; 4. 除了图像、音频、视频文件之外,所有数据以表格形式提供。 ; 5. 表格的第一行为列名,不同表格之间相同的列名表示的意思必须一致,相同的意思 ; 的列必须用相同的列名。 ; 6. 列名中不能存在'@','.','&','|','=',','等等特殊符号 ; 7. 规定除数据字典文件外,所有的数据文件中的列的值都是数值类型。 ; [block1] # [必填] # 数据集对应的数据文件,多个文件使用','隔开, # 格式为:文件别名@文件路径(能在该运行环境找到该文件的相对路径或绝对路径) files= summary@./data/ADNIMERGE_without_bad_value.csv, image@./data/image_information.csv # 文件链接顺序,使用逗号分隔 joinorder=summary, image # 文件链接键的对应关系,顺序和join配置相同,files有n个数据文件就有n-1组链接,多组关系使用','隔开,同一组数据多个列使用'&'连接 # 格式为:别名1|列名1&别名2|列名1+别名1|列名1&别名2|列名1, 别名2|列名1&别名2|列名2... connection=summary|RID&image|RID+summary|VISCODE&image|Visit, # 选择的列, 不填默认全选,如果某张表存在选择的列,则这张表就显示这些列的数据,若不选择,则显示全部的列的数据 ; columns=gene|RID, columns = summary|RID , summary|VISCODE , summary|SITE , summary|DX , summary|PTGENDER , summary|PTEDUCAT , summary|PTETHCAT , summary|PTRACCAT , summary|PTMARRY , image|RID , image|Visit , image|Modality , image|Sequence # 选择的行, 不填默认全选,> < = != null(表示空值) rows = image|Modality = MRI , image|Sequence = 1, summary|DX != null # 指定label可以有多个列组成由逗号隔开,没有指定的话就没有label,注意:data里不能包含label指定的列 label= summary|DX # 划分数据的限制(未完成),在构建联邦学习的场景的时候限制同一个用户不能在同一个客户端以及一些不合理的现象 limit= # 划分的客户端数 partition_number=20 # [必填] # 数据划分的函数,共有三类: # scope() 按照行比例划分,若不指定比例则按照partition_number平均划分,划分前可以选择按某列排序 # class() 按照列名的种类划分,如果列过多会产生组合爆炸问题 # constraint() 按照限制条件划分 ;assignment=scope(sort_by=gene|SITE, order=desc) assignment=class(column=SITE) ;assignment=constraint() # 划分比例,比例数需要等于partition_number # 第i个比例表示分配给第i个客户端的数据分配比例 # 多组条件使用','隔开,条件的组数必须等于划分数,每组条件可以包含多个条件,组内条件使用'&'分隔 # 条件表达式为:数据别名|列名+比较符+值,比较符目前只支持'>' '<' '=' # 如果 ;conditions=image|Modality=MRI & image|Sequence=1 # 数据微调 # 表中符合cond条件的数据分配rate到part的客户端中 ; add=part@cond@rate, # 如果这个数据有图片,这里的值为图片目录所在的列名,没有图片数据可以不写或者留空 # 格式:数据别名|列名 image=image|SavePath # 如果这个数据有音频,这里的值为音频目录所在的音频,没有音频数据可以不写或者留空 # 格式:数据别名|列名 audio= # 如果这个数据有视频,这里的值为视频目录所在的视频,没有视频数据可以不写或者留空 # 格式:数据别名|列名 video= ``` #### API文档 1. ***client.loadData(self, iniPath, dataSavePath, proportion=[7, 2, 1], constraint=[])***:根据配置文件返回对应的训练集、验证集和测试集。***iniPath***是配置文件的路径,***dataSavePath***是保存数据的目录,***proportion***是训练集、验证集和测试集对应的比例,***constraint***是训练集、验证集和测试集之间的限制条件。 2. ***client._download(self, iniPath, dataSavePath)***:从服务器下载数据文件到本地磁盘。***iniPath***是配置文件的路径,***dataSavePath***是数据的保存目录。 3. ***client.__toMatrix(self, source, savePath)***:将下载好的数据文件进行预处理,比如删除和训练无关的列,图片文件转成特征向量等,最后所有属性拼接转化成特征矩阵和标签矩阵 ***(X,y)*** 返回。***source***是一个字典类型的数据,从服务器下载文件的时候返回,里面记录文件信息。***savePath***是保存数据的目录。 4. ***client.isFill(ftype, element, constraint, cur_train, cur_verif, cur_test)***:判断***element***是否能够填充到 ***ftype***的数据集中。 ***ftype***表示填充的数据类型( 0,1,2 分别表示训练集、验证集、测试集), ***element***是一行数据, ***cur_train***, ***cur_verif***, ***cur_test***分别表示当前的训练集、验证集、测试集。 5. ***tezhengtiqu(inputPath, image_tmp_save_path, image_save_path, pre_model='DenseNet201', pooling='avg', start=-1, end=-1)***:将配准好的图像使用预训练的模型提取特征,返回特征向量。***inputPath***是图像目录,***image_tmp_save_path***是图像缓存目录,***image_save_path***为图像保存目录,***pre_model***是预训练模型,***pooling***是池化方法,***start***和***end***是标识起止位置。 6. ***convert_3Dto2DtoRGB(image_path,image_tmp_save_path,image_save_path)***:将3D图像数据转成2D类型,***image_path***是要转图像的路径,***image_tmp_save_path***图片缓存路径,***image_save_path***是2D图像保存地址。 7. ***peizhun(inputPath="", outoutPath="", image_type='MRI', weighting="T1")***: 将维度大小不一的图片配准成维度一致的图像。***inputPath***是要配准的图像路劲,***outoutPath***是输出路径,***image_type***是图像类型,***weighting***是配准模板。 8. ***select_model(pre_model, pooling)***:选择训练模型。 9. ***labelToIndex(arr)***:返回数组***arr***对应类别序号,一种值对应一种序号。