Spaces:
Running
Running
Commit ·
862c36c
1
Parent(s): bf28da2
Add braindecode logo side-by-side and remove adapter emojis
Browse filesDisplay the braindecode logo next to the eegdash brain logo in the
header, linking to braindecode.org. Replace all adapter method emoji
icons with plain text labels across the leaderboard, about page,
submission form, and filters.
- frontend/src/components/Logo/Logo.js +32 -6
- frontend/src/pages/AboutPage/AboutPage.js +7 -7
- frontend/src/pages/AddModelPage/components/ModelSubmissionForm/ModelSubmissionForm.js +9 -9
- frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/Filters.js +1 -3
- frontend/src/pages/LeaderboardPage/components/Leaderboard/constants/modelTypes.js +8 -8
- frontend/src/pages/LeaderboardPage/components/Leaderboard/utils/columnUtils.js +4 -5
frontend/src/components/Logo/Logo.js
CHANGED
|
@@ -28,27 +28,53 @@ const Logo = ({ height = "40px" }) => {
|
|
| 28 |
|
| 29 |
return (
|
| 30 |
<Box
|
| 31 |
-
onClick={handleReset}
|
| 32 |
sx={{
|
| 33 |
height,
|
| 34 |
display: "flex",
|
| 35 |
alignItems: "center",
|
| 36 |
justifyContent: "center",
|
| 37 |
-
|
| 38 |
-
transition: "opacity 0.2s ease",
|
| 39 |
-
"&:hover": {
|
| 40 |
-
opacity: 0.8,
|
| 41 |
-
},
|
| 42 |
}}
|
| 43 |
>
|
| 44 |
<Box
|
|
|
|
| 45 |
sx={{
|
| 46 |
height: "100%",
|
| 47 |
aspectRatio: "200/150",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
}}
|
| 49 |
>
|
| 50 |
<HFLogo />
|
| 51 |
</Box>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
</Box>
|
| 53 |
);
|
| 54 |
};
|
|
|
|
| 28 |
|
| 29 |
return (
|
| 30 |
<Box
|
|
|
|
| 31 |
sx={{
|
| 32 |
height,
|
| 33 |
display: "flex",
|
| 34 |
alignItems: "center",
|
| 35 |
justifyContent: "center",
|
| 36 |
+
gap: 2,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
}}
|
| 38 |
>
|
| 39 |
<Box
|
| 40 |
+
onClick={handleReset}
|
| 41 |
sx={{
|
| 42 |
height: "100%",
|
| 43 |
aspectRatio: "200/150",
|
| 44 |
+
cursor: "pointer",
|
| 45 |
+
transition: "opacity 0.2s ease",
|
| 46 |
+
"&:hover": {
|
| 47 |
+
opacity: 0.8,
|
| 48 |
+
},
|
| 49 |
}}
|
| 50 |
>
|
| 51 |
<HFLogo />
|
| 52 |
</Box>
|
| 53 |
+
<Box
|
| 54 |
+
component="a"
|
| 55 |
+
href="https://braindecode.org"
|
| 56 |
+
target="_blank"
|
| 57 |
+
rel="noopener noreferrer"
|
| 58 |
+
sx={{
|
| 59 |
+
height: "100%",
|
| 60 |
+
display: "flex",
|
| 61 |
+
alignItems: "center",
|
| 62 |
+
cursor: "pointer",
|
| 63 |
+
transition: "opacity 0.2s ease",
|
| 64 |
+
"&:hover": {
|
| 65 |
+
opacity: 0.8,
|
| 66 |
+
},
|
| 67 |
+
}}
|
| 68 |
+
>
|
| 69 |
+
<Box
|
| 70 |
+
component="img"
|
| 71 |
+
src="https://braindecode.org/stable/_images/braindecode.svg"
|
| 72 |
+
alt="Braindecode"
|
| 73 |
+
sx={{
|
| 74 |
+
height: "100%",
|
| 75 |
+
}}
|
| 76 |
+
/>
|
| 77 |
+
</Box>
|
| 78 |
</Box>
|
| 79 |
);
|
| 80 |
};
|
frontend/src/pages/AboutPage/AboutPage.js
CHANGED
|
@@ -137,48 +137,48 @@ function AboutPage() {
|
|
| 137 |
<Box component="ul" sx={{ pl: 3 }}>
|
| 138 |
<li>
|
| 139 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 140 |
-
<strong>
|
| 141 |
alpha=32): injects trainable low-rank matrices, ~98% parameter
|
| 142 |
reduction.
|
| 143 |
</Typography>
|
| 144 |
</li>
|
| 145 |
<li>
|
| 146 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 147 |
-
<strong>
|
| 148 |
and Amplifying Inner Activations: only learns scaling vectors,
|
| 149 |
~99.5% parameter reduction.
|
| 150 |
</Typography>
|
| 151 |
</li>
|
| 152 |
<li>
|
| 153 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 154 |
-
<strong>
|
| 155 |
Adaptation: dynamic rank allocation across layers for optimal
|
| 156 |
budget distribution.
|
| 157 |
</Typography>
|
| 158 |
</li>
|
| 159 |
<li>
|
| 160 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 161 |
-
<strong>
|
| 162 |
Adaptation: decomposes weights into magnitude and direction
|
| 163 |
components.
|
| 164 |
</Typography>
|
| 165 |
</li>
|
| 166 |
<li>
|
| 167 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 168 |
-
<strong>
|
| 169 |
applies orthogonal transformations to preserve pre-trained
|
| 170 |
features.
|
| 171 |
</Typography>
|
| 172 |
</li>
|
| 173 |
<li>
|
| 174 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 175 |
-
<strong>
|
| 176 |
freezes the encoder and trains only the classification head.
|
| 177 |
</Typography>
|
| 178 |
</li>
|
| 179 |
<li>
|
| 180 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 181 |
-
<strong>
|
| 182 |
parameters (baseline for comparison).
|
| 183 |
</Typography>
|
| 184 |
</li>
|
|
|
|
| 137 |
<Box component="ul" sx={{ pl: 3 }}>
|
| 138 |
<li>
|
| 139 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 140 |
+
<strong>LoRA</strong> - Low-Rank Adaptation (r=16,
|
| 141 |
alpha=32): injects trainable low-rank matrices, ~98% parameter
|
| 142 |
reduction.
|
| 143 |
</Typography>
|
| 144 |
</li>
|
| 145 |
<li>
|
| 146 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 147 |
+
<strong>IA3</strong> - Infused Adapter by Inhibiting
|
| 148 |
and Amplifying Inner Activations: only learns scaling vectors,
|
| 149 |
~99.5% parameter reduction.
|
| 150 |
</Typography>
|
| 151 |
</li>
|
| 152 |
<li>
|
| 153 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 154 |
+
<strong>AdaLoRA</strong> - Adaptive Low-Rank
|
| 155 |
Adaptation: dynamic rank allocation across layers for optimal
|
| 156 |
budget distribution.
|
| 157 |
</Typography>
|
| 158 |
</li>
|
| 159 |
<li>
|
| 160 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 161 |
+
<strong>DoRA</strong> - Weight-Decomposed Low-Rank
|
| 162 |
Adaptation: decomposes weights into magnitude and direction
|
| 163 |
components.
|
| 164 |
</Typography>
|
| 165 |
</li>
|
| 166 |
<li>
|
| 167 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 168 |
+
<strong>OFT</strong> - Orthogonal Fine-Tuning:
|
| 169 |
applies orthogonal transformations to preserve pre-trained
|
| 170 |
features.
|
| 171 |
</Typography>
|
| 172 |
</li>
|
| 173 |
<li>
|
| 174 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 175 |
+
<strong>Probe</strong> - Linear probing baseline:
|
| 176 |
freezes the encoder and trains only the classification head.
|
| 177 |
</Typography>
|
| 178 |
</li>
|
| 179 |
<li>
|
| 180 |
<Typography variant="body1" color="text.secondary" paragraph>
|
| 181 |
+
<strong>Full Fine-tune</strong> - Updates all model
|
| 182 |
parameters (baseline for comparison).
|
| 183 |
</Typography>
|
| 184 |
</li>
|
frontend/src/pages/AddModelPage/components/ModelSubmissionForm/ModelSubmissionForm.js
CHANGED
|
@@ -59,13 +59,13 @@ const HELP_TEXTS = {
|
|
| 59 |
Adapter / Fine-tuning Method
|
| 60 |
</Typography>
|
| 61 |
<Typography variant="body2" sx={{ opacity: 0.9, lineHeight: 1.4 }}>
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
</Typography>
|
| 70 |
</Box>
|
| 71 |
),
|
|
@@ -110,9 +110,9 @@ const HELP_TEXTS = {
|
|
| 110 |
|
| 111 |
// Convert MODEL_TYPES to format expected by Select component
|
| 112 |
const modelTypeOptions = Object.entries(MODEL_TYPES).map(
|
| 113 |
-
([value, {
|
| 114 |
value,
|
| 115 |
-
label
|
| 116 |
})
|
| 117 |
);
|
| 118 |
|
|
|
|
| 59 |
Adapter / Fine-tuning Method
|
| 60 |
</Typography>
|
| 61 |
<Typography variant="body2" sx={{ opacity: 0.9, lineHeight: 1.4 }}>
|
| 62 |
+
LoRA: Low-Rank Adaptation (~98% param reduction){" "}
|
| 63 |
+
IA3: Scaling vectors only (~99.5% reduction){" "}
|
| 64 |
+
AdaLoRA: Adaptive rank allocation{" "}
|
| 65 |
+
DoRA: Weight-decomposed adaptation{" "}
|
| 66 |
+
OFT: Orthogonal fine-tuning{" "}
|
| 67 |
+
Probe: Linear probing (head only){" "}
|
| 68 |
+
Full Fine-tune: All parameters updated
|
| 69 |
</Typography>
|
| 70 |
</Box>
|
| 71 |
),
|
|
|
|
| 110 |
|
| 111 |
// Convert MODEL_TYPES to format expected by Select component
|
| 112 |
const modelTypeOptions = Object.entries(MODEL_TYPES).map(
|
| 113 |
+
([value, { label }]) => ({
|
| 114 |
value,
|
| 115 |
+
label,
|
| 116 |
})
|
| 117 |
);
|
| 118 |
|
frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/Filters.js
CHANGED
|
@@ -609,9 +609,7 @@ const LeaderboardFilters = ({
|
|
| 609 |
).map((type) => (
|
| 610 |
<FilterTag
|
| 611 |
key={type}
|
| 612 |
-
label={
|
| 613 |
-
MODEL_TYPES[type]?.label || type
|
| 614 |
-
}`}
|
| 615 |
checked={selectedTypes.includes(type)}
|
| 616 |
onChange={() => {
|
| 617 |
const newTypes = selectedTypes.includes(type)
|
|
|
|
| 609 |
).map((type) => (
|
| 610 |
<FilterTag
|
| 611 |
key={type}
|
| 612 |
+
label={MODEL_TYPES[type]?.label || type}
|
|
|
|
|
|
|
| 613 |
checked={selectedTypes.includes(type)}
|
| 614 |
onChange={() => {
|
| 615 |
const newTypes = selectedTypes.includes(type)
|
frontend/src/pages/LeaderboardPage/components/Leaderboard/constants/modelTypes.js
CHANGED
|
@@ -14,43 +14,43 @@ export const MODEL_TYPE_ORDER = [
|
|
| 14 |
|
| 15 |
export const MODEL_TYPES = {
|
| 16 |
'lora': {
|
| 17 |
-
icon: '
|
| 18 |
label: 'LoRA',
|
| 19 |
description: 'Low-Rank Adaptation: injects trainable low-rank matrices into transformer layers (~98% parameter reduction)',
|
| 20 |
order: 0
|
| 21 |
},
|
| 22 |
'ia3': {
|
| 23 |
-
icon: '
|
| 24 |
label: 'IA3',
|
| 25 |
description: 'Infused Adapter by Inhibiting and Amplifying Inner Activations (~99.5% parameter reduction)',
|
| 26 |
order: 1
|
| 27 |
},
|
| 28 |
'adalora': {
|
| 29 |
-
icon: '
|
| 30 |
label: 'AdaLoRA',
|
| 31 |
description: 'Adaptive Low-Rank Adaptation with dynamic rank allocation across layers',
|
| 32 |
order: 2
|
| 33 |
},
|
| 34 |
'dora': {
|
| 35 |
-
icon: '
|
| 36 |
label: 'DoRA',
|
| 37 |
description: 'Weight-Decomposed Low-Rank Adaptation: decomposes weights into magnitude and direction',
|
| 38 |
order: 3
|
| 39 |
},
|
| 40 |
'oft': {
|
| 41 |
-
icon: '
|
| 42 |
label: 'OFT',
|
| 43 |
description: 'Orthogonal Fine-Tuning: applies orthogonal transformations to preserve pre-trained features',
|
| 44 |
order: 4
|
| 45 |
},
|
| 46 |
'probe': {
|
| 47 |
-
icon: '
|
| 48 |
label: 'Probe',
|
| 49 |
description: 'Linear probing: freezes the encoder and trains only the classification head',
|
| 50 |
order: 5
|
| 51 |
},
|
| 52 |
'full_finetune': {
|
| 53 |
-
icon: '
|
| 54 |
label: 'Full Fine-tune',
|
| 55 |
description: 'Full fine-tuning baseline: all model parameters are updated during training',
|
| 56 |
order: 6
|
|
@@ -62,7 +62,7 @@ export const getModelTypeIcon = (type) => {
|
|
| 62 |
const matchedType = Object.entries(MODEL_TYPES).find(([key]) =>
|
| 63 |
cleanType.includes(key)
|
| 64 |
);
|
| 65 |
-
return matchedType ? matchedType[1].icon : '
|
| 66 |
};
|
| 67 |
|
| 68 |
export const getModelTypeLabel = (type) => {
|
|
|
|
| 14 |
|
| 15 |
export const MODEL_TYPES = {
|
| 16 |
'lora': {
|
| 17 |
+
icon: '',
|
| 18 |
label: 'LoRA',
|
| 19 |
description: 'Low-Rank Adaptation: injects trainable low-rank matrices into transformer layers (~98% parameter reduction)',
|
| 20 |
order: 0
|
| 21 |
},
|
| 22 |
'ia3': {
|
| 23 |
+
icon: '',
|
| 24 |
label: 'IA3',
|
| 25 |
description: 'Infused Adapter by Inhibiting and Amplifying Inner Activations (~99.5% parameter reduction)',
|
| 26 |
order: 1
|
| 27 |
},
|
| 28 |
'adalora': {
|
| 29 |
+
icon: '',
|
| 30 |
label: 'AdaLoRA',
|
| 31 |
description: 'Adaptive Low-Rank Adaptation with dynamic rank allocation across layers',
|
| 32 |
order: 2
|
| 33 |
},
|
| 34 |
'dora': {
|
| 35 |
+
icon: '',
|
| 36 |
label: 'DoRA',
|
| 37 |
description: 'Weight-Decomposed Low-Rank Adaptation: decomposes weights into magnitude and direction',
|
| 38 |
order: 3
|
| 39 |
},
|
| 40 |
'oft': {
|
| 41 |
+
icon: '',
|
| 42 |
label: 'OFT',
|
| 43 |
description: 'Orthogonal Fine-Tuning: applies orthogonal transformations to preserve pre-trained features',
|
| 44 |
order: 4
|
| 45 |
},
|
| 46 |
'probe': {
|
| 47 |
+
icon: '',
|
| 48 |
label: 'Probe',
|
| 49 |
description: 'Linear probing: freezes the encoder and trains only the classification head',
|
| 50 |
order: 5
|
| 51 |
},
|
| 52 |
'full_finetune': {
|
| 53 |
+
icon: '',
|
| 54 |
label: 'Full Fine-tune',
|
| 55 |
description: 'Full fine-tuning baseline: all model parameters are updated during training',
|
| 56 |
order: 6
|
|
|
|
| 62 |
const matchedType = Object.entries(MODEL_TYPES).find(([key]) =>
|
| 63 |
cleanType.includes(key)
|
| 64 |
);
|
| 65 |
+
return matchedType ? matchedType[1].icon : '';
|
| 66 |
};
|
| 67 |
|
| 68 |
export const getModelTypeLabel = (type) => {
|
frontend/src/pages/LeaderboardPage/components/Leaderboard/utils/columnUtils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import React from "react";
|
| 2 |
import { Box, Typography, Link, Tooltip, IconButton } from "@mui/material";
|
| 3 |
-
import {
|
| 4 |
import TrendingUpIcon from "@mui/icons-material/TrendingUp";
|
| 5 |
import TrendingDownIcon from "@mui/icons-material/TrendingDown";
|
| 6 |
import RemoveIcon from "@mui/icons-material/Remove";
|
|
@@ -530,14 +530,13 @@ export const createColumns = (
|
|
| 530 |
<Tooltip title={row.original.model.type}>
|
| 531 |
<Typography
|
| 532 |
sx={{
|
| 533 |
-
fontSize: "
|
| 534 |
cursor: "help",
|
| 535 |
lineHeight: 1,
|
| 536 |
-
|
| 537 |
-
'"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", sans-serif',
|
| 538 |
}}
|
| 539 |
>
|
| 540 |
-
{
|
| 541 |
</Typography>
|
| 542 |
</Tooltip>
|
| 543 |
</Box>
|
|
|
|
| 1 |
import React from "react";
|
| 2 |
import { Box, Typography, Link, Tooltip, IconButton } from "@mui/material";
|
| 3 |
+
import { getModelTypeLabel } from "../constants/modelTypes";
|
| 4 |
import TrendingUpIcon from "@mui/icons-material/TrendingUp";
|
| 5 |
import TrendingDownIcon from "@mui/icons-material/TrendingDown";
|
| 6 |
import RemoveIcon from "@mui/icons-material/Remove";
|
|
|
|
| 530 |
<Tooltip title={row.original.model.type}>
|
| 531 |
<Typography
|
| 532 |
sx={{
|
| 533 |
+
fontSize: "0.75rem",
|
| 534 |
cursor: "help",
|
| 535 |
lineHeight: 1,
|
| 536 |
+
fontWeight: 500,
|
|
|
|
| 537 |
}}
|
| 538 |
>
|
| 539 |
+
{getModelTypeLabel(row.original.model.type)}
|
| 540 |
</Typography>
|
| 541 |
</Tooltip>
|
| 542 |
</Box>
|