pokedex-web / frontend /src /components /MobileNetV3Diagram.js
gpimentel's picture
feat: add MobileNetV3 diagram and update styles
261dd71
Raw
History Blame Contribute Delete
7.11 kB
'use client';
import React from 'react';
import styles from './MobileNetV3Diagram.module.css';
export default function MobileNetV3Diagram() {
return (
<div className={styles.card}>
<div className={styles.cardScanline}></div>
<header className={styles.header}>
<div className={styles.title}>MobileNetV3-Large Student</div>
<div className={styles.subtitle}>
Destilado dos 5 Professores ResNet-18 &nbsp;·&nbsp; 66.6 MB FP32 &nbsp;·&nbsp; 1026 classes
</div>
</header>
<div className={styles.divider}></div>
<div className={styles.pipeline}>
<div className={`${styles.layer} ${styles.lInput}`} style={{ animationDelay: '0.04s' }}>
<div className={styles.layerName}>Input Tensor</div>
<div className={styles.layerDim}>128 &times; 128 &times; 1 &mdash; grayscale silhouette</div>
</div>
<div className={styles.conn}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lConv}`} style={{ animationDelay: '0.08s' }}>
<div className={styles.layerName}>Conv2d Adaptado</div>
<div className={styles.layerDim}>in=1 &nbsp;|&nbsp; 16 filtros &nbsp;|&nbsp; 3&times;3 &nbsp;|&nbsp; stride 2</div>
</div>
<div className={styles.conn}>
<div className={styles.connLine}></div>
</div>
<div className={styles.stageGroup} style={{ animationDelay: '0.14s' }}>
<div className={styles.stageLabel}>Blocos Inverted Residual + SE</div>
<div className={`${styles.layer} ${styles.lBlock}`} style={{ width: '100%', animationDelay: '0.15s' }}>
<div className={styles.layerName}>Bottleneck &times;3 &mdash; expans&atilde;o 16&rarr;64</div>
<div className={styles.layerDim}>DWConv 3&times;3 &nbsp;|&nbsp; SE squeeze 4&rarr;16 &nbsp;|&nbsp; stride 2 &nbsp;|&nbsp; h-swish</div>
</div>
<div className={`${styles.conn} ${styles.connSm}`}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lBlock}`} style={{ width: '100%', animationDelay: '0.18s' }}>
<div className={styles.layerName}>Bottleneck &times;3 &mdash; expans&atilde;o 24&rarr;88</div>
<div className={styles.layerDim}>DWConv 3&times;3 &nbsp;|&nbsp; SE squeeze 4&rarr;24 &nbsp;|&nbsp; stride 2 &nbsp;|&nbsp; ReLU</div>
</div>
<div className={`${styles.conn} ${styles.connSm}`}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lBlock}`} style={{ width: '100%', animationDelay: '0.21s' }}>
<div className={styles.layerName}>Bottleneck &times;6 &mdash; expans&atilde;o 40&rarr;240</div>
<div className={styles.layerDim}>DWConv 5&times;5 &nbsp;|&nbsp; SE squeeze 8&rarr;40 &nbsp;|&nbsp; h-swish &nbsp;|&nbsp; stride 2</div>
</div>
<div className={`${styles.conn} ${styles.connSm}`}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lBlock}`} style={{ width: '100%', animationDelay: '0.24s' }}>
<div className={styles.layerName}>Bottleneck &times;4 &mdash; expans&atilde;o 80&rarr;400</div>
<div className={styles.layerDim}>DWConv 3&times;3 &nbsp;|&nbsp; SE squeeze 16&rarr;80 &nbsp;|&nbsp; h-swish &nbsp;|&nbsp; stride 1</div>
</div>
<div className={`${styles.conn} ${styles.connSm}`}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lBlock}`} style={{ width: '100%', animationDelay: '0.27s' }}>
<div className={styles.layerName}>Bottleneck &times;2 &mdash; expans&atilde;o 112&rarr;672</div>
<div className={styles.layerDim}>DWConv 5&times;5 &nbsp;|&nbsp; SE squeeze 24&rarr;112 &nbsp;|&nbsp; h-swish &nbsp;|&nbsp; stride 1</div>
</div>
<div className={`${styles.conn} ${styles.connSm}`}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lBlock}`} style={{ width: '100%', animationDelay: '0.30s' }}>
<div className={styles.layerName}>Bottleneck &times;3 &mdash; expans&atilde;o 160&rarr;960</div>
<div className={styles.layerDim}>DWConv 5&times;5 &nbsp;|&nbsp; SE squeeze 32&rarr;160 &nbsp;|&nbsp; h-swish &nbsp;|&nbsp; stride 2</div>
</div>
</div>
<div className={styles.conn}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lConv}`} style={{ animationDelay: '0.33s' }}>
<div className={styles.layerName}>Conv2d 1&times;1</div>
<div className={styles.layerDim}>960 &rarr; 1280 &nbsp;|&nbsp; h-swish</div>
</div>
<div className={styles.conn}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lPool}`} style={{ animationDelay: '0.35s' }}>
<div className={styles.layerName}>Global Average Pool</div>
<div className={styles.layerDim}>AvgPool 7&times;7 &nbsp;&rarr;&nbsp; 1 &times; 1 &times; 1280</div>
</div>
<div className={styles.conn}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lFlatten}`} style={{ animationDelay: '0.38s' }}>
<div className={styles.layerName}>Flatten + Dropout</div>
<div className={styles.layerDim}>1280-dim &nbsp;|&nbsp; p=0.2</div>
</div>
<div className={styles.conn}>
<div className={styles.connLine}></div>
</div>
<div className={`${styles.layer} ${styles.lOutput}`} style={{ animationDelay: '0.41s' }}>
<div className={styles.layerName}>FC &mdash; Classifier Head</div>
<div className={styles.layerDim}>Linear(1280 &rarr; 1026) &nbsp;|&nbsp; 1025 target species + 1 OOD rejection sink</div>
</div>
</div>
<div className={styles.kdBadge}>
<div className={styles.kdBadgeIcon}>&#8595;</div>
<div className={styles.kdBadgeText}>
Destilado de 5 Professores ResNet-18 (230 MB) via L<sub>total</sub> = (1&minus;&alpha;)L<sub>hard</sub> + &alpha;L<sub>soft</sub> + &gamma;L<sub>OOD</sub>
</div>
</div>
<div className={styles.legend}>
<div className={styles.legendItem}>
<div className={`${styles.legDot} ${styles.legCyan}`}></div>I/O
</div>
<div className={styles.legendItem}>
<div className={`${styles.legDot} ${styles.legGreen}`}></div>Convolucional
</div>
<div className={styles.legendItem}>
<div className={`${styles.legDot} ${styles.legPurple}`}></div>Bottleneck + SE
</div>
<div className={styles.legendItem}>
<div className={`${styles.legDot} ${styles.legAmber}`}></div>Pooling / Flatten
</div>
</div>
</div>
);
}