首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用TensorFlow.js在浏览器中进行实时语义分割 | MixLab算法系列

用TensorFlow.js在浏览器中进行实时语义分割 | MixLab算法系列

作者头像
mixlab
发布2020-08-21 16:47:14
8020
发布2020-08-21 16:47:14
举报

语义分割是监测和描绘图像中每个感兴趣对象的问题

当前,有几种方法可以解决此问题并输出结果

如下图示:

语义分割示例

这种分割是对图像中的每个像素进行预测,也称为密集预测。

十分重要且要注意的是,同一类的实例并不会分开,模型只关心像素的类别。如图1所示,该方法可以说在某些位置有椅子,但无法区分它们。

这项技术的主要应用之一是在自动驾驶汽车中,汽车需要了解他们的环境。语义分割能够赋予场景一个意义,并将汽车放在实际的情景中,指示车道位置,一些障碍物,并识别其他汽车。

自动驾驶的语义分割示例

因此,在城市街道场景中应用语义分割算法是当今计算机视觉的主要挑战之一。

评估模型性能的流行数据集是Cityscapes,它包含来自50个不同城市的30个课程,这些课程因季节和小麦状况而异。

图2显示了随着时间的推移,不同的算法如何在此数据集中达到的最新水平。

Cityscapes数据集上的语义分割

在该项目中,使用了中等级别的模型,该模型可以提供合理的精度并可以实时高效的运行

RefineNet于2016年底由阿德莱德大学研究并首次引入,于2018年转换为轻型模型,从而可以进行实时推理。

TensorFlow.js

TensorFlow是一个开源库,广泛用于创建机器学习模型,主要用于python项目中。

Tensorflow.js的出现允许在浏览器中进行相同的模型开发,训练和测试。

在浏览器中运行ML意味着,从用户的角度来看,无需安装任何库或驱动程序。只需打开一个网页,该程序即可运行。

此外,它还可以与GPU一起加速运行。

TensorFlow.js会自动支持WebGL,并在有GPU时在后台加速代码。用户还可以从移动设备端打开网页,在这种情况下,模型可以利用诸如陀螺仪或加速度计等传感器数据。

最后,所有数据都保留在客户端上,从而使TensorFlow.js可用于低延迟推断以及涉及隐私保护应用程序。

权重文件

TensorFlow.js层格式是一个目录,其中包含一个model.json文件和一组二进制形式的分片权重文件。

该model.json文件既包含模型拓扑(也称为“体系结构”或“图形”:层及其连接方式的说明)和权重文件的清单。

JSON权重已提供到Light-Weight RefineNet存储库中,但是也可以将PyTorch或Keras模型转换为TensorFlow.js格式。

TensorFlow.js模型

Tensorflow.js模型必须通过URL进行服务才能在javascript中加载。

如前所述,该模型基于二进制格式的主JSON文件和分片权重文件。这个思路是创建一个HTTP服务器,该模型将在允许请求的URL中使模型可用,并作为REST API线程化。

加载模型时,TensorFlow.js将执行以下请求:

GET /model.jsonGET /group1-shard1of4GET /group1-shard2of4GET /group1-shard3of4GET /group1-shard4of4

1、HTTP服务器可以使用下面的命令来安装:

npm-install http-server -g

2、一旦安装了程序,就可以将模型放到weights文件夹中并运行以下命令:

http-server -c1 --cors .

3、然后,以下代码将加载tensorflow.js模型

async function load_model() {
const model = await tf.loadLayersModel("http://127.0.0.1:8080/model.json");
return model;
}

做出预测

加载模型后,进行预测的过程将非常简单。

您必须加载框架并使用model.predict(frame)命令从模型中获取预测,返回的是必须转换和呈现的PASCAL VOC格式的框架,可以在项目存储库中找到执行此操作的代码。

作者决定创建一个简单的应用程序,该应用程序从网络摄像头读取视频流,并生成语义分段。

如下例所示:

精简的浏览器语义分割示例

为了在现实的场景中测试该项目,作者在手机上下载了一些图片以测试算法,下面的视频显示了在浏览器中实时运行的应用程序:

浏览器中的实时语义分段

该应用程序的延迟很小,这主要是由于帧重建时间所致,总体效果还不错。

TensorFlow.js展现出了许多可能性,从而使得需要功能强大的计算机和复杂库的机器学习模型可以在浏览器中平稳运行,并且使用的计算资源很少。

运行该项目的所有源代码和指令都可以在GitHub上找到。

GitHub地址:

https://github.com/hugozanini/realtime-semantic-segmentation

谢谢阅读 :)

欢迎一起来探索未知世界

添加小编微信,邀您加入

前端智能跨界社群

Mixlab

Shadow说

我想可能也会有很多跟我一样,是想要在设计跟技术之间找平衡的人……

将设计和技术融合,是我08年本科时就有的念头,也是在自学中逐渐看到技术思维跟设计思维的共通之处的。

2015年,开设自媒体;

2018年,有了无界社区Mixlab。

想和大家一起迎面未知和无限的可能

Enable Infinite Possibilities for Everyone

? 更多资料请查阅,Mix+ 人工智能专刊

每期由mixlab社区精选、收录人工智能的相关内容。包括AI产品、AI技术、AI场景、AI投资事件、AI的思维方式等。MIX的主题包括:AR、VR、计算设计、计算广告、智能设计、智能写作、虚拟偶像等。

付费加入星球后,即可免费加入科技前沿外刊群:《新科学家杂志》、《英国金融时报》、《华尔街日报》、《经济学人》、《纽约时报》、《泰晤士报》等当日最新外刊。

请点击右下角

在看

在看

在看

:)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无界社区mixlab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档