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 */}
EdgeAI Studio
JD

John Doe

Pro Developer

{/* 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'}` })}

{tool.title}

{tool.desc}

{/* 參數設定區塊 (展開) */} {toolsEnabled[tool.id] && (
e.stopPropagation()}> {/* 1. 剪枝參數 */} {tool.id === 'pruning' && (
目標稀疏度 (Target Sparsity) 50%
)} {/* 2. 蒸餾參數 */} {tool.id === 'distillation' && (
溫度參數 (Temperature, T) 4.0
軟標籤權重 (Alpha) 0.5
)} {/* 3. 量化參數 */} {tool.id === 'quantization' && (
壓縮積極度 (Aggressiveness) {optimizationLevel}%
setOptimizationLevel(e.target.value)} />
)}
)}
))}

預估收益 (Estimated Gain)

模型體積 -64.2%
推理延遲 (Latency) -45.8%
預期準確率損失 < 0.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) &&
Orin Nano
} {evalSelectedDevices.includes(2) &&
Pi 5
}
{/* 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.status}

{device.name}

{device.type} ARMv8
))}
新增邊緣端連線
)}
); }; export default App;