import React, { useState } from 'react';
import {
Cpu,
Zap,
Layers,
BarChart3,
ShieldCheck,
Settings,
Play,
Server,
Activity,
ArrowRight,
Monitor,
CheckCircle2,
Database,
Upload,
FileCode,
FileJson,
Plus,
Search,
MoreVertical,
Cloud
} from 'lucide-react';
const App = () => {
const [activeTab, setActiveTab] = useState('dataset'); // 預設改為資料管理頁面
const [optimizationLevel, setOptimizationLevel] = useState(75);
// 新增:控制各個優化工具是否啟用的狀態
const [toolsEnabled, setToolsEnabled] = useState({
pruning: true,
distillation: false,
quantization: true
});
// 新增:性能評測相關狀態
const [evalSelectedDevices, setEvalSelectedDevices] = useState([1]);
const [evalStatus, setEvalStatus] = useState('idle'); // idle, running, completed
const toggleTool = (id) => {
setToolsEnabled(prev => ({ ...prev, [id]: !prev[id] }));
};
const optimizationTools = [
{ id: 'pruning', title: '模型剪枝 (Pruning)', icon: , desc: '移除不重要的權重以減少計算量' },
{ id: 'distillation', title: '知識蒸餾 (Distillation)', icon: , desc: '將大模型的知識轉移到輕量化小模型' },
{ id: 'quantization', title: '模型量化 (Quantization)', icon: , desc: '將 FP32 轉換為 INT8/FP16 以加速推理' },
];
const edgeDevices = [
{ id: 1, name: 'NVIDIA Jetson Orin Nano', status: 'Online', type: 'GPU' },
{ id: 2, name: 'Raspberry Pi 5 (8GB)', status: 'Online', type: 'CPU' },
{ id: 3, name: 'Google Coral Dev Board', status: 'Offline', type: 'TPU' },
];
const models = [
{ name: 'YOLOv8-Large_v2.pt', size: '124 MB', type: 'PyTorch', date: '2023-10-24' },
{ name: 'EfficientNet-B0_final.onnx', size: '25 MB', type: 'ONNX', date: '2023-10-20' },
];
const datasets = [
{ name: 'COCO_Validation_Set', count: '5,000 Images', type: 'Object Detection', status: 'Ready' },
{ name: 'Edge_Thermal_Images', count: '1,200 Images', type: 'Infrared', status: 'Processing' },
];
// 新增:模擬的評測數據 (用於多裝置比較)
const mockEvalResults = {
1: { name: 'NVIDIA Jetson Orin Nano', latency: 12.5, fps: 80.2, ram: 420, power: 4.8 },
2: { name: 'Raspberry Pi 5 (8GB)', latency: 45.0, fps: 22.1, ram: 280, power: 2.1 }
};
const toggleEvalDevice = (id) => {
setEvalSelectedDevices(prev =>
prev.includes(id) ? prev.filter(deviceId => deviceId !== id) : [...prev, id]
);
// 變更選擇時重置評測狀態
if (evalStatus === 'completed') setEvalStatus('idle');
};
const startEvaluation = () => {
setEvalStatus('running');
setTimeout(() => setEvalStatus('completed'), 1500); // 模擬雲端下發與測試延遲
};
return (
{/* Sidebar */}
{/* Main Content */}
{/* Header Section */}
{activeTab === 'dataset' && "資料與模型中心 (Data & Model Center)"}
{activeTab === 'optimize' && "模型優化 (Optimization)"}
{activeTab === 'evaluation' && "性能評測 (Performance Evaluation)"}
{activeTab === 'deploy' && "邊緣部署 (Edge Deployment)"}
{activeTab === 'dataset' ? "上傳訓練好的模型與用於校準的資料集" : "當前模型:YOLOv8-Large_v2.pt"}
{activeTab === 'dataset' && (
)}
{activeTab !== 'dataset' && (
<>
>
)}
{/* Tab Content: Dataset & Model Management */}
{activeTab === 'dataset' && (
{/* Top Cards: Model Import & Dataset Import */}
{/* Model Upload Zone */}
導入模型權重
拖放 .pt, .onnx, .h5 或 .tflite 檔案至此
{/* Dataset Upload Zone */}
導入校準資料集
支援 .zip 壓縮包或標註 JSON 檔案
{/* Lists: Available Resources */}
{/* Models List */}
已就緒的模型
2 個模型
{models.map((model, idx) => (
{model.name}
{model.type}
•
{model.size}
))}
{/* Datasets List */}
可用資料集
2 個資料集
{datasets.map((dataset, idx) => (
{dataset.name}
{dataset.type}
•
{dataset.count}
{dataset.status}
))}
{/* Bottom Info: Next Steps */}
準備好開始優化了嗎?
系統已檢測到 1 個兼容的 PyTorch 模型與對應的校準資料集。
)}
{/* Tab Content: Optimization */}
{activeTab === 'optimize' && (
{optimizationTools.map((tool) => (
toggleTool(tool.id)}>
{React.cloneElement(tool.icon, { className: `w-6 h-6 ${toolsEnabled[tool.id] ? 'text-cyan-400' : 'text-slate-400'}` })}
{/* 參數設定區塊 (展開) */}
{toolsEnabled[tool.id] && (
e.stopPropagation()}>
{/* 1. 剪枝參數 */}
{tool.id === 'pruning' && (
)}
{/* 2. 蒸餾參數 */}
{tool.id === 'distillation' && (
)}
{/* 3. 量化參數 */}
{tool.id === 'quantization' && (
)}
)}
))}
預估收益 (Estimated Gain)
模型體積
-64.2%
推理延遲 (Latency)
-45.8%
)}
{/* Tab Content: Evaluation (原 Benchmark 替換並移至 Deploy 前) */}
{activeTab === 'evaluation' && (
{/* Device Selection Card */}
1. 選擇已上線裝置進行評測
選擇單一或多個裝置以進行性能比較
{evalStatus === 'completed' && (
)}
{edgeDevices.filter(d => d.status === 'Online').map(device => {
const isSelected = evalSelectedDevices.includes(device.id);
return (
toggleEvalDevice(device.id)}
className={`p-4 rounded-xl border-2 transition cursor-pointer flex items-center justify-between ${isSelected ? 'border-cyan-500 bg-cyan-500/10' : 'border-slate-700 bg-slate-800/50 hover:border-slate-500'}`}
>
{device.name}
{device.type}
{isSelected && }
);
})}
{/* Dashboard Results (產生比較結果) */}
{evalStatus === 'completed' && (
2. 性能儀表板 (Dashboard)
{/* Comparison Stats Cards */}
{[
{ key: 'latency', label: '推理延遲 (Latency)', unit: 'ms' },
{ key: 'fps', label: '幀率 (FPS)', unit: 'fps' },
{ key: 'ram', label: '記憶體佔用 (RAM)', unit: 'MB' },
{ key: 'power', label: '能耗 (Power)', unit: 'W' }
].map(metric => (
{metric.label}
{evalSelectedDevices.map(deviceId => {
const data = mockEvalResults[deviceId];
if(!data) return null;
// 判斷該裝置在該指標是否為所有選擇裝置中最優的
const isWinner = evalSelectedDevices.every(id => {
if(id === deviceId || !mockEvalResults[id]) return true;
return metric.key === 'fps'
? data[metric.key] >= mockEvalResults[id][metric.key]
: data[metric.key] <= mockEvalResults[id][metric.key];
});
return (
{data.name.split(' ')[0]} {data.name.split(' ')[1]}
1 ? 'text-green-400' : 'text-white'}`}>
{data[metric.key]}
{metric.unit}
);
})}
))}
{/* Main Charts area mockup */}
FPS 穩定度測試
{/* 繪製簡易折線/柱狀圖意象 */}
{[40, 55, 45, 60, 80, 75, 90, 85, 95, 80].map((h, i) => (
{evalSelectedDevices.includes(1) &&
}
{evalSelectedDevices.includes(2) &&
}
))}
{evalSelectedDevices.includes(1) &&
}
{evalSelectedDevices.includes(2) &&
}
{/* Export & Actions */}
評測總結
{evalSelectedDevices.length > 1 ? (
Jetson Orin Nano 在各項指標表現最佳。但若考量邊緣設備成本與功耗,Raspberry Pi 5 在輕度負載下仍具備部署可行性。
) : (
該裝置性能表現穩定,延遲符合實時運算標準(< 30ms),適合直接進行最終部署。
)}
)}
)}
{/* Tab Content: Deploy */}
{activeTab === 'deploy' && (
優化已完成!
模型已成功轉換為 TensorRT 與 TFLite 格式,準備進行部署。
選擇邊緣端裝置 (Select Edge Devices)
{edgeDevices.map(device => (
{device.name}
{device.type}
ARMv8
))}
)}
);
};
export default App;