Commit c4fe2b8e authored by Alexandre Bône's avatar Alexandre Bône

First functional tests for longitudinal atlas. "Process" instead of

"Thread".
parent 0b6c37b0
Pipeline #54226793 passed with stages
in 20 minutes and 39 seconds
......@@ -36,7 +36,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
'device' kwarg is now available when using the kernel factory and 'device-device' is now available when using the xml configuration file. resolves #13
- New Python (PyQt5) GUI. Allows the configuration and run of a 'deterministic atlas'. This is an alpha-release
- Update Pykeops to version 0.0.14
- Bugfix: Gradients not computed when number_of_threads>1 and tensor_scalar_type is a FloatTensor. resolves #27
- Bugfix: Gradients not computed when number_of_processes>1 and tensor_scalar_type is a FloatTensor. resolves #27
- Bugfix: Memory leak when using estimate_longitudinal_atlas due to pytorch's autograd graph. resolves #33
### Changed
......
......@@ -103,7 +103,7 @@ def deterministic_atlas_3d_brain_structure(kernel_type, nb_process, process_per_
'use_cuda': True, 'callback': __estimator_callback},
model_options={'deformation_kernel_type': kernel_type, 'deformation_kernel_width': kernel_width, 'deformation_kernel_device': 'cuda',
'downsampling_factor': downsampling_factor,
'number_of_threads': nb_process, 'process_per_gpu': process_per_gpu},
'number_of_processes': nb_process, 'process_per_gpu': process_per_gpu},
write_output=False)
......@@ -120,7 +120,7 @@ def registration_3d_image(nb_process, number_of_time_points, kernel_width):
'use_cuda': False, 'callback': __estimator_callback},
model_options={'deformation_kernel_type': 'keops', 'deformation_kernel_width': kernel_width,
'number_of_time_points': number_of_time_points, 'downsampling_factor': downsampling_factor,
'number_of_threads': nb_process, 'process_per_gpu': 1},
'number_of_processes': nb_process, 'process_per_gpu': 1},
write_output=False)
......
......@@ -74,7 +74,7 @@ def __estimator_callback(status_dict):
# 'use_cuda': False, 'callback': __estimator_callback},
# model_options={'deformation_kernel_type': 'keops', 'deformation_kernel_width': kernel_width,
# 'number_of_time_points': number_of_time_points, 'downsampling_factor': downsampling_factor,
# 'number_of_threads': nb_process, 'process_per_gpu': 1},
# 'number_of_processes': nb_process, 'process_per_gpu': 1},
# write_output=False)
......@@ -177,7 +177,7 @@ def longitudinal_atlas_3d_image(nb_process, max_iterations=2, max_line_search_it
'initial_acceleration_variance': 1.33 ** 2,
'number_of_sources': len(dataset_specifications['subject_ids']),
'number_of_threads': nb_process, 'process_per_gpu': 1},
'number_of_processes': nb_process, 'process_per_gpu': 1},
write_output=False)
......
......@@ -6,5 +6,5 @@
<convergence-tolerance>1e-4</convergence-tolerance>
<freeze-template>Off</freeze-template>
<freeze-control-points>On</freeze-control-points>
<number-of-threads>4</number-of-threads>
<number-of-processes>4</number-of-processes>
</optimization-parameters>
......@@ -6,6 +6,6 @@
<convergence-tolerance>1e-4</convergence-tolerance>
<freeze-template>Off</freeze-template>
<freeze-control-points>On</freeze-control-points>
<number-of-threads>8</number-of-threads>
<number-of-processes>8</number-of-processes>
<use-cuda>On</use-cuda>
</optimization-parameters>
......@@ -14,6 +14,6 @@
<downsampling-factor>2</downsampling-factor>
<number-of-threads>1</number-of-threads>
<number-of-processes>1</number-of-processes>
</optimization-parameters>
......@@ -13,7 +13,7 @@
<sample-every-n-mcmc-iters>25</sample-every-n-mcmc-iters>
<downsampling-factor>2</downsampling-factor>
<number-of-threads>2</number-of-threads>
<number-of-processes>2</number-of-processes>
<use-cuda>On</use-cuda>
</optimization-parameters>
......@@ -5,7 +5,7 @@
<!--<optimization-method-type>ScipyLBFGS</optimization-method-type>-->
<!--<optimization-method-type>GradientAscent</optimization-method-type>-->
<number-of-threads>1</number-of-threads>
<number-of-processes>1</number-of-processes>
<max-iterations>100</max-iterations>
......@@ -25,7 +25,7 @@
<log-acceleration-proposal-std>0.1</log-acceleration-proposal-std>
<sources-proposal-std>0.02</sources-proposal-std>
<!--<number-of-threads>2</number-of-threads>-->
<!--<number-of-processes>2</number-of-processes>-->
<!--<freeze-template>On</freeze-template>-->
<!--<freeze-control-points>On</freeze-control-points>-->
......@@ -40,7 +40,7 @@
<!--<print-every-n-iters>1</print-every-n-iters>-->
<!--<save-every-n-iters>1</save-every-n-iters>-->
<!--<number-of-threads>4</number-of-threads>-->
<!--<number-of-processes>4</number-of-processes>-->
<!--<freeze-control-points>On</freeze-control-points>-->
......
......@@ -14,7 +14,7 @@
<use-sobolev-gradient>On</use-sobolev-gradient>
<number-of-threads>5</number-of-threads>
<number-of-processes>5</number-of-processes>
<use-cuda>On</use-cuda>
</optimization-parameters>
......@@ -19,7 +19,7 @@
<!--<onset-age-proposal-std>1</onset-age-proposal-std>-->
<!--<log-acceleration-proposal-std>0.1</log-acceleration-proposal-std>-->
<number-of-threads>4</number-of-threads>
<number-of-processes>4</number-of-processes>
<!-- <use-cuda>On</use-cuda> -->
</optimization-parameters>
......@@ -11,7 +11,7 @@
<use-sobolev-gradient>On</use-sobolev-gradient>
<number-of-threads>2</number-of-threads>
<number-of-processes>2</number-of-processes>
</optimization-parameters>
......@@ -513,8 +513,8 @@ class Deformetrica:
model_options['deformation_kernel_width'] = default.deformation_kernel_width
if 'deformation_kernel_type' not in model_options:
model_options['deformation_kernel_type'] = default.deformation_kernel_type
if 'number_of_threads' not in model_options:
model_options['number_of_threads'] = default.number_of_threads
if 'number_of_processes' not in model_options:
model_options['number_of_processes'] = default.number_of_processes
if 't0' not in model_options:
model_options['t0'] = default.t0
if 'initial_time_shift_variance' not in model_options:
......@@ -607,25 +607,25 @@ class Deformetrica:
# model_options['tensor_scalar_type'] = torch.FloatTensor
# Multi-threading/processing only available for the deterministic atlas for the moment.
if model_options['number_of_threads'] > 1:
if model_options['number_of_processes'] > 1:
if model_type.lower() in ['Shooting'.lower(), 'ParallelTransport'.lower(), 'Registration'.lower()]:
model_options['number_of_threads'] = 1
model_options['number_of_processes'] = 1
msg = 'It is not possible to estimate a "%s" model with multithreading. ' \
'Overriding the "number-of-threads" option, now set to 1.' % model_type
'Overriding the "number-of-processes" option, now set to 1.' % model_type
print('>> ' + msg)
elif model_type.lower() in ['BayesianAtlas'.lower(), 'Regression'.lower(), 'LongitudinalRegistration'.lower()]:
model_options['number_of_threads'] = 1
model_options['number_of_processes'] = 1
msg = 'It is not possible at the moment to estimate a "%s" model with multithreading. ' \
'Overriding the "number-of-threads" option, now set to 1.' % model_type
'Overriding the "number-of-processes" option, now set to 1.' % model_type
print('>> ' + msg)
# try and automatically set best number of thread per spawned process if not overridden by uer
if 'OMP_NUM_THREADS' not in os.environ:
logger.info('OMP_NUM_THREADS was not found in environment variables. An automatic value will be set.')
hyperthreading = utilities.has_hyperthreading()
omp_num_threads = math.floor(os.cpu_count() / model_options['number_of_threads'])
omp_num_threads = math.floor(os.cpu_count() / model_options['number_of_processes'])
if hyperthreading:
omp_num_threads = math.ceil(omp_num_threads/2)
......
......@@ -16,8 +16,8 @@ output_dir = os.path.join(os.getcwd(), 'output')
state_file = None
load_state_file = False
# number_of_threads = os.cpu_count()
number_of_threads = 1
# number_of_processes = os.cpu_count()
number_of_processes = 1
process_per_gpu = 1
model_type = 'undefined'
......
......@@ -270,7 +270,7 @@ class Geodesic:
msg = "Trying to parallel transport but the geodesic object was modified, please update before."
warnings.warn(msg)
# TODO: if number_of_threads > 1:
# TODO: if number_of_processes > 1:
# if self.backward_exponential.number_of_time_points > 1 and self.forward_exponential.number_of_time_points > 1:
#
......
......@@ -43,7 +43,7 @@ class AbstractStatisticalModel:
### Constructor:
####################################################################################################################
def __init__(self, name='undefined', number_of_threads=default.number_of_threads, use_cuda=default.use_cuda):
def __init__(self, name='undefined', number_of_processes=default.number_of_processes, use_cuda=default.use_cuda):
self.name = name
self.fixed_effects = {}
self.priors = {}
......@@ -51,7 +51,7 @@ class AbstractStatisticalModel:
self.individual_random_effects = {}
self.has_maximization_procedure = None
self.number_of_threads = number_of_threads
self.number_of_processes = number_of_processes
self.use_cuda = use_cuda
self.pool = None
......@@ -60,19 +60,19 @@ class AbstractStatisticalModel:
raise NotImplementedError
def _setup_multiprocess_pool(self, initargs=()):
if self.number_of_threads > 1:
logger.info('Starting multiprocess using ' + str(self.number_of_threads) + ' processes')
if self.number_of_processes > 1:
logger.info('Starting multiprocess using ' + str(self.number_of_processes) + ' processes')
assert len(mp.active_children()) == 0, 'This should not happen. Has the cleanup() method been called ?'
start = time.perf_counter()
process_id = mp.Value('i', 0, lock=True) # shared between processes
initargs = (process_id, initargs)
self.pool = mp.Pool(processes=self.number_of_threads, maxtasksperchild=None,
self.pool = mp.Pool(processes=self.number_of_processes, maxtasksperchild=None,
initializer=_initializer, initargs=initargs)
logger.info('Multiprocess pool started using start method "' + mp.get_sharing_strategy() + '"' +
' in: ' + str(time.perf_counter()-start) + ' seconds')
if torch.cuda.is_available() and self.number_of_threads > torch.cuda.device_count():
if torch.cuda.is_available() and self.number_of_processes > torch.cuda.device_count():
logger.warning("You are trying to run more processes than there are available GPUs, "
"it is advised to run `nvidia-cuda-mps-control` to leverage concurrent cuda executions. "
"If run in background mode, don't forget to stop the daemon when done.")
......
......@@ -27,7 +27,7 @@ class AffineAtlas(AbstractStatisticalModel):
tensor_scalar_type=default.tensor_scalar_type,
tensor_integer_type=default.tensor_integer_type,
dense_mode=default.dense_mode,
number_of_threads=default.number_of_threads,
number_of_processes=default.number_of_processes,
# dataset,
freeze_translation_vectors=default.freeze_translation_vectors,
......@@ -41,7 +41,7 @@ class AffineAtlas(AbstractStatisticalModel):
self.tensor_scalar_type = tensor_scalar_type
self.tensor_integer_type = tensor_integer_type
self.dense_mode = dense_mode
self.number_of_threads = number_of_threads
self.number_of_processes = number_of_processes
# self.dataset = dataset
......
......@@ -35,7 +35,7 @@ class BayesianAtlas(AbstractStatisticalModel):
tensor_scalar_type=default.tensor_scalar_type,
tensor_integer_type=default.tensor_integer_type,
dense_mode=default.dense_mode,
number_of_threads=default.number_of_threads,
number_of_processes=default.number_of_processes,
deformation_kernel_type=default.deformation_kernel_type,
deformation_kernel_width=default.deformation_kernel_width,
......@@ -62,7 +62,7 @@ class BayesianAtlas(AbstractStatisticalModel):
self.tensor_scalar_type = tensor_scalar_type
self.tensor_integer_type = tensor_integer_type
self.dense_mode = dense_mode
self.number_of_threads = number_of_threads
self.number_of_processes = number_of_processes
# Declare model structure.
self.fixed_effects['template_data'] = None
......
......@@ -84,7 +84,7 @@ class DeterministicAtlas(AbstractStatisticalModel):
tensor_scalar_type=default.tensor_scalar_type,
tensor_integer_type=default.tensor_integer_type,
dense_mode=default.dense_mode,
number_of_threads=default.number_of_threads,
number_of_processes=default.number_of_processes,
deformation_kernel_type=default.deformation_kernel_type,
deformation_kernel_width=default.deformation_kernel_width,
......@@ -110,7 +110,7 @@ class DeterministicAtlas(AbstractStatisticalModel):
**kwargs):
AbstractStatisticalModel.__init__(self, name='DeterministicAtlas', number_of_threads=number_of_threads, use_cuda=use_cuda)
AbstractStatisticalModel.__init__(self, name='DeterministicAtlas', number_of_processes=number_of_processes, use_cuda=use_cuda)
# Global-like attributes.
self.dimension = dimension
......@@ -268,7 +268,7 @@ class DeterministicAtlas(AbstractStatisticalModel):
:return:
"""
if self.number_of_threads > 1:
if self.number_of_processes > 1:
targets = [target[0] for target in dataset.deformable_objects]
args = [(i, self.template,
self.fixed_effects['template_data'],
......@@ -279,7 +279,7 @@ class DeterministicAtlas(AbstractStatisticalModel):
start = time.perf_counter()
results = self.pool.map(_subject_attachment_and_regularity, args, chunksize=1) # TODO: optimized chunk size
# results = self.pool.imap_unordered(_subject_attachment_and_regularity, args, chunksize=1)
# results = self.pool.imap(_subject_attachment_and_regularity, args, chunksize=int(len(args)/self.number_of_threads))
# results = self.pool.imap(_subject_attachment_and_regularity, args, chunksize=int(len(args)/self.number_of_processes))
logger.debug('time taken for deformations : ' + str(time.perf_counter() - start))
# Sum and return.
......
......@@ -32,7 +32,7 @@ class GeodesicRegression(AbstractStatisticalModel):
tensor_scalar_type=default.tensor_scalar_type,
tensor_integer_type=default.tensor_integer_type,
dense_mode=default.dense_mode,
number_of_threads=default.number_of_threads,
number_of_processes=default.number_of_processes,
deformation_kernel_type=default.deformation_kernel_type,
deformation_kernel_width=default.deformation_kernel_width,
......@@ -60,7 +60,7 @@ class GeodesicRegression(AbstractStatisticalModel):
self.tensor_scalar_type = tensor_scalar_type
self.tensor_integer_type = tensor_integer_type
self.dense_mode = dense_mode
self.number_of_threads = number_of_threads
self.number_of_processes = number_of_processes
# Declare model structure.
self.fixed_effects['template_data'] = None
......
......@@ -184,7 +184,7 @@ class LongitudinalAtlas(AbstractStatisticalModel):
tensor_scalar_type=default.tensor_scalar_type,
tensor_integer_type=default.tensor_integer_type,
dense_mode=default.dense_mode,
number_of_threads=default.number_of_threads,
number_of_processes=default.number_of_processes,
use_cuda=default.use_cuda,
deformation_kernel_type=default.deformation_kernel_type,
......@@ -226,7 +226,7 @@ class LongitudinalAtlas(AbstractStatisticalModel):
**kwargs):
AbstractStatisticalModel.__init__(self, name='LongitudinalAtlas', number_of_threads=number_of_threads, use_cuda=use_cuda)
AbstractStatisticalModel.__init__(self, name='LongitudinalAtlas', number_of_processes=number_of_processes, use_cuda=use_cuda)
# Global-like attributes.
self.dimension = dimension
......@@ -706,7 +706,7 @@ class LongitudinalAtlas(AbstractStatisticalModel):
if with_grad:
start = time.perf_counter()
# Call backward.
if self.number_of_threads == 1:
if self.number_of_processes == 1:
total = attachment + regularity
total.backward()
else:
......@@ -1005,7 +1005,7 @@ class LongitudinalAtlas(AbstractStatisticalModel):
attachment_i -= 0.5 * torch.sum(residuals[i][j] / noise_variance)
attachments[i] = attachment_i
if self.number_of_threads > 1:
if self.number_of_processes > 1:
assert grad_checkpoints_tensors is not None
grad_checkpoints_tensors = [- 0.5 * elt / noise_variance
for elt in grad_checkpoints_tensors]
......@@ -1155,13 +1155,13 @@ class LongitudinalAtlas(AbstractStatisticalModel):
checkpoint_tensors = []
grad_checkpoint_tensors = []
# if self.number_of_threads > 1 and not with_grad:
if self.number_of_threads > 1:
# if self.number_of_processes > 1 and not with_grad:
if self.number_of_processes > 1:
# Set arguments.
args = []
# TODO: check block size
# block_size = int(sum(len(x) for x in absolute_times) / self.number_of_threads)
# block_size = int(sum(len(x) for x in absolute_times) / self.number_of_processes)
block_size = 1
tmp_ij = []
......
......@@ -40,7 +40,7 @@ class PrincipalGeodesicAnalysis(AbstractStatisticalModel):
tensor_scalar_type=default.tensor_scalar_type,
tensor_integer_type=default.tensor_integer_type,
dense_mode=default.dense_mode,
number_of_threads=default.number_of_threads,
number_of_processes=default.number_of_processes,
deformation_kernel_type=default.deformation_kernel_type,
deformation_kernel_width=default.deformation_kernel_width,
......@@ -72,9 +72,9 @@ class PrincipalGeodesicAnalysis(AbstractStatisticalModel):
self.tensor_scalar_type = tensor_scalar_type
self.tensor_integer_type = tensor_integer_type
self.dense_mode = dense_mode
self.number_of_threads = number_of_threads
self.number_of_processes = number_of_processes
self.latent_space_dimension = latent_space_dimension
if self.number_of_threads > 1:
if self.number_of_processes > 1:
print('Number of threads larger than 1 not currently handled by the PGA model.')
# Dictionary of numpy arrays.
......
......@@ -91,9 +91,12 @@ class Landmark:
f.write(s)
if self.connectivity is not None:
a, connec_degree = self.connectivity.shape
connec = self.connectivity
if isinstance(connec, torch.Tensor):
connec = connec.detach().cpu().numpy()
a, connec_degree = connec.shape
s = connec_names[connec_degree] + ' {} {}\n'.format(a, a * (connec_degree+1))
f.write(s)
for face in self.connectivity:
for face in connec:
s = str(connec_degree) + ' ' + ' '.join([str(elt) for elt in face]) + '\n'
f.write(s)
......@@ -274,7 +274,7 @@ def get_model_options(xml_parameters):
'initial_cp_spacing': xml_parameters.initial_cp_spacing,
'initial_momenta': xml_parameters.initial_momenta,
'dense_mode': xml_parameters.dense_mode,
'number_of_threads': xml_parameters.number_of_threads,
'number_of_processes': xml_parameters.number_of_processes,
'downsampling_factor': xml_parameters.downsampling_factor,
'dimension': xml_parameters.dimension,
'use_cuda': xml_parameters.use_cuda,
......
......@@ -48,7 +48,7 @@ class XmlParameters:
self.optimization_method_type = default.optimization_method_type
self.optimized_log_likelihood = default.optimized_log_likelihood
self.number_of_threads = default.number_of_threads
self.number_of_processes = default.number_of_processes
self.max_iterations = default.max_iterations
self.max_line_search_iterations = default.max_line_search_iterations
self.save_every_n_iters = default.save_every_n_iters
......@@ -368,8 +368,8 @@ class XmlParameters:
self.optimization_method_type = optimization_parameters_xml_level1.text.lower()
elif optimization_parameters_xml_level1.tag.lower() == 'optimized-log-likelihood':
self.optimized_log_likelihood = optimization_parameters_xml_level1.text.lower()
elif optimization_parameters_xml_level1.tag.lower() == 'number-of-threads':
self.number_of_threads = int(optimization_parameters_xml_level1.text)
elif optimization_parameters_xml_level1.tag.lower() == 'number-of-processes':
self.number_of_processes = int(optimization_parameters_xml_level1.text)
elif optimization_parameters_xml_level1.tag.lower() == 'max-iterations':
self.max_iterations = int(optimization_parameters_xml_level1.text)
elif optimization_parameters_xml_level1.tag.lower() == 'convergence-tolerance':
......
......@@ -43,7 +43,7 @@ def estimate_longitudinal_registration_for_subject(args):
"""
Create the model object.
"""
Settings().number_of_threads = 1
Settings().number_of_processes = 1
model, individual_RER = instantiate_longitudinal_metric_model(xml_parameters, dataset, observation_type='image')
......@@ -148,8 +148,8 @@ def estimate_longitudinal_metric_registration(xml_parameters):
"""
# Multi-threaded version.
if Settings().number_of_threads > 1:
pool = Pool(processes=Settings().number_of_threads)
if Settings().number_of_processes > 1:
pool = Pool(processes=Settings().number_of_processes)
args = [(i, Settings().serialize(), xml_parameters, registration_output_path,
full_dataset)
for i in range(number_of_subjects)]
......
......@@ -30,7 +30,7 @@ class GeneralSettings:
# self.tensor_scalar_type = torch.DoubleTensor
# self.tensor_integer_type = torch.DoubleTensor
#
# self.number_of_threads = 1
# self.number_of_processes = 1
#
# self.dense_mode = False
#
......@@ -48,12 +48,12 @@ class GeneralSettings:
# def serialize(self):
# return (self.dimension, self.output_dir, self.preprocessing_dir, self.load_state, self.state_file,
# self.tensor_scalar_type, self.tensor_integer_type, self.number_of_threads, self.dense_mode,
# self.tensor_scalar_type, self.tensor_integer_type, self.number_of_processes, self.dense_mode,
# self.unit_tests_data_dir)
#
# def initialize(self, args):
# (self.dimension, self.output_dir, self.preprocessing_dir, self.load_state, self.state_file,
# self.tensor_scalar_type, self.tensor_integer_type, self.number_of_threads, self.dense_mode,
# self.tensor_scalar_type, self.tensor_integer_type, self.number_of_processes, self.dense_mode,
# self.unit_tests_data_dir) = args
......
......@@ -12,7 +12,7 @@
<!--<save-every-n-iters>1</save-every-n-iters>-->
<use-cuda>Off</use-cuda>
<number-of-threads>1</number-of-threads>
<number-of-processes>1</number-of-processes>
<use-rk2>Off</use-rk2>
</optimization-parameters>
......@@ -12,7 +12,7 @@
<!--<save-every-n-iters>1</save-every-n-iters>-->
<use-cuda>On</use-cuda>
<number-of-threads>4</number-of-threads>
<number-of-processes>4</number-of-processes>
<use-rk2>Off</use-rk2>
</optimization-parameters>
......@@ -12,7 +12,7 @@
<!--<save-every-n-iters>1</save-every-n-iters>-->
<use-cuda>On</use-cuda>
<number-of-threads>4</number-of-threads>
<number-of-processes>4</number-of-processes>
<use-rk2>Off</use-rk2>
</optimization-parameters>
......@@ -9,7 +9,7 @@
<!--<save-every-n-iters>1</save-every-n-iters>-->
<use-cuda>Off</use-cuda>
<number-of-threads>4</number-of-threads>
<number-of-processes>4</number-of-processes>
<use-rk2>Off</use-rk2>
</optimization-parameters>
\ No newline at end of file
......@@ -13,6 +13,6 @@
<convergence-tolerance>1e-6</convergence-tolerance>
<use-cuda>Off</use-cuda>
<number-of-threads>5</number-of-threads>
<number-of-processes>5</number-of-processes>
</optimization-parameters>
......@@ -12,6 +12,6 @@
<convergence-tolerance>1e-6</convergence-tolerance>
<use-cuda>On</use-cuda>
<number-of-threads>5</number-of-threads>
<number-of-processes>5</number-of-processes>
</optimization-parameters>
>> It is not possible at the moment to estimate a "BayesianAtlas" model with multithreading. Overriding the "number-of-threads" option, now set to 1.
>> It is not possible at the moment to estimate a "BayesianAtlas" model with multithreading. Overriding the "number-of-processes" option, now set to 1.
>> No specified state-file. By default, Deformetrica state will by saved in file: /home/alexandre.bone/Softwares/deformetrica/tests/functional_tests/data/atlas/digits/output_saved__4/deformetrica-state.p.
>> Setting the image grid downsampling factor to: 2.
>> Objects noise dimension:
......
......@@ -19,7 +19,7 @@
<!--<sobolev-kernel-width-ratio>0.5</sobolev-kernel-width-ratio>-->
<convergence-tolerance>1e-6</convergence-tolerance>
<!--<number-of-threads>2</number-of-threads>-->
<!--<number-of-processes>2</number-of-processes>-->
<use-cuda>Off</use-cuda>
</optimization-parameters>
......@@ -19,7 +19,7 @@
<!--<sobolev-kernel-width-ratio>0.5</sobolev-kernel-width-ratio>-->
<convergence-tolerance>1e-6</convergence-tolerance>
<!--<number-of-threads>2</number-of-threads>-->
<!--<number-of-processes>2</number-of-processes>-->
<use-cuda>Off</use-cuda>
</optimization-parameters>
......@@ -18,7 +18,7 @@
<!--<sobolev-kernel-width-ratio>0.5</sobolev-kernel-width-ratio>-->
<convergence-tolerance>1e-6</convergence-tolerance>
<number-of-threads>8</number-of-threads>
<number-of-processes>8</number-of-processes>
<use-cuda>Off</use-cuda>
</optimization-parameters>
......@@ -18,7 +18,7 @@
<!--<sobolev-kernel-width-ratio>0.5</sobolev-kernel-width-ratio>-->
<convergence-tolerance>1e-6</convergence-tolerance>
<!--<number-of-threads>2</number-of-threads>-->
<!--<number-of-processes>2</number-of-processes>-->
<use-cuda>Off</use-cuda>
</optimization-parameters>
......@@ -18,7 +18,7 @@
<!--<sobolev-kernel-width-ratio>0.5</sobolev-kernel-width-ratio>-->
<convergence-tolerance>1e-6</convergence-tolerance>
<number-of-threads>8</number-of-threads>
<number-of-processes>8</number-of-processes>
<use-cuda>Off</use-cuda>
</optimization-parameters>
>> It is not possible at the moment to estimate a "BayesianAtlas" model with multithreading. Overriding the "number-of-threads" option, now set to 1.
>> It is not possible at the moment to estimate a "BayesianAtlas" model with multithreading. Overriding the "number-of-processes" option, now set to 1.
>> No specified state-file. By default, Deformetrica state will by saved in file: /home/alexandre.bone/Softwares/deformetrica/tests/functional_tests/data/atlas/skulls/output_saved__5/deformetrica-state.p.
>> Using a Sobolev gradient for the template data with the ScipyLBFGS estimator memory length being larger than 1. Beware: that can be tricky.
>> Objects noise dimension:
......
-1.528017 -1.308177
-0.509787 -1.453870
0.490901 -1.435443
1.486906 -1.409453
-1.527259 0.071637
-0.492841 -0.294337
0.496387 -0.456205
1.492049 -0.421353
-1.546212 1.556161
-0.443985 1.022886
0.514667 0.581343
1.489948 0.570847
-1.512274 2.157066
-0.471847 1.879804
0.516519 1.591781
1.492661 1.562027
0.018187 0.048488 0.010019 0.047705
-0.018366 -0.004511 0.015975 -0.023726
0.049342 0.126676 0.020337 0.146223
0.001174 0.008532 -0.000170 -0.002908
0.006744 0.022929 -0.004275 0.109136
-0.004853 -0.001159 0.007616 -0.003867
-0.002102 -0.009261 -0.003544 0.020806
-0.001348 -0.001410 0.000533 0.000549
-0.003899 0.003403 0.009207 -0.000946