Press "Enter" to skip to content

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

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

 

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

 

如下图示:

 

 

语义分割示例

 

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

 

十分重要且要注意的是,同一类的实例并不会分开,模型只关心像素的类别。如图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文件夹中并运行以下命令:

 

<span>http-server -c1 –cors .</span>

 

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

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注