https://github.com/abtinmy/clustered-fl-brainage

Official implementation of paper "Brain Age Estimation Using Structural MRI: A Clustered Federated Learning Approach"

https://github.com/abtinmy/clustered-fl-brainage

Science Score: 10.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: ieee.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (9.7%) to scientific vocabulary

Keywords

brain-age-prediction clustering federated-learning mri non-iid pytorch resnet
Last synced: 6 months ago · JSON representation

Repository

Official implementation of paper "Brain Age Estimation Using Structural MRI: A Clustered Federated Learning Approach"

Basic Info
  • Host: GitHub
  • Owner: Abtinmy
  • License: mit
  • Language: Python
  • Default Branch: main
  • Homepage:
  • Size: 14.6 KB
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Topics
brain-age-prediction clustering federated-learning mri non-iid pytorch resnet
Created almost 3 years ago · Last pushed over 2 years ago
Metadata Files
Readme License

README.md

Clustered-FL-BrainAGE

Official implementation of paper "Brain Age Estimation Using Structural MRI: A Clustered Federated Learning Approach", Accepted to IEEE COINS 2023 conference.

Abstract

Estimating brain age based on structural Magnetic Resonance Imaging (MRI) is one of the most challenging and prominent areas of research in recent medical imaging and neuroscience studies. The significance of brain age prediction in the early diagnosis of neurological disorders has fueled a resurgence of interest in this field. Various studies have addressed this issue using a spectrum of techniques, from traditional machine learning to deep neural networks. The majority of these techniques employ centralized paradigms, which do not adequately preserve privacy. To tackle this problem, a handful of studies have utilized a federated approach. In this study, we propose a novel hierarchical clustered federated learning approach that carefully captures and considers the similarities of the clients' predictions on a certain benchmark dataset. This method enhances performance in Non-Independent and Identically Distributed (Non-IID) environments while preserving privacy. We use a multi-site dataset that provides a broad variety of MRI scans, characterizing a proper Non-IID environment. Our method achieves a Mean Absolute Error (MAE) of 3.86, while the non-clustered FedAvg federated approach attains a 4.14 MAE on the test set.

Setup & Usage

  1. Clone the repository. git clone https://github.com/Abtinmy/Clustered-FL-BrainAGE.git
  2. Create a conda environment using the requirements.txt file. conda create --name <env> --file requirements.txt
  3. Run the sample experiment using the shell command in the script directory. Arguments and their descriptions are explained in arguments_parser.py. cd scripts/ sh sample.sh ## Citation @inproceedings{cheshmi2023brain, title={Brain Age Estimation Using Structural MRI: A Clustered Federated Learning Approach}, author={Cheshmi, Seyyed Saeid and Mahyar, Abtin and Soroush, Anita and Rezvani, Zahra and Farahani, Bahar}, booktitle={2023 IEEE International Conference on Omni-layer Intelligent Systems (COINS)}, pages={1--6}, year={2023}, organization={IEEE} }

Acknowledgement

This project is inspired by FLIS repository.

Owner

  • Name: Abtin Mahyar
  • Login: Abtinmy
  • Kind: user
  • Location: Tehran, Iran

B.Sc-Computer Science student at Shahid Beheshti University (SBU)

GitHub Events

Total
  • Watch event: 3
Last Year
  • Watch event: 3

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 2
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 2
  • Total pull request authors: 0
  • Average comments per issue: 0.5
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • z775357 (1)
  • Gengsheng-Li (1)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

requirements.txt pypi
  • absl-py =1.4.0=pyhd8ed1ab_0
  • aiohttp =3.8.1=py310h5764c6d_1
  • aiosignal =1.3.1=pyhd8ed1ab_0
  • asttokens =2.2.1=pyhd8ed1ab_0
  • async-timeout =4.0.2=py310h06a4308_0
  • attrs =22.2.0=pyh71513ae_0
  • backcall =0.2.0=pyh9f0ad1d_0
  • backports =1.0=pyhd8ed1ab_3
  • backports.functools_lru_cache =1.6.4=pyhd8ed1ab_0
  • blas =1.0=mkl
  • blinker =1.5=pyhd8ed1ab_0
  • brotlipy =0.7.0=py310h7f8727e_1002
  • bzip2 =1.0.8=h7b6447c_0
  • c-ares =1.18.1=h7f98852_0
  • ca-certificates =2022.12.7=ha878542_0
  • cachetools =5.3.0=pyhd8ed1ab_0
  • certifi =2022.12.7=pyhd8ed1ab_0
  • cffi =1.15.1=py310h5eee18b_3
  • charset-normalizer =2.0.4=pyhd3eb1b0_0
  • click =8.1.3=unix_pyhd8ed1ab_2
  • cryptography =39.0.1=py310h9ce1e76_0
  • cuda =11.7.1=0
  • cuda-cccl =11.7.91=0
  • cuda-command-line-tools =11.7.1=0
  • cuda-compiler =11.7.1=0
  • cuda-cudart =11.7.99=0
  • cuda-cudart-dev =11.7.99=0
  • cuda-cuobjdump =11.7.91=0
  • cuda-cupti =11.7.101=0
  • cuda-cuxxfilt =11.7.91=0
  • cuda-demo-suite =12.1.55=0
  • cuda-documentation =12.1.55=0
  • cuda-driver-dev =11.7.99=0
  • cuda-gdb =12.1.55=0
  • cuda-libraries =11.7.1=0
  • cuda-libraries-dev =11.7.1=0
  • cuda-memcheck =11.8.86=0
  • cuda-nsight =12.1.55=0
  • cuda-nsight-compute =12.1.0=0
  • cuda-nvcc =11.7.99=0
  • cuda-nvdisasm =12.1.55=0
  • cuda-nvml-dev =11.7.91=0
  • cuda-nvprof =12.1.55=0
  • cuda-nvprune =11.7.91=0
  • cuda-nvrtc =11.7.99=0
  • cuda-nvrtc-dev =11.7.99=0
  • cuda-nvtx =11.7.91=0
  • cuda-nvvp =12.1.55=0
  • cuda-runtime =11.7.1=0
  • cuda-sanitizer-api =12.1.55=0
  • cuda-toolkit =11.7.1=0
  • cuda-tools =11.7.1=0
  • cuda-visual-tools =11.7.1=0
  • debugpy =1.5.1=py310h295c915_0
  • decorator =5.1.1=pyhd8ed1ab_0
  • efficientnet-pytorch-3d =0.6.3=pypi_0
  • entrypoints =0.4=pyhd8ed1ab_0
  • executing =1.2.0=pyhd8ed1ab_0
  • ffmpeg =4.3=hf484d3e_0
  • filelock =3.10.0=pypi_0
  • flit-core =3.6.0=pyhd3eb1b0_0
  • freetype =2.12.1=h4a9f257_0
  • frozenlist =1.3.3=py310h5eee18b_0
  • gds-tools =1.6.0.25=0
  • giflib =5.2.1=h5eee18b_3
  • gmp =6.2.1=h295c915_3
  • gnutls =3.6.15=he1e5248_0
  • google-auth =2.16.2=pyh1a96a4e_0
  • google-auth-oauthlib =0.4.6=pyhd8ed1ab_0
  • grpcio =1.42.0=py310hce63b2e_0
  • huggingface-hub =0.13.2=pypi_0
  • idna =3.4=py310h06a4308_0
  • importlib-metadata =6.0.0=pyha770c72_0
  • intel-openmp =2021.4.0=h06a4308_3561
  • ipykernel =6.15.0=pyh210e3f2_0
  • ipython =8.11.0=pyh41d4057_0
  • ipywidgets =8.0.5=pypi_0
  • jedi =0.18.2=pyhd8ed1ab_0
  • joblib =1.2.0=pypi_0
  • jpeg =9e=h5eee18b_1
  • jupyter_client =7.3.4=pyhd8ed1ab_0
  • jupyter_core =4.12.0=py310hff52083_0
  • jupyterlab-widgets =3.0.6=pypi_0
  • lame =3.100=h7b6447c_0
  • lcms2 =2.12=h3be6417_0
  • ld_impl_linux-64 =2.38=h1181459_1
  • lerc =3.0=h295c915_0
  • libcublas =11.10.3.66=0
  • libcublas-dev =11.10.3.66=0
  • libcufft =10.7.2.124=h4fbf590_0
  • libcufft-dev =10.7.2.124=h98a8f43_0
  • libcufile =1.6.0.25=0
  • libcufile-dev =1.6.0.25=0
  • libcurand =10.3.2.56=0
  • libcurand-dev =10.3.2.56=0
  • libcusolver =11.4.0.1=0
  • libcusolver-dev =11.4.0.1=0
  • libcusparse =11.7.4.91=0
  • libcusparse-dev =11.7.4.91=0
  • libdeflate =1.17=h5eee18b_0
  • libffi =3.4.2=h6a678d5_6
  • libgcc-ng =11.2.0=h1234567_1
  • libgomp =11.2.0=h1234567_1
  • libiconv =1.16=h7f8727e_2
  • libidn2 =2.3.2=h7f8727e_0
  • libnpp =11.7.4.75=0
  • libnpp-dev =11.7.4.75=0
  • libnvjpeg =11.8.0.2=0
  • libnvjpeg-dev =11.8.0.2=0
  • libpng =1.6.39=h5eee18b_0
  • libprotobuf =3.20.3=he621ea3_0
  • libsodium =1.0.18=h36c2ea0_1
  • libstdcxx-ng =11.2.0=h1234567_1
  • libtasn1 =4.16.0=h27cfd23_0
  • libtiff =4.5.0=h6a678d5_2
  • libunistring =0.9.10=h27cfd23_0
  • libuuid =1.41.5=h5eee18b_0
  • libwebp =1.2.4=h11a3e52_1
  • libwebp-base =1.2.4=h5eee18b_1
  • lxml =4.9.2=pypi_0
  • lz4-c =1.9.4=h6a678d5_0
  • markdown =3.4.1=pyhd8ed1ab_0
  • matplotlib-inline =0.1.6=pyhd8ed1ab_0
  • mkl =2021.4.0=h06a4308_640
  • mkl-service =2.4.0=py310h7f8727e_0
  • mkl_fft =1.3.1=py310hd6ae3a3_0
  • mkl_random =1.2.2=py310h00e6091_0
  • multidict =6.0.2=py310h5eee18b_0
  • ncurses =6.4=h6a678d5_0
  • nest-asyncio =1.5.6=pyhd8ed1ab_0
  • nettle =3.7.3=hbbd107a_1
  • nibabel =5.0.1=pypi_0
  • nilearn =0.10.0=pypi_0
  • nsight-compute =2023.1.0.15=0
  • numpy =1.23.5=py310hd5efca6_0
  • numpy-base =1.23.5=py310h8e6c178_0
  • oauthlib =3.2.2=pyhd8ed1ab_0
  • openh264 =2.1.1=h4ff587b_0
  • openssl =1.1.1t=h7f8727e_0
  • packaging =23.0=pyhd8ed1ab_0
  • pandas =1.5.3=pypi_0
  • parso =0.8.3=pyhd8ed1ab_0
  • pexpect =4.8.0=pyh1a96a4e_2
  • pickleshare =0.7.5=py_1003
  • pillow =9.4.0=py310h6a678d5_0
  • pip =22.3.1=py310h06a4308_0
  • prompt-toolkit =3.0.38=pyha770c72_0
  • prompt_toolkit =3.0.38=hd8ed1ab_0
  • protobuf =3.20.3=py310h6a678d5_0
  • psutil =5.9.0=py310h5eee18b_0
  • ptyprocess =0.7.0=pyhd3deb0d_0
  • pure_eval =0.2.2=pyhd8ed1ab_0
  • pyasn1 =0.4.8=py_0
  • pyasn1-modules =0.2.7=py_0
  • pycparser =2.21=pyhd3eb1b0_0
  • pygments =2.14.0=pyhd8ed1ab_0
  • pyjwt =2.6.0=pyhd8ed1ab_0
  • pyopenssl =23.0.0=py310h06a4308_0
  • pysocks =1.7.1=py310h06a4308_0
  • python =3.10.9=h7a1cb2a_1
  • python-dateutil =2.8.2=pyhd8ed1ab_0
  • python_abi =3.10=2_cp310
  • pytorch =1.13.1=py3.10_cuda11.7_cudnn8.5.0_0
  • pytorch-cuda =11.7=h67b0de4_1
  • pytorch-mutex =1.0=cuda
  • pytz =2022.7.1=pypi_0
  • pyu2f =0.1.5=pyhd8ed1ab_0
  • pyyaml =6.0=pypi_0
  • pyzmq =23.2.0=py310h6a678d5_0
  • readline =8.2=h5eee18b_0
  • requests =2.28.1=py310h06a4308_0
  • requests-oauthlib =1.3.1=pyhd8ed1ab_0
  • rsa =4.9=pyhd8ed1ab_0
  • scikit-learn =1.2.1=pypi_0
  • scipy =1.10.1=pypi_0
  • setuptools =65.6.3=py310h06a4308_0
  • six =1.16.0=pyhd3eb1b0_1
  • sqlite =3.40.1=h5082296_0
  • stack_data =0.6.2=pyhd8ed1ab_0
  • tensorboard =2.10.0=py310h06a4308_0
  • tensorboard-data-server =0.6.1=py310h52d8a92_0
  • tensorboard-plugin-wit =1.8.1=pyhd8ed1ab_0
  • threadpoolctl =3.1.0=pypi_0
  • timm =0.6.12=pypi_0
  • tk =8.6.12=h1ccaba5_0
  • torchaudio =0.13.1=py310_cu117
  • torchvision =0.14.1=py310_cu117
  • tornado =6.1=py310h5764c6d_3
  • tqdm =4.65.0=pypi_0
  • traitlets =5.9.0=pyhd8ed1ab_0
  • typing_extensions =4.4.0=py310h06a4308_0
  • tzdata =2022g=h04d1e81_0
  • urllib3 =1.26.14=py310h06a4308_0
  • wcwidth =0.2.6=pyhd8ed1ab_0
  • werkzeug =2.1.2=pyhd8ed1ab_1
  • wheel =0.38.4=py310h06a4308_0
  • widgetsnbextension =4.0.6=pypi_0
  • xz =5.2.10=h5eee18b_1
  • yarl =1.7.2=py310h5764c6d_2
  • zeromq =4.3.4=h9c3ff4c_1
  • zipp =3.15.0=pyhd8ed1ab_0
  • zlib =1.2.13=h5eee18b_0
  • zstd =1.5.2=ha4553b6_0