管天管地管空气!谷歌探索用CV估算空气质量

点击我爱计算机视觉标星,更快获取CVML新技术


客座博文 / Harshita Diddee, Divyanshu Sharma, Shivani Jindal 与 Shivam Grover

保障用户数据的隐私对于机器学习至关重要。联邦学习 (Federated Learning) 的出现使得智能手机在共享所有预测数据的同时将所有训练数据保留在本地设备上,从而保护了用户隐私。我们应用这项技术来加持模型,让模型可以根据用户在智能手机拍摄的图像估算空气质量。

在印度德里,空气质量通常很差,而大多数居民已经对糟糕的空气质量指数(AQI)习以为常。我们面临的问题是:政府设立的空气质量指数(Air Quality Index, AQI)监测站的覆盖范围不到该市全部地区的 5%,这不足以使广大居民获得准确的实时空气质量估计。

为了解决这个问题,我们的方案是开发一款能够在廉价设备(比如手机)上运行的 AQI 估算应用,因此我们做出了 VisionAir 并以此参加了马可尼学会的印度 Celestini 计划。VisionAir 是一款 Android 应用程序,它以不会侵犯用户的隐私的方式,通过用户拍摄的图像来估计当地的 AQI。我们专门估计会对人体健康产生不利影响的空气颗粒物(PM 2.5)的值。在本文中,我们将介绍 VisionAir 项目的最新进展,包括我们利用联邦学习构建共享模型并开源新的数据集。

为了构建模型,我们制作并开源了一个大型的德里天空图像数据集,这些图像都是我们用手机拍摄收集的。先前的模型在使用图像分析估算空气质量(PM2.5)时并没有考虑用户的数据隐私(例如图像和地理标签位置)。相比之下,VisionAir 将模型部署在移动设备上进行推理和训练。VisionAir 通过使用 Java 的 Tensorflow API 实现了深度学习模型在 Android 设备上的训练。虽然在设备上进行训练可以保护隐私,但带来的局限是数据量的大幅减少,每个用户都只能在没有利用其他用户数据的情况下训练各自的模型。通过使用联邦学习 ,VisionAir 实现了在训练模型时利用来自多用户的众包输入持续改善模型性能,而不会损害任何用户的隐私。

深度学习模型

VisionAir 使用的神经网络将图像特征、气象数据和过去的 AQI 数据作为输入,以估计图像的PM 2.5。模型针对移动设备上的训练进行了优化,方法是仅将最相关的特征输入只有2个隐藏层的浅层神经网络中。用户拍摄的图像中的相关特征集包括雾度,对比度和从图像计算出的熵。有关详细信息,请参见我们的上一篇文章

建立一个开源数据集

首先,我们需要采集数据,制作一个带有上述特征的图像数据集。为了更省力地在多个位置收集与时间相关的各种数据,我们构建了一个 Android 应用程序,该应用程序每5分钟自动捕获一次 HDR 和 非HDR 图像(请参阅此处的文档)。

管天管地管空气!谷歌探索用CV估算空气质量_第1张图片

带有相应标签的大型图像数据库:位置,拍摄时间以及与中央污染控制委员会(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 开发了 ML 模型以使用图像特征和 Python 中的其他气象参数来估计 AQI。该模型在 VisionAir 数据集中的 4000 张图像上进行了训练。我们导出了经过训练的模型的 Metagraph 和 Checkpoint 文件,并在 Android 应用程序中通过 Java API 使用该模型。元计算图文件包含模型体系结构,而检查点文件包含分配的权重。借助这两个文件,TensorFlow API for Java 中的 helper 函数能够在客户端设备上恢复模型的计算图。关于 VisionAir 设备端和联邦架构的代码详解,您可以参阅这里

我们根据均方根误差(RMSE)衡量模型的性能,对 6 至 8 月在德里收集到的 2800 张训练图像和 700 张测试图像使用三个交叉验证集最终获得了无偏差结果。全局模型的 RMSE 为 9.05  ppm。根据印度 AQI 分类标准 ,6 月至 8 月的 AQI 典型范围为中等(101-200),这表明训练后模型输出的预测值可能与实际环境的真实值相差 9.05 ppm,这是可以接受的。我们将在其他月份收集更多的数据,以获得全年的数据分布。

客户端模型

全局模型会被推送到所有客户端设备上。我们使用 TensorFlow 的 Java API 在客户端设备上继续训练模型。用户在拍照评估当前空气质量时会带来新的数据,因此我们会在客户端设备上把模型训练几遍,然后把这些权重存为可用格式。每24小时,上述权重被发送到我们的联邦平均(Federated Averageing)服务器。该应用程序目前有大约100个用户。联邦平均算法的每次迭代,将上传 5 个客户端设备上权重文件至中间联邦平均服务器上。

VisionAir 中的联邦学习

在联邦学习中,客户端模型权重的改进会用于更新全局模型,从而提高了总体估计的准确度。

管天管地管空气!谷歌探索用CV估算空气质量_第2张图片

VisionAir 应用联邦学习

为了更新全局模型,我们使用本篇论文描述的算法对客户端设备模型的权重进行平均。因此,全局模型的新权重是多个客户端设备的平均贡献。结果是,全局模型的 AQI 预测能力能够适用于数据集未包含的新场景(新地点),并适应所有客户端设备观察到的共同模式(例如 AQI 的季节性变化)。

随后,将更新后的全局模型的 Checkpoint 文件作为新的客户端模型推送到客户端设备。我们不替换 Metagraph 文件,因为全局模型和客户端模型的体系结构保持不变。

使用联邦学习时注意调整超参数,以确保客户端模型的性能不低于全局模型。我们仍在通过调整 epoch,batch size 的大小以及在联合平均每次迭代的活跃用户数来改进模型性能。

联邦学习对于 VisionAir,一款提供隐私保护的 AQI 估计工具,具有重要意义。

致谢

我们感谢马可尼学会的印度 Celestini 计划,我们的导师 Aakanksha Chowdhery 博士(Google Brain)以及 Brejesh Lall 教授在印度技术学院的实验室提供的资金和支持 。

VisionAir 可在此处的 Google Play 商店中找到 。您可以访问我们的网站博客,以随时了解我们正在进行的工作和结果。

如果您想详细了解 本文提及 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:

  • 联邦学习
    https://ai.googleblog.com/2017/04/federated-learning-collaborative.html

  • VisionAir
    https://play.google.com/store/apps/details?id=com.airquality.VisionAir&hl=en&referrer=utm_source%3Dgoogle%26utm_medium%3Dorganic%26utm_term%3Dvisionair+app&pcampaignid=APPU_1_kgDWXbaoDcXjvgT_w5_wAw

  • 马可尼学会的印度 Celestini 计划
    http://marconisociety.org/celestini-program/

  • 空气颗粒物
    https://aidindia.org/airborne-particulate-matter-pm2-5-adverse-health-effects/

  • Java 的 Tensorflow API
    https://tensorflow.google.cn/install/lang_java

  • 联邦学习
    https://tensorflow.google.cn/federated/federated_learning

  • HDR
    https://www.learnopencv.com/high-dynamic-range-hdr-imaging-using-opencv-cpp-python/

  • 此处
    https://github.com/android/camera-samples/tree/master/HdrViewfinder

  • VisionAir 数据集
    https://vision-air.github.io/feature.html

  • 中央污染控制委员会
    http://moef.gov.in/about-the-ministry/organisations-institutions/boards/central-pollution-control-board/

  • AirVeda
    https://www.airveda.com/

  • 这里 / 博客
    https://medium.com/visionair/visionair-using-federated-learning-to-improve-model-performance-on-android-11c6c8014cf4

  • 印度 AQI 分类标准
    http://www.indiaenvironmentportal.org.in/files/file/Air%20Quality%20Index.pdf

  • 本篇论文
    https://arxiv.org/abs/1602.05629

  • 网站
    https://vision-air.github.io/


TF & PyTorch学习群

学习交流TensorFlow、PyTorch深度学习框架的使用,欢迎加入52CV-TF & PyTorch群,扫码添加CV君拉你入群,如已为CV君其他账号好友请直接私信,

请务必注明:框架):

喜欢在QQ交流的童鞋可以加52CV官方QQ群:805388940

(不会时时在线,如果没能及时通过还请见谅)


长按关注我爱计算机视觉

你可能感兴趣的:(管天管地管空气!谷歌探索用CV估算空气质量)