https://blog.tensorflowcn.cn/2020/02/visionair-using-federated-learning-to-estimate-airquality-tensorflow-api-java.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdqCF4ik4suyGPlu5ur79ZmTCcDXk9Url7HIqmbfNuRFr1I9QiupVMfSCDWQd9cv99kgr_vipQv6hKYdDDO81KfxQVIHYa-HlfI9twkA4-HyRaMy6Px8b8mBiE_95c8qXeihdeo0FQk5s/s1600/database+of+images.jpg
来自 Harshita Diddee、Divyanshu Sharma、Shivani Jindal 和 Shivam Grover 的客座文章
在学习机器学习模型时,用户数据的隐私至关重要。
联邦学习 是一种有用的技术,可以让智能手机学习共享的预测模型,同时将所有训练数据保存在设备上,从而保护用户隐私。我们将这种技术应用于学习模型,这些模型可以根据用户智能手机拍摄的照片估算空气质量。在德里(印度),空气质量经常下降,严重的空气质量指数 (AQI) 评级不再是大多数居民的震惊消息。政府建立的 AQI 监测站覆盖不到 5% 的地理区域,这不足以让公众准确实时地估计他们呼吸的空气的质量。
为了构建一个廉价的、在设备上估算 AQI 的应用程序,我们构建了
VisionAir,同时参与了
马可尼学会的 Celestini 计划印度。VisionAir 是一款保护隐私的 Android 应用程序,允许用户使用自己拍摄的图像来估算某个地区的 AQI。我们专门估算对人体健康有不利影响的
空气颗粒物 (PM 2.5) 值。在本文中,我们描述了
项目 的更新,其中我们利用联邦学习来构建共享模型,并分享一个新的开源数据集。
为了构建模型,我们收集了德里天空地平线智能手机拍摄的图像,并将其整理成一个大型开源数据集。先前关于使用图像分析估算空气质量 (PM2.5) 的工作并不总是考虑用户数据的隐私(例如图像和地理位置标签)。相反,VisionAir 在设备上部署模型进行推理和训练。VisionAir 通过使用
Tensorflow Java API 来实现深度学习模型的设备上训练。虽然设备上训练可以保护隐私,但一个局限性是,每个用户最终都会训练自己的模型,而不会利用其他用户的数据。通过使用
联邦学习,VisionAir 通过在训练模型时考虑众包输入来持续提高模型性能,而不会损害任何用户的隐私。
深度学习模型
VisionAir 使用一个神经网络,该网络以图像特征、气象数据和过去 AQI 数据作为输入来估算图像的 PM 2.5。该模型针对设备上训练进行了优化,只将最相关的特征输入到只有 2 个隐藏层的浅层网络中。用户拍摄的图像中相关的特征集包括从图像中计算出的雾霾程度、对比度和熵。有关详细信息,您可以查看我们之前的
文章。
构建一个开源数据集
首先,我们需要一个用上述特征标记的图像数据集。为了收集跨多个位置的多样化且与时间相关的相关数据,我们构建了一个 Android 应用程序,该应用程序每 5 分钟捕获一张
HDR 和非 HDR 图像(请参见
此处 的文档)。
|
包含相应标签的大型图像数据库:位置、捕获时间和距政府中央污染控制委员会 (CPCB) 传感器的距离。 |
我们的数据集捕获了大量 HDR 图像,因为与非 HDR 图像相比,它们包含更多关于场景照明的信息,并且可以弥补用户智能手机后处理造成的任何信息丢失。这使得对在多个智能手机上拍摄的同一图像进行统一预测成为可能(即使这些智能手机不包含在训练数据集合中)。
VisionAir 数据集 已开源,以促进该领域的进一步研究。它包含大约 4000 张非 HDR 图像和 1200 张 HDR 图像,并用相应的图像特征、天气和时间数据进行了标注。它还添加了其他气象参数,如风速、风向、温度、湿度、降水量、一天中的时间。
将标签分配给训练数据中的图像
根据图像拍摄位置,对图像进行如下标签分配。如果在拍摄照片位置的 1 公里半径内存在
中央污染控制委员会 (CPCB) 站点,我们将使用该 CPCB 站点记录的 PM 2.5 AQI 读数作为该特定图像的标签。否则,我们将使用名为
AirVeda 的精确、高质量便携式传感器,该传感器为我们提供了对应于该特定图像的 PM 2.5 AQI 读数。我们已经校准了 AirVeda 传感器,并验证了 CPCB 传感器读数和
AirVeda 读数在同一地点、同一时间匹配。
使用 TensorFlow Java API 在设备上训练 VisionAir 模型
联邦学习 保持模型的两个实例:一个在服务器上更新的全局模型和一个通过设备上训练更新的客户端模型。
全局模型
我们使用 TensorFlow 在 Python 中开发了 ML 模型,以使用图像特征和其他气象参数来估算 AQI。该模型在 VisionAir 数据集中 4000 张图像上进行了训练。我们导出了经过训练的模型(元图和检查点文件),并在我们的 Android 应用程序中将其用于 Java API。元图文件包含模型架构,而检查点文件包含分配的权重。使用这些文件,Tensorflow Java API 中的辅助函数允许我们在客户端设备上恢复模型图。有关开发 VisionAir 整个设备上和联邦架构的代码的详细分析,您可以参考
此处。
我们使用均方根误差 (RMSE) 来衡量模型性能,并使用三个交叉验证集在德里 6 月至 8 月的训练数据 (2800 张图像) 和测试数据 (700 张图像) 上取得了无偏结果。全局模型实现了 9.05 ppm 的 RMSE。根据
印度 AQI 分类标准,6 月至 8 月的 AQI 通常范围为中等 (101-200),这表明经过训练的模型的预测值可能偏离实际地面真实值约 9.05 ppm,这是可以接受的。我们需要在其他月份收集更多数据,以捕获全年的数据分布。
客户端模型
全局模型被推送到所有客户端设备。我们使用 TensorFlow Java API 在客户端设备上训练模型。我们在客户端设备上运行几个 epoch 来训练模型,然后以可用形式存储这些权重。每 24 小时,客户端设备上的提取权重都会发送到我们的联邦平均服务器。该应用程序目前约有 100 个用户。在联邦平均的每次迭代中,来自 5 个客户端设备的权重都会上传到中间联邦平均服务器上。
VisionAir 中的联邦学习
在联邦学习中,客户端模型权重的改进用于更新全局模型,从而提高整体估计精度。
|
VisionAir 实施联邦学习 |
为了更新全局模型,我们使用
这 篇论文中描述的算法来对客户端设备模型的权重进行平均。因此,全局模型的新权重是多个客户端设备的平均贡献。这使全局模型能够改进对新场景(位置)的 AQI 预测,并适应所有客户端设备观察到的共同模式(例如 AQI 的季节性变化)。
此后,更新的全局模型的检查点文件将作为新的客户端模型推送到客户端设备。我们不替换元图文件,因为全局模型和客户端模型的架构保持不变。
利用联邦学习的一些注意事项包括调整超参数,以确保客户端模型不会比全局模型表现更差。我们仍在调查模型性能,方法是改变 epoch 数、训练批次大小以及参与联邦平均的活跃用户数量在单个迭代中的影响。
联邦学习对于 VisionAir 努力提供保护隐私的 AQI 估算工具具有重要意义。
致谢
我们感谢马可尼学会 Celestini 计划印度提供的资金和支持,感谢我们的导师
Dr. Aakanksha Chowdhery (Google Brain),以及
Prof. Brejesh Lall 在
印度理工学院 配备完善的实验室。
VisionAir 可在 Google Play 商店
此处 获取。您还可以访问我们的
网站 或
Medium 文章,以了解我们正在进行的工作和结果。