「Google」精度延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet( 二 )


「Google」精度延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet
本文插图
量化图示 。
在下面的示例中 , 输出张量范围由-168 到 204:
「Google」精度延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet
本文插图
这表明 , 由于很难将大范围的浮点张量拟合至 8 位整型 bucket , 准确度可能已经损失太多了 。
为了解决这一问题 , 研究者将 swish 激活函数替换为「约束范围的」激活函数(relu6) , 因为后者将输出范围限制在 [0, 6] 。 做出此改变后 , 量化模型在 ImageNet 数据集上的 Top-1 准确度由之前的 46% 回升至 74.4% 。
在数据集上尝试使用 EfficientNet-Lite
现在我们可以看看如何使用 EfficientNet-Lite 在你的数据集上的性能表现 。 官方博客建议使用 TensorFlow Lite Model Maker , 这是一个可以在已有 TensorFlow 模型上应用迁移学习的工具 。 其中 , 用户可以使用自己的输入数据 , 并以 TensorFlow Lite 的形式输出模型 。
TensorFlow Lite Model Maker 支持很多模型架构 , 包括 MobileNetV2 和所有变体版本的 EfficientNet-Lite 。 以下为使用 EfficientNet-Lite0 进行图像分类的代码 , 只需要五行就够了 。
# Load your custom datasetdata = http://news.hoteastday.com/a/ImageClassifierDataLoader.from_folder(flower_path)train_data, test_data = data.split(0.9)# Customize the pre-trained TensorFlow modelmodel = image_classifier.create(train_data, model_spec=efficienetnet_lite0_spec)# Evaluate the modelloss, accuracy = model.evaluate(test_data)# Export as TensorFlow Lite model.model.export('image_classifier.tflite', 'image_labels.txt')
通过改变 model_spec 参数 , 你可以很容易地尝试不同的模型 。 对于小数据集 , 如 tf_flowers , 你可以达到 92% 的准确率 , 而且只需要几分钟时间 , 训练 5 个 epoch 。 如果训练更多 epoch , 采用更多数据 , 或者微调整个模型 , 效果还能更好 。
模型建立好以后 , 可以将其构建为移动端 app 。 App 会自动下载在 ImageNet 数据集上预训练过的 EfficientNet-Lite , 并存放在 asset 文件件 。 如果你想定制化自己的模型 , 可以替换掉该文件夹中的模型 。
「Google」精度延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet
本文插图
从截图上可以看到 , 模型可以实现实时推理速度(>= 30 fps) 。
【「Google」精度延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet】参考链接:https://blog.tensorflow.org/2020/03/higher-accuracy-on-vision-models-with-efficientnet-lite.html?linkId=84432329