You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Implement new probe polynomial kernel SVM.
This commit implements a new probe type, the polynomial kernel SVM.
The SVM allows for linear probing as well as non-linear probing with
complete control over the nonlinearity of the probe. The intention of
this probe is as an alternative to the single-layer perceptron, as well
as analyzes into how much nonlinearity is needed for a specific
downstream task.
The SVM is trained using Bayesian hyperparameter search, using
Scikit-Optimize for the optimization. Expect longer run times compared
to the perceptron.
This update also includes refactoring of the existing code to make
additional probe types simpler to implement.
New with this update is also the possibility to store trained models. Use the `store_models` argument in the config file to toggle model storing. In case of `store_models=True`, the entire dataset is used for training the probe, no splitting into training and validation sets. The models are stored with the results together with a self-contained run script to provide easy loading.
* Update github workflow
Github actions now only run on the original repository and not on forks
* Remove unnecessary files
* Update documentation
* Add config checks.
Merged linear_probe.py into evaluation.py.
Renamed everything relating to storing the trained probe from using model to usingprobe.
Bug fixes.
* Bug fix linear and svm.
* Bug fix svm
* Add coef0 to optimizeable parameters for SVM.
* Align svm probe saving with linear model
* Add hyperparameter tuning of epsilon in support vector regression
* Update documentation and citation
**TL;DR**: *Originally developed to evaluate challenge submissions for the 2025 EARTHVISION Challenge at CVPR ([competition details](https://www.grss-ieee.org/events/earthvision-2025/?tab=challenge)), NeuCo-Bench is now released for local benchmarking and evaluation - additional tech details in [http://arxiv.org/html/2510.17914](http://arxiv.org/html/2510.17914).*
6
+
**TL;DR**: *Originally developed to evaluate challenge submissions for the 2025 EARTHVISION Challenge at CVPR ([competition details](https://www.grss-ieee.org/events/earthvision-2025/?tab=challenge)), NeuCo-Bench is now released for local benchmarking and evaluation - additional tech details in [the NeuCo-Bench paper](https://openaccess.thecvf.com/content/CVPR2026W/EarthVision/html/Vinge_NeuCo-Bench_A_Novel_Benchmark_Framework_for_Neural_Embeddings_in_Earth_CVPRW_2026_paper.html).*
7
7
8
8
---
9
9
@@ -156,13 +156,12 @@ For details on how to contribute, please see [CONTRIBUTING.md](.github/CONTRIBUT
156
156
## How to cite
157
157
158
158
```BibTeX
159
-
@article{Vinge2025NeuCoBench,
160
-
author = {Rikard Vinge and Isabelle Wittmann and Jannik Schneider and Michael Marszalek and Luis Gilch and Thomas Brunschwiler and Conrad M Albrecht},
161
-
title = {NeuCo-Bench: A Novel Benchmark Framework for Neural Embeddings in Earth Observation},
162
-
journal = {arXiv preprint arXiv:2510.17914},
163
-
year = {2025},
164
-
url = {https://arxiv.org/abs/2510.17914},
165
-
doi = {10.48550/arXiv.2510.17914},
166
-
note = {Submitted on 19 Oct 2025},
159
+
@InProceedings{Vinge_2026_CVPR,
160
+
author = {Vinge, Rikard and Wittmann, Isabelle and Schneider, Jannik and Marszalek, Michael and Gilch, Luis and Brunschwiler, Thomas and Albrecht, Conrad M},
161
+
title = {NeuCo-Bench: A Novel Benchmark Framework for Neural Embeddings in Earth Observation},
162
+
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
assertparaminconfig.keys(), f"Parameter `{param}` missing from config."
19
+
20
+
# Optional parameters
21
+
if'embedding_dim'inconfig.keys():
22
+
assert (config['embedding_dim'] isNone) or (isinstance(config['embedding_dim'], int)), f"`embedding_dim` must be integer or None but got {type(config['embedding_dim'])}."
assert (isinstance(config[p], bool)), f"`{p}` must be boolean but got {type(config[p])}."
28
+
29
+
if'task_filter'inconfig.keys():
30
+
assert (config['task_filter'] isNone) or (isinstance(config['task_filter'], list)), f"`task_filter` must be list or None but got {type(config['task_filter'])}."
31
+
ifconfig['task_filter'] isnotNone:
32
+
fortinconfig['task_filter']:
33
+
assertisinstance(t, str), f"`task_filter elements must be strings but got {type(t)} for task {t} (task_filter: {config['task_filter']})."
"""Perform shuffle split validation with a linear probe.
125
+
Returns the trained model from the last split in the return object.
126
+
127
+
Args:
128
+
df (pandas.DataFrame): Dataframe to evaluate.
129
+
task_type (str): Type of task, either "classification" or "regression".
130
+
task_name (str): Name of task.
131
+
probe_type (str): String with the probe type. Currently implemented are 'linear' and 'svm', the former using a single linear layer and the second an SVM.
132
+
probe_params (dict): Dictionary with parameters for probe.
133
+
device (torch.device): Device, CPU or GPU, to run training and inference.
134
+
n_splits (int): Number of repetitions of Linear Probe evaluation. Use to gather statistics.
135
+
embedding_dim (int): Size of embeddings.
136
+
output_dir (str): Path to folder to store results in.
137
+
enable_plots (bool): Toggle storing of plots. Set to True to store plots.
138
+
random_seed (int): Integer seed for random number generator.
139
+
output_fold_results (bool, optional): Toggle storing performance metric per fold in addition to summary statistics. Default is False, in which case performance per fold is not stored.
140
+
store_probes (bool, optional): Toggle storing model under <output_dir>/models/<task_name>. Default is False. The model from the final fold is stored.
141
+
Returns:
142
+
TaskResult: A TaskResult instance containing the evaluation results.
0 commit comments