用于边缘部署的 MobileNet 与 EfficientNet
轻量级架构、TFLite 转换,以及模型大小与准确率之间的权衡。
用于边缘部署的 MobileNet 与 EfficientNet 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
边缘设备模型为何不同
在手机和嵌入式设备上,您需要用一部分准确率换取极小的模型体积、低延迟和低功耗。MobileNet 和 EfficientNet 正是为此设计的,它们使用高效的构建模块,而不是计算量很大的密集卷积。
MobileNet 的深度卷积
MobileNet 用深度可分离卷积替代标准卷积:先对每个通道进行空间滤波,再通过 1x1 逐点卷积进行混合。在准确率几乎不受影响的情况下,这可以将计算量和参数量减少约 8 到 9 倍。
MobileNetV3Small
MobileNetV3Small 针对移动设备进行了优化:权重大小约为2.5 兆字节,因此非常适合存储空间和 RAM 都有限的场景。
from tensorflow.keras.applications import MobileNetV3Small
base = MobileNetV3Small(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)EfficientNetB0
EfficientNetB0 使用复合缩放来平衡深度、宽度和分辨率。它以这样的模型大小实现了很高的准确率,是轻量级移动模型和大型服务器模型之间的理想折中方案。
from tensorflow.keras.applications import EfficientNetB0
base = EfficientNetB0(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)如何在两者之间选择
- MobileNetV3Small(约 2.5 兆字节):体积最小、速度最快,但准确率最低。最适合移动设备上的实时应用。
- EfficientNetB0:在准确率和模型大小之间取得平衡。适合能够承担稍多计算量的场景。
请根据设备的延迟预算和准确率目标进行选择。
构建迁移学习分类头
迁移学习的模式完全相同:冻结基础模型、进行池化,然后添加一个 Dense head。
from tensorflow.keras import layers, Model
base.trainable = False
x = layers.GlobalAveragePooling2D()(base.output)
x = layers.Dropout(0.2)(x)
out = layers.Dense(num_classes, activation="softmax")(x)
model = Model(base.input, out)什么是 TFLite?
TensorFlow Lite 是一种用于设备端推理的运行时。您可以将训练好的模型转换为紧凑的 .tflite 扁平缓冲区格式,从而在移动设备的中央处理器、图形处理器和神经网络处理器上高效运行。
TFLite 转换
使用 TFLiteConverter 转换已保存的模型。
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)量化进一步缩小模型
训练后量化会将权重以 8 位整数而不是 32 位浮点数存储,使模型大小缩小约 4 倍,并在移动硬件上加快推理,同时几乎不会损失准确率。
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant = converter.convert()延迟基准测试
在典型移动硬件上,MobileNetV3Small 通常每张图像只需个位数到十几毫秒即可运行,完全能够满足实时需求。EfficientNetB0 更大、更慢,但准确率更高。
请始终在实际目标设备上进行基准测试;模拟器的计时并不可靠。请使用 TFLite 基准测试工具,或测量解释器 invoke() 的耗时。
运行 TFLite 推理
使用 Interpreter 加载模型,设置输入张量,调用模型,然后读取输出。
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
inp = interpreter.get_input_details()[0]
out = interpreter.get_output_details()[0]
interpreter.set_tensor(inp["index"], image)
interpreter.invoke()
print(interpreter.get_tensor(out["index"]))快速检查
请检验您对边缘设备部署的了解。
回顾
您比较了用于边缘设备的 MobileNetV3Small(约 2.5 兆字节,速度最快)和 EfficientNetB0(较为均衡),在它们上面构建了迁移学习分类头,将模型转换为 TFLite,应用了 int8 量化,并在真实硬件上测试了延迟。至此,迁移学习课程已完成。下一门课程:时间序列分析。
常见问题解答
「用于边缘部署的 MobileNet 与 EfficientNet」课时是免费的吗?
是的 — 「用于边缘部署的 MobileNet 与 EfficientNet」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「用于边缘部署的 MobileNet 与 EfficientNet」这节课中我会学到什么?
轻量级架构、TFLite 转换,以及模型大小与准确率之间的权衡。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「用于边缘部署的 MobileNet 与 EfficientNet」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 迁移学习的概念与策略
- 使用 VGG16 和 ResNet50 作为基础模型
- 微调:解冻与重新训练
- 用于边缘部署的 MobileNet 与 EfficientNet