SmartBin
一个全栈 AI 垃圾分类器——上传一张照片,十一个深度学习模型决定它该进哪个垃圾桶。
- 类型
- 网站
- 角色
- 独立开发
- Status
- 进行中
- Tech
- FastAPI PyTorch Next.js TypeScript Docker AWS
- Started
- 2024年10月
概述
SmartBin 是一个由 AI 驱动的垃圾分类系统。你上传任何一件垃圾的照片,深度学习模型就会判断它属于哪个类别——可回收、可堆肥、填埋、有害垃圾——速度快到让你感觉它是个工具,而不是一个演示。后端是一个 FastAPI 服务,可以热切换十一个预训练的图像分类模型,让你可以并排比较它们的准确率、延迟和内存占用。
这些模型在一个兄弟仓库 GarbageClassfication 中分别训练,该仓库负责数据集流水线、训练脚本和评估工具。SmartBin 本身是推理 + 服务层。
支持的模型
通过一个下拉菜单即可在这些模型间切换,每个模型都按需加载:
- DenseNet (
densenet201) - EfficientNet (
efficientnet_b7) - GoogLeNet
- LeNet
- MobileNetV2 / MobileNetV3 (
mobilenet_v2/mobilenet_v3_large) - ResNet (
resnet50) - AlexNet
- ShuffleNetV2 (
shufflenet_v2_x2_0) - VGG
- RegNet (
regnet_x_32gf)
每个模型都在可用的硬件上运行——优先 CUDA,然后是 Apple Silicon 上的 MPS,最后是 CPU 作为后备方案——无需任何配置。
技术栈
- 后端 — FastAPI,提供一个
/api/predict端点,接收图片上传和模型名称,返回带有 softmax 概率的 top-k 预测结果。 - 模型加载 — PyTorch 模块从
weights/目录懒加载。权重托管在 Google Drive 上(体积太大不适合 git),在部署时一次性获取。 - 前端 — Next.js + TypeScript,支持拖放上传,提供实时预测反馈和一个用于对比运行的模型选择器。
- 部署 — 容器化以便移植,托管在 AWS 上,地址是 smrtbin.com。
亮点
- 十一个模型,一个端点 — 选择器让 SmartBin 变成了一个即兴的基准测试工具。用同一个瓶子测试每个模型,看看哪些模型意见不一。
- 可热切换的权重 — 模型懒加载,所以容器启动快,并且只支付实际使用模型的内存成本。
- 硬件自适应 — 得益于 PyTorch 的
torch.device自动检测,在 CPU、CUDA 和 MPS 上使用相同的代码路径。