Giter Club home page Giter Club logo

highres-cortex's Introduction

highres-cortex

This is a collection of software designed to process 3D images of the cerebral cortex at a sub-millimetre scale, for example high-resolution MRI. In particular, it implements Bok’s equivolumetric depth, which models the depth of cortical layers while compensating for local cortical curvature. If you use this work in an academic publication, please cite the relevant references (see also doc/references.bib):

  • Yann Leprince, Fabrice Poupon, Thierry Delzescaux, Dominique Hasboun, Cyril Poupon, and Denis Rivière. Combined Laplacian-equivolumic model for studying cortical lamination with ultra high field MRI (7 T). 2015 IEEE 12th International Symposium on Biomedical Imaging (ISBI), IEEE, Apr 2015, New York, United States. pp.580-583, DOI: 10.1109/ISBI.2015.7163940. https://hal-cea.archives-ouvertes.fr/cea-01119475
  • Yann Leprince, Clara Fischer, Jean-François Mangin, Benoît Larrat, Sébastien Mériaux, Cyril Poupon, Isabel Reillo, Victor Borrell, Ophélie Foubet, Roberto Toro, and Denis Rivière. Architectonics-informed partition of the cortex at sub-millimetre resolution. 20th Annual Meeting of the Organization for Human Brain Mapping (OHBM), Jun 2014, Hamburg, Germany. 5, pp.951, 2014, F1000Posters. https://hal-cea.archives-ouvertes.fr/cea-01074735

Installation

highres-cortex is released as part of the official BrainVISA containers since March 2021 (BrainVISA 5.0.0). Please refer to https://brainvisa.info/web/download.html for installation instructions.

Graphical user interface

highres-cortex is available as a minimalistic BrainVISA toolbox since BrainVISA 5.1 (January 2023). Simply launch brainvisa and refer to the in-program documentation of the toolbox.

Command-line usage

This package can be used on the command line, here is a short introduction. It is assumed that you are running the Singularity version on a Linux computer, it should work in the same way in the virtual machine (you just need to remove the bv prefix from all commands).

  1. Prepare your input data: the input that is common to to all processes is classif: a voxel-wise tissue classification image in signed 16-bit pixel type, with 0 for exterior voxels (CSF), 100 for cortical gray matter, and 200 for subcortical white matter.

  2. Run the process that you are interested in. The common interface to all processes is the Capsul command-line, which you can call with bv python -m capsul. Use bv python -m capsul --process-help <process_name> to get help for a specific process. Use bv python -m capsul <process_name> [parameter=value ...] to run a process.

    The most important processes are described below:

    • Equivolumetric depth according to Bok’s model can be computed with highres_cortex.capsul.isovolume. The only mandatory input is classif, the output is equivolumetric_depth. You can fine-tune the process with optional parameters, most importantly advection_step_size can be adapted to the spatial resolution and required accuracy. For example:

      bv python -m capsul highres_cortex.capsul.isovolume classif=classif.nii.gz advection_step_size=0.03 equivolumetric_depth=equivolumetric_depth.nii.gz
      
    • Cortical thickness, according to the Laplace model, can be calculated with two different methods:

      • The upwinding method is very fast, and already has sub-pixel accurracy: highres_cortex.capsul.thickness_upw. The only mandatory input is classif, the output is thickness_image.
      • The advection method is slower, but advection_step_size can be tuned for greater accuracy: highres_cortex.capsul.thickness_adv.
    • For parcellating the cortex into volumetric traverses, highres_cortex.capsul.traverses can be used. The only mandatory input is classif, the output is cortical_traverses. The goal_diameter parameter controls the target diameter of merged regions (in millimetres). The advection_step_size parameter is also relevant for this process.

If you have used highres-cortex before the Capsul interface was introduced (beginning of 2018), you may be using the old shell scripts. See examples/scripts/ for equivalent scripts that make use of the Capsul processes.

Contributing

This repository uses pre-commit to ensure that all committed code follows minimal quality standards. Please install it and configure it to run as a pre-commit hook in your local repository (note that this is done automatically by bv_maker):

# Install pre-commit in a virtual environment
python3 -m venv venv/
. venv/bin/activate
pip install pre-commit

pre-commit install  # install the pre-commit hook

Licence

The source code of this work is placed under the CeCILL licence (see LICENCE.CeCILL.txt). This library contains code that is under the GNU LGPL licence (see src/library/cortex_column_region_quality.tcc), as a result, compiled code must be redistributed under the GNU General Public Licence (see LICENCE.GPLv3.txt).

External code used in this repository

  • Code for numerical diagonalization of 3×3 matrices (src/library/cortex_column_region_quality.tcc) is Copyright 2006 Joachim Kopp, under the GNU LGPL v2.1 or later. Reference: Kopp, Joachim. ‘Efficient Numerical Diagonalization of Hermitian 3x3 Matrices’. International Journal of Modern Physics C 19, no. 03 (March 2008): 523–48. arXiv:physics/0610206.

highres-cortex's People

Contributors

denisri avatar domanova avatar nsouedet avatar ylep avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

highres-cortex's Issues

Nightly tests fail on the master branch in the casa-dev-5.3 image

https://brainvisa.info/builds/view/branch%20master/job/cea-master-5.3/1568/

================================================================================
----------------------------------------
$ /usr/bin/python /volatile/a-sac-ns-brainvisa/bbi_nightly/cea-master-5.3/src/development/casa-distro/master/bin/casa_distro run name=cea-master-5.3 env=BRAINVISA_TEST_RUN_DATA_DIR=/casa/host/tests/test,BRAINVISA_TEST_REF_DATA_DIR=/casa/host/tests/ref -- sh -c 'env PYTHONHASHSEED=0 /casa/host/build/bin/bv_env timeout -k 10 1800 sh -e /casa/host/build/share/highres-cortex-5.1/tests/test_all_scripts.sh'
----------------------------------------
FastMarching...
initializing speed map
work voxels: 57216, interface voxels: 2688
iter: 0, front size: 2688, point: (26, 24, 13), dist: 0
iter: 10000, front size: 3608, point: (33, 22, 45), dist: 0.686722
iter: 20000, front size: 4488, point: (22, 10, 34), dist: 1.32706
iter: 30000, front size: 5256, point: (46, 34, 16), dist: 1.86723
iter: 40000, front size: 6024, point: (19, 50, 25), dist: 2.34565
iter: 50000, front size: 6704, point: (28, 14, 49), dist: 2.73526
FastMarching...
initializing speed map
work voxels: 15648, interface voxels: 2664
iter: 0, front size: 2664, point: (26, 24, 13), dist: 0
iter: 10000, front size: 1584, point: (26, 18, 35), dist: 0.955051
FastMarching...
initializing speed map
work voxels: 57216, interface voxels: 7344
iter: 0, front size: 7344, point: (26, 23, 2), dist: 0
iter: 10000, front size: 6784, point: (23, 50, 42), dist: 0.210488
iter: 20000, front size: 6120, point: (6, 23, 20), dist: 0.564738
iter: 30000, front size: 5460, point: (41, 26, 48), dist: 0.964314
iter: 40000, front size: 4752, point: (41, 45, 22), dist: 1.42368
iter: 50000, front size: 3936, point: (12, 18, 32), dist: 1.96959
iter: 60000, front size: 3096, point: (11, 29, 32), dist: 2.62097
FastMarching...
initializing speed map
work voxels: 112216, interface voxels: 7344
iter: 0, front size: 7344, point: (26, 23, 2), dist: 0
iter: 10000, front size: 7998, point: (48, 46, 21), dist: 0.210488
iter: 20000, front size: 8498, point: (9, 43, 14), dist: 0.519615
iter: 30000, front size: 8088, point: (21, 43, 4), dist: 0.794969
iter: 40000, front size: 7640, point: (23, 48, 6), dist: 1.08042
iter: 50000, front size: 7045, point: (51, 50, 31), dist: 1.39851
iter: 60000, front size: 6593, point: (11, 10, 9), dist: 1.73448
iter: 70000, front size: 5824, point: (49, 9, 11), dist: 2.08656
iter: 80000, front size: 5184, point: (54, 31, 5), dist: 2.4623
iter: 90000, front size: 4464, point: (53, 50, 13), dist: 2.89599
iter: 100000, front size: 3432, point: (49, 55, 11), dist: 3.41045
iter: 110000, front size: 1992, point: (47, 1, 51), dist: 4.10503
ylLaplacian: reading classif...
solving Laplace equation using Successive Over-Relaxation
(requested absolute precision 5.0e-05)...

iteration 1, max residual = 3.1e-01
iteration 2, max residual = 2.9e-01
iteration 3, max residual = 2.6e-01
iteration 4, max residual = 1.9e-01
iteration 5, max residual = 1.4e-01
iteration 6, max residual = 1.2e-01
iteration 7, max residual = 8.5e-02
iteration 8, max residual = 6.4e-02
iteration 9, max residual = 4.7e-02
iteration 10, max residual = 2.9e-02
iteration 11, max residual = 2.4e-02
iteration 12, max residual = 1.9e-02
iteration 13, max residual = 1.4e-02
iteration 14, max residual = 1.1e-02
iteration 15, max residual = 7.1e-03
iteration 16, max residual = 6.8e-03
iteration 17, max residual = 4.9e-03
iteration 18, max residual = 3.7e-03
iteration 19, max residual = 2.1e-03
iteration 20, max residual = 1.1e-03
iteration 21, max residual = 9.1e-04
iteration 22, max residual = 4.6e-04
iteration 23, max residual = 4.3e-04
iteration 24, max residual = 2.5e-04
iteration 25, max residual = 1.6e-04
iteration 26, max residual = 1.0e-04
iteration 27, max residual = 7.8e-05
iteration 28, max residual = 5.5e-05
iteration 29, max residual = 4.7e-05
searching for remaining local extrema... 0 found.
ylLaplacian: writing output...
ylLaplacian: reading classif...
solving Laplace equation using Successive Over-Relaxation
(requested absolute precision 5.0e-05)...

iteration 1, max residual = 3.1e-01
iteration 2, max residual = 2.9e-01
iteration 3, max residual = 2.6e-01
iteration 4, max residual = 1.9e-01
iteration 5, max residual = 1.4e-01
iteration 6, max residual = 1.2e-01
iteration 7, max residual = 8.5e-02
iteration 8, max residual = 6.4e-02
iteration 9, max residual = 4.7e-02
iteration 10, max residual = 2.9e-02
iteration 11, max residual = 2.4e-02
iteration 12, max residual = 1.9e-02
iteration 13, max residual = 1.4e-02
iteration 14, max residual = 1.1e-02
iteration 15, max residual = 7.1e-03
iteration 16, max residual = 6.8e-03
iteration 17, max residual = 4.9e-03
iteration 18, max residual = 3.7e-03
iteration 19, max residual = 2.1e-03
iteration 20, max residual = 1.1e-03
iteration 21, max residual = 9.1e-04
iteration 22, max residual = 4.6e-04
iteration 23, max residual = 4.3e-04
iteration 24, max residual = 2.5e-04
iteration 25, max residual = 1.6e-04
iteration 26, max residual = 1.0e-04
iteration 27, max residual = 7.8e-05
iteration 28, max residual = 5.5e-05
iteration 29, max residual = 4.7e-05
searching for remaining local extrema... 0 found.
ylLaplacian: writing output...
ylAdvectEuclidean: reading field...
ylAdvectEuclidean: reading domain volume...

  3 / 58 slices processed. 0 voxels successfully advected, 0 aborted...
  3 / 58 slices processed. 0 voxels successfully advected, 0 aborted...
  3 / 58 slices processed. 2 voxels successfully advected, 0 aborted...
  4 / 58 slices processed. 1746 voxels successfully advected, 0 aborted...
  5 / 58 slices processed. 4255 voxels successfully advected, 0 aborted...
  6 / 58 slices processed. 8153 voxels successfully advected, 0 aborted...
  7 / 58 slices processed. 10960 voxels successfully advected, 0 aborted...
  8 / 58 slices processed. 13761 voxels successfully advected, 0 aborted...
  9 / 58 slices processed. 19047 voxels successfully advected, 0 aborted...
  10 / 58 slices processed. 24259 voxels successfully advected, 0 aborted...
  11 / 58 slices processed. 30048 voxels successfully advected, 0 aborted...
  12 / 58 slices processed. 35003 voxels successfully advected, 0 aborted...
  13 / 58 slices processed. 42329 voxels successfully advected, 0 aborted...
  14 / 58 slices processed. 42710 voxels successfully advected, 0 aborted...
  15 / 58 slices processed. 42793 voxels successfully advected, 0 aborted...
  16 / 58 slices processed. 42976 voxels successfully advected, 0 aborted...
  17 / 58 slices processed. 43087 voxels successfully advected, 0 aborted...
  18 / 58 slices processed. 43144 voxels successfully advected, 0 aborted...
  19 / 58 slices processed. 43153 voxels successfully advected, 0 aborted...
  20 / 58 slices processed. 43486 voxels successfully advected, 0 aborted...
  21 / 58 slices processed. 43636 voxels successfully advected, 0 aborted...
  22 / 58 slices processed. 44009 voxels successfully advected, 0 aborted...
  23 / 58 slices processed. 44125 voxels successfully advected, 0 aborted...
  24 / 58 slices processed. 44185 voxels successfully advected, 0 aborted...
  25 / 58 slices processed. 44194 voxels successfully advected, 0 aborted...
  26 / 58 slices processed. 44203 voxels successfully advected, 0 aborted...
  27 / 58 slices processed. 44208 voxels successfully advected, 0 aborted...
  28 / 58 slices processed. 44461 voxels successfully advected, 0 aborted...
  29 / 58 slices processed. 44470 voxels successfully advected, 0 aborted...
  30 / 58 slices processed. 44862 voxels successfully advected, 0 aborted...
  31 / 58 slices processed. 44971 voxels successfully advected, 0 aborted...
  32 / 58 slices processed. 45107 voxels successfully advected, 0 aborted...
  33 / 58 slices processed. 45189 voxels successfully advected, 0 aborted...
  34 / 58 slices processed. 45245 voxels successfully advected, 0 aborted...
  35 / 58 slices processed. 45427 voxels successfully advected, 0 aborted...
  36 / 58 slices processed. 45543 voxels successfully advected, 0 aborted...
  37 / 58 slices processed. 45568 voxels successfully advected, 0 aborted...
  38 / 58 slices processed. 46242 voxels successfully advected, 0 aborted...
  39 / 58 slices processed. 46275 voxels successfully advected, 0 aborted...
  40 / 58 slices processed. 46680 voxels successfully advected, 0 aborted...
  41 / 58 slices processed. 46866 voxels successfully advected, 0 aborted...
  42 / 58 slices processed. 46910 voxels successfully advected, 0 aborted...
  43 / 58 slices processed. 48220 voxels successfully advected, 0 aborted...
  44 / 58 slices processed. 48666 voxels successfully advected, 0 aborted...
  45 / 58 slices processed. 49581 voxels successfully advected, 0 aborted...
  46 / 58 slices processed. 50245 voxels successfully advected, 0 aborted...
  47 / 58 slices processed. 51404 voxels successfully advected, 0 aborted...
  48 / 58 slices processed. 51732 voxels successfully advected, 0 aborted...
  49 / 58 slices processed. 52742 voxels successfully advected, 0 aborted...
  50 / 58 slices processed. 53528 voxels successfully advected, 0 aborted...
  51 / 58 slices processed. 54443 voxels successfully advected, 0 aborted...
  52 / 58 slices processed. 54832 voxels successfully advected, 0 aborted...
  53 / 58 slices processed. 55364 voxels successfully advected, 0 aborted...
  54 / 58 slices processed. 55499 voxels successfully advected, 0 aborted...
  55 / 58 slices processed. 56209 voxels successfully advected, 0 aborted...
  56 / 58 slices processed. 56428 voxels successfully advected, 0 aborted...
  57 / 58 slices processed. 56964 voxels successfully advected, 0 aborted...
  58 / 58 slices processed. 57216 voxels successfully advected, 0 aborted...
yl::advect: 57216 voxels successfully advected, 0 aborted.
ylAdvectEuclidean: reading field...
ylAdvectEuclidean: reading domain volume...

  3 / 58 slices processed. 86 voxels successfully advected, 0 aborted...
  3 / 58 slices processed. 86 voxels successfully advected, 0 aborted...
  3 / 58 slices processed. 122 voxels successfully advected, 0 aborted...
  4 / 58 slices processed. 4232 voxels successfully advected, 0 aborted...
  5 / 58 slices processed. 12795 voxels successfully advected, 0 aborted...
  6 / 58 slices processed. 21305 voxels successfully advected, 0 aborted...
  7 / 58 slices processed. 27051 voxels successfully advected, 0 aborted...
  8 / 58 slices processed. 30886 voxels successfully advected, 0 aborted...
  9 / 58 slices processed. 34603 voxels successfully advected, 0 aborted...
  10 / 58 slices processed. 38095 voxels successfully advected, 0 aborted...
  11 / 58 slices processed. 38320 voxels successfully advected, 0 aborted...
  12 / 58 slices processed. 38353 voxels successfully advected, 0 aborted...
  13 / 58 slices processed. 38393 voxels successfully advected, 0 aborted...
  14 / 58 slices processed. 38464 voxels successfully advected, 0 aborted...
  15 / 58 slices processed. 38523 voxels successfully advected, 0 aborted...
  16 / 58 slices processed. 38758 voxels successfully advected, 0 aborted...
  17 / 58 slices processed. 38816 voxels successfully advected, 0 aborted...
  18 / 58 slices processed. 38983 voxels successfully advected, 0 aborted...
  19 / 58 slices processed. 39158 voxels successfully advected, 0 aborted...
  20 / 58 slices processed. 39232 voxels successfully advected, 0 aborted...
  21 / 58 slices processed. 39732 voxels successfully advected, 0 aborted...
  22 / 58 slices processed. 39777 voxels successfully advected, 0 aborted...
  23 / 58 slices processed. 39914 voxels successfully advected, 0 aborted...
  24 / 58 slices processed. 39984 voxels successfully advected, 0 aborted...
  25 / 58 slices processed. 39988 voxels successfully advected, 0 aborted...
  26 / 58 slices processed. 39989 voxels successfully advected, 0 aborted...
  27 / 58 slices processed. 39992 voxels successfully advected, 0 aborted...
  28 / 58 slices processed. 40166 voxels successfully advected, 0 aborted...
  29 / 58 slices processed. 40305 voxels successfully advected, 0 aborted...
  30 / 58 slices processed. 40476 voxels successfully advected, 0 aborted...
  31 / 58 slices processed. 40725 voxels successfully advected, 0 aborted...
  32 / 58 slices processed. 40753 voxels successfully advected, 0 aborted...
  33 / 58 slices processed. 40838 voxels successfully advected, 0 aborted...
  34 / 58 slices processed. 40995 voxels successfully advected, 0 aborted...
  35 / 58 slices processed. 42110 voxels successfully advected, 0 aborted...
  36 / 58 slices processed. 42127 voxels successfully advected, 0 aborted...
  37 / 58 slices processed. 42185 voxels successfully advected, 0 aborted...
  38 / 58 slices processed. 42337 voxels successfully advected, 0 aborted...
  39 / 58 slices processed. 42674 voxels successfully advected, 0 aborted...
  40 / 58 slices processed. 44467 voxels successfully advected, 0 aborted...
  41 / 58 slices processed. 46070 voxels successfully advected, 0 aborted...
  42 / 58 slices processed. 46656 voxels successfully advected, 0 aborted...
  43 / 58 slices processed. 49835 voxels successfully advected, 0 aborted...
  44 / 58 slices processed. 52497 voxels successfully advected, 0 aborted...
  45 / 58 slices processed. 53104 voxels successfully advected, 0 aborted...
  46 / 58 slices processed. 54255 voxels successfully advected, 0 aborted...
  47 / 58 slices processed. 55085 voxels successfully advected, 0 aborted...
  48 / 58 slices processed. 55422 voxels successfully advected, 0 aborted...
  49 / 58 slices processed. 55500 voxels successfully advected, 0 aborted...
  50 / 58 slices processed. 55969 voxels successfully advected, 0 aborted...
  51 / 58 slices processed. 56354 voxels successfully advected, 0 aborted...
  52 / 58 slices processed. 56515 voxels successfully advected, 0 aborted...
  53 / 58 slices processed. 56673 voxels successfully advected, 0 aborted...
  54 / 58 slices processed. 56695 voxels successfully advected, 0 aborted...
  55 / 58 slices processed. 56705 voxels successfully advected, 0 aborted...
  56 / 58 slices processed. 57163 voxels successfully advected, 0 aborted...
  57 / 58 slices processed. 57198 voxels successfully advected, 0 aborted...
  58 / 58 slices processed. 57216 voxels successfully advected, 0 aborted...
yl::advect: 57216 voxels successfully advected, 0 aborted.
output type: Volume_FLOAT
output type: Volume_FLOAT
corrupted double-linked list
Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/casa/host/src/capsul/master/capsul/__main__.py", line 8, in <module>
    runprocess.main()
  File "/casa/host/src/capsul/master/capsul/process/runprocess.py", line 496, in main
    res = run_process_with_distribution(
  File "/casa/host/src/capsul/master/capsul/process/runprocess.py", line 242, in run_process_with_distribution
    res = study_config.run(process)
  File "/casa/host/src/capsul/master/capsul/study_config/study_config.py", line 415, in run
    result, log_file = run_process(
  File "/casa/host/src/capsul/master/capsul/study_config/run.py", line 165, in run_process
    returncode = process_instance._run_process()
  File "/casa/host/src/capsul/master/capsul/process/process.py", line 349, in _run_process
    soma.subprocess.check_call(commandline)
  File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['bv_env', 'cartoLinearComb.py', '-f', 'I1 / I2', '-i', '/tmp/tmp1z8793p8capsul.nii.gz', '-i', 'total-length.nii.gz', '-o', 'pial-fraction.nii.gz']' died with <Signals.SIGABRT: 6>.

================================================================================
FAILED with exit code 1
================================================================================

Tests fail with ERROR: NaN in result / RMS error is too high

Tests fail on the master branch:

FAILED (failures=6)
euclidean_adv_toward_white.nii.gz: RMS error = 0.093 mm, bias = -0.093 mm (ignoring 9624 NaNs) <== ERROR: NaN in result
equivolumetric_depth.nii.gz: RMS error = 28.7%, bias = -1.0% <== ERROR: RMS error > 0.028
curvature.nii.gz: RMS error = 0.038 mm^{-1}, bias = 0.005 mm^{-1} (RMS error <= 0.067)
laplacian.nii.gz: RMS error = 17.2%, bias = 9.0% <== ERROR: RMS error > 0.017
thickness_adv.nii.gz: RMS error = 0.118 mm, bias = -0.090 mm (RMS error <= 0.12)
equidistant_depth_adv.nii.gz: RMS error = 27.5%, bias = 8.3% <== ERROR: RMS error > 0.017
thickness_upw.nii.gz: RMS error = 0.261 mm, bias = 0.250 mm (RMS error <= 0.27)
equidistant_depth_upw.nii.gz: RMS error = 28.4%, bias = 8.2% <== ERROR: RMS error > 0.024
euclidean_upw_toward_white.nii.gz: RMS error = nan mm, bias = 0.000 mm (ignoring 9672 NaNs) <== ERROR: NaN in result

https://brainvisa.info/builds/job/brainvisa-master-5.0/483/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.