图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

简介:

近年来,卷积神经网络(CNN)以其局部权值共享的特殊结构在语音识别和图像处理等方面得到了快速发展,特别是大型图像处理方面,更是表现出色,逐渐成为了行业内一个重要的技术选择。

不过,好用并不代表万能。这里雷锋网从一个卫星图像分析的具体实例出发,介绍了CNN建模和本地拉普拉斯滤波这两种分析技术的效果对比,最终我们发现,本地拉普拉斯滤波的效果反而更好。

  卷积神经网络

为了从卫星图像中分析和评估一项自然灾害造成的损失,首先需要得到相关地理区域实时的高分辨率的卫星图像,这是进行后续所有分析的数据基础。目前,除了Google Earth之外,最方便也最经济的数据来源就是OSM(OpenStreetMap)开源地图计划。该计划于2004年在美国创立,类似于维基百科,鼓励全球用户自由无障碍地分享和使用地理位置数据。

由于OSM提供的是矢量数据(Vector Data),为了便于空间分析和地表模拟,因此需要利用GDAL(Geospatial Data Abstraction Library)库中的 gdal_rasterize 工具将其转化为栅格数据(Raster Data)。

雷锋网注:矢量数据和栅格数据都是地理信息系统(GIS)中常见的分析模型。其中栅格结构是以规则的阵列来表示空间地物或现象分布的数据组织,组织中的每个数据表示地物或现象的非几何属性特征。特点是属性表现明显,便于空间分析和地表模拟,但定位信息隐含。而矢量数据结构是通过记录坐标的方式尽可能精确地表示点、线和多边形等地理实体,坐标空间设为连续,允许任意位置、长度和面积的精确定义。特点是定位信息明确,但属性信息隐含。

得到栅格数据之后,下一步是利用Caffe开源框架和CNN模型对系统进行训练。如图所示为CNN模型的一种参数设置。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

CNN模型的一种参数设置

利用大量数据训练得到的卷积神经网络模型处理灾后的图像,识别出的受灾房屋情况如图所示(图中白色色块代表房屋,具体可对比后面拉普拉斯滤波的处理结果)。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

CNN的分析结果,左图为灾前的图像,右图为灾后的图像

  拉普拉斯滤波

另一种方式是跨过GDAL转换,利用拉布拉斯滤波直接在矢量数据的基础上进行分析。

具体方法是:对比灾前和灾后两张图像,识别房屋的变化和两个图像的重叠部分,从而对受灾程度做出评估。本例中将对比阈值设为10%,即如果灾后图像中某个房屋的面积小于灾前面积的10%,那么就判定这一房屋已经被损毁。

需要注意的是,这里用到了两个重要的滤波器。一个是拉普拉斯滤波,作用是识别出图像中所有突出的不平整的部分(这里即所有的房屋轮廓),然后将其标记并绘制出来。另一个是设置为10%的“噪声”滤波,即对比灾前和灾后的图像,按照10%的阈值过滤出受灾的房屋。

相比CNN的方法,这里用到了该问题的一个独特属性,即房屋总是高于地面的,而且利用多边形方块可以清晰地标出其轮廓。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

拉普拉斯滤波模型

如图所示为 Matlab 建模的本地拉普拉斯滤波窗口,其中“img”变量为包含4个通道的原始图像,其中除了RGB三原色通道外,还有一个额外的 Alpha 通道,用来标明每个像素点的灰度信息。而变量“img1”是与“img”完全相同的图像,只是被滤除了 Alpha 通道。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

拉普拉斯滤波结果,红色色块为房屋

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

OpenCV滤波模型

如图所示是利用OpenCV开源计算机视觉库实现的第二个滤波器,以及滤波结果,可以看到受灾房屋被清晰地滤出了(相对CNN来说)。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

OpenCV滤波结果

如图所示为两个滤波器的作用效果。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

两个滤波器的综合作用结果

在输出结论前,还需要将此时的滤波结果与灾前图像进行最后的对比,用14%的面积阈值判定最终的受灾房屋情况,以避免此前计算中引入的误差。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

14%面积的阈值判定

如图所示,其中黄色为拉普拉斯滤波的结果,绿色为灾前图像。

识别出受损房屋之后,借助灾前OSM数据库的帮助,还可以通过QGIS工具方便地导出每间受损房屋的地址列表信息。具体步骤是:首先将灾前OSM数据导入QGIS平台最为底层信息,然后导入之前的分析结果,通过对比得到受损房屋的具体位置,然后导入一份XML格式的拓扑结构说明文件,接着利用SpatiaLite数据库管理平台就能根据需要导出一份具体房屋和地址相对应的列表信息。

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

利用 QGIS 和 SpatiaLite 导出地址列表

最终对比发现,以CNN技术为核心的受灾房屋识别准确率只有78%,而拉布拉斯滤波则高达96.3%。另外,拉布拉斯滤波的这一优势在灾前建筑的识别上也得到了延续,其正常建筑的识别准确率高达97.9%,而相比之下CNN只有93%。到这里结论已经很明显了:基于平整度识别的拉普拉斯滤波最终效果要优于基于大数据训练的CNN卷积神经网络。

需要指出的是,上文提到的拉普拉斯滤波法的重要意义并不局限于其技术实现本身,这种根据特殊问题采取特殊处理方法的应对策略,也同样值得我们思考。

来源:medium,由雷锋网(公众号:雷锋网)编译


本文作者:恒亮


本文转自雷锋网禁止二次转载,原文链接

相关文章
|
3天前
|
机器学习/深度学习 自然语言处理 自动驾驶
CNN的魅力:探索卷积神经网络的无限可能
卷积神经网络(Convolutional Neural Networks, CNN)作为人工智能的重要分支,在图像识别、自然语言处理、医疗诊断及自动驾驶等领域展现了卓越性能。本文将介绍CNN的起源、独特优势及其广泛应用,并通过具体代码示例展示如何使用TensorFlow和Keras构建和训练CNN模型。
|
3天前
|
机器学习/深度学习 数据采集 数据可视化
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。
|
4天前
|
编解码 人工智能 文件存储
卷积神经网络架构:EfficientNet结构的特点
EfficientNet是一种高效的卷积神经网络架构,它通过系统化的方法来提升模型的性能和效率。
10 1
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出卷积神经网络(CNN)的奥秘
【9月更文挑战第3天】在人工智能的浪潮中,卷积神经网络(CNN)无疑是最耀眼的明星之一。本文将通过浅显易懂的语言,带你一探CNN的核心原理和应用实例。从图像处理到自然语言处理,CNN如何改变我们对数据的解读方式?让我们一起走进CNN的世界,探索它的魅力所在。
|
3天前
|
机器学习/深度学习 人工智能 监控
深度学习浪潮中的轻舟:探索卷积神经网络的奥秘
在这个数据泛滥的时代,深度学习如同一艘巨轮,在知识的海洋中破浪前行。然而,在这艘巨轮上,有一个小小的角落常常被人忽视—那就是卷积神经网络(CNN)。本文将带领读者一探究竟,从CNN的核心概念到其在实际中的应用,我们将用通俗易懂的语言,揭开这一技术神秘面纱,让每一位对深度学习感兴趣的朋友都能轻松理解并应用CNN。
11 0
|
4天前
|
机器学习/深度学习 数据采集 算法
图像处理神经网络数据预处理方法
图像预处理步骤对于图像处理神经网络至关重要。这些步骤不仅保证了数据的一致性和质量,还可以通过数据增强等技术提高模型的泛化能力,从而提升模型的整体性能。每一步骤的选择和应用都基于具体任务和数据集的特性,并在模型训练和测试过程中起到关键作用。
12 0
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
1月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
33 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码