问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

结合深度学习的街景绿视率分析:基于DeepLab V3+模型的技术详解

创作时间:
作者:
@小白创作中心

结合深度学习的街景绿视率分析:基于DeepLab V3+模型的技术详解

引用
CSDN
1.
https://m.blog.csdn.net/LFSJXS/article/details/140627236

绿视率,即人的视野中绿色所占的比重,是街景分析中常用的评价指标之一。相较于反映二维层面绿化情况的绿地率、绿化覆盖率、归一化植被指数(NDVI)等,绿视率能够从立体视野直观反映人对绿色空间的感知,可以更人性化地反映绿化环境质量。本文结合相关文献资料,主要介绍基于深度学习技术 DeepLab V3+模型算法的街道绿视率评价。

方法对比

1.人工调研提取法

将街景照片绿色部分进行手工划分计算街景中的绿色占比。该方法精度低、费时费力,无法应用于大区域的城市绿视率计算。

2.软件色彩处理法

通过分析街景中绿色像素的比例,将 RGB 转换为 HSV 空间,提取绿色部分的阈值用以表示绿视率。此类方法较人工调研提取法有所改进,但会将绿色招牌等不属于城市绿化的绿色部分计算在内,使得结果存在较大误差。

3.深度学习提取法

模拟人类的思考和学习能力,自动识别街景中的绿化要素,自动分类出城市街道空间的植被等元素,提升了绿视率识别的精度。目前常用的有PSPnet、DeepLab V3、DeepLab V3+、Fastrcnn、HSV色彩阈值5种算法。


从图中可以看出,在分割的精度上 DeepLab V3+相对于其他 4 种方法精度最高。

DeepLab V3+模型结构

在 DeeplabV3+中,加强特征提取网络可以分为两部分:

1.Encoder

在 Encoder 中,对压缩四次的初步有效特征层利用并行的 Atrous Convolution,分别用不同 rate 的 Atrous Convolution 进行特征提取后合并,再进行 1x1 卷积压缩特征。

2.Decoder

在 Decoder 中,对压缩两次的初步有效特征层利用 1x1 卷积调整通道数,再和空洞卷积后的有效特征层上采样的结果进行堆叠,完成堆叠后,进行两次深度可分离卷积块。Deeplab V3+保持了原来的空间卷积和 ASSP 层,增加了 Xception 模型,提高了图像特征采样的准确率。

分析过程

大致思路:获取研究区域内路网数据→街景点坐标→街景点全景图片→利用DeepLabV3+神经网络模型完成语义分割→通过 OpenCV 识别语义图,得到绿视率

1.街景图片获取

途径一:通过腾讯地图服务所提供的 API 接口获取位置点的相应街景图片。腾讯街景 API 服务可以提供完整的街景请求 URL 地址,并提供街景中所需要设置的完整的参数,包括位置,偏航角,俯仰角,场景 ID,图片尺寸。

途径二:利用谷歌街景地图收集静态图与全景视图。谷歌街景地图可以直接采集街道图像,并通过整合不同角度的街道图像创造出 360°的街道全景视图。

2.模型训练与绿视率计算(示例用 Google Colab 平台)

在 Google Colab 平台(https://colab.google/)上结合 CityScapes 数据集,用 Deeplab V3+卷积神经网络模型训练,将待分析的街景照片输入到网络中,经过卷积,池化等操作实现语义分割。

Demo 示例对比:

图为基于 deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024 语义分割结果。

图为基于 pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 语义分割结果

可以看到还是 deeplabv3plus 性能更优,例如在红色箭头处 pspnet 出现疏漏。

参考代码

1.语义分割

#使用 MIM 安装 MMCV 平台
!pip3 install openmim
!mim install mmengine
!mim install "mmcv>=2.0.0"
#从 source 安装 MMSegmentation 模块
!git clone https://github.com/open-mmlab/mmsegmentation.git
%cd mmsegmentation
!git checkout main
!pip install -e .

Example output: 1.0.0,检查版本

import mmseg
print(mmseg.version)
#下载 deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024 系列的 py 配置和 pth 权重文件
!mim download mmsegmentation --config
deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024 --dest .
#用 deeplabv3+模型训练 cityscapes 城市景观数据集,并对 demo.png 进行语义分割
!python demo/image_demo.py demo/demo.png
configs/deeplabv3plus/deeplabv3plus_r101-d8_4xb2-40k_cityscapes-512x1024.py
deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth --device cuda:0 --out-file Hresult.jpg

2.计算绿视率

为了实现绿视率的自动识别,通过使用 OpenCV 将上述过程中得到的语义图集进行分析,绿视率计算公式为:

图像中的所有绿化部分的像素记为𝑁𝑔, 𝑁为整张全景图的像素总数。𝑅𝐺为每张图片的绿视率结果。

参考代码(python 版):

import cv2
import numpy as np
import os

定义绿色范围(在 HSV 中)

lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])

待分析语义图所在的文件夹路径,可根据个人情况修改

pictures_folder = '/content/mmsegmentation/picture'

遍历该文件夹中的所有语义图

for filename in os.listdir(pictures_folder):
if filename.endswith('.png') or filename.endswith('.jpg'):

构建完整的语义图文件路径

picture_path = os.path.join(pictures_folder, filename)

读取语义图

picture = cv2.imread(picture_path)

将语义图转换为 HSV

hsv_picture = cv2.cvtColor(picture, cv2.COLOR_BGR2HSV)

创建绿色遮罩

green_mask = cv2.inRange(hsv_picture, lower_green, upper_green)

计算绿色像素数量

green_pixel_count = np.count_nonzero(green_mask)

计算总像素数量

total_pixel_count = picture.shape[0] * picture.shape[1]

计算绿视率

reen_ratio = green_pixel_count / total_pixel_count

#输出文件名和对应的绿视率结果
print(f"图片名称:{filename}")
print(f"绿视率:{green_ratio * 100:.2f}%")
print("- " * 100)

五、结果解读

将绿视率划分成以下 5 类:

绿视率 0% ~ 5%:绿化水平不及格

绿视率 5% ~15%:绿化水平较差

绿视率 15%~25%:绿化水平一般

绿视率 25%~35%:绿化水平良好

绿视率 大于 35%: 绿化水平优秀

还可通过 ArcGIS 等平台对分析结果进行可视化呈现,使得研究区内各街道绿化情况更直观。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号