DANet全称为Dual Attention Network,是一种用于图像语义分割的深度神经网络模型。DANet利用了空间注意力机制和通道注意力机制来捕获图像中的空间和通道信息,从而提高了分割的准确性。
在DANet中,空间注意力机制用于对每个像素点周围的上下文信息进行建模,以便更好地捕捉物体的形状和边缘信息。而通道注意力机制则用于对每个特征通道进行加权,以便更好地挖掘有用的特征信息。DANet将这两种注意力机制结合起来,形成了一种双重注意力机制,可以更好地处理图像中的复杂语义信息,从而提高了分割的精度和鲁棒性。
双重注意网络:
提出了一个双重注意网络(DANet)来捕捉空间和通道维度中的全局特征依赖关系
注意力模块:
建议使用位置注意力模块来学习特征的空间相互依赖性,并设计通道注意力模块来模拟通道相互依赖性。通过在局部特征上建模丰富的上下文依赖关系,显著改善了分割结果
SOTA:
在三个数据集Cityscapes, PASCAL Context和COCO Stuff上实现了state-of-the-art的结果
(2)工作梳理
Cityscapes是一个用于城市场景分割的数据集,包括5000张高分辨率图像,每张图像的分辨率为1024x2048。
图像的大小调整:将图像大小调整为网络所需的大小,例如512x1024。
图像的裁剪:裁剪图像,以便只保留感兴趣的区域,例如车道线、行人等。
图像的增强:对图像进行一些增强操作,例如旋转、缩放、翻转等,以便增加数据量和模型的鲁棒性。
在进行训练之前,需要搭建DANet模型,并对其进行训练。具体来说,需要进行以下操作:
搭建DANet模型:根据论文中的结构图,搭建DANet模型,并定义损失函数和优化器。
模型的训练:使用训练集对模型进行训练,并使用验证集对模型进行验证和调整。
论文中该模型和其他主流模型的比对如图所示:
当然由于算力问题,我并没有像原论文那样迭代了很多次,我只迭代了20次左右,模型效果不如原论文效果。
主要代码
import io
import os
import subprocess
from setuptools import setup, find_packages
cwd = os.path.dirname(os.path.abspath(__file__))
version = '1.2.2'
try:
if not os.getenv('RELEASE'):
from datetime import date
today = date.today()
day = today.strftime("b%Y%m%d")
version += day
except Exception:
pass
def create_version_file():
global version, cwd
print('-- Building version ' + version)
version_path = os.path.join(cwd, 'encoding', 'version.py')
with open(version_path, 'w') as f:
f.write('"""This is encoding version file."""\n')
f.write("__version__ = '{}'\n".format(version))
requirements = [
'numpy',
'tqdm',
'nose',
'portalocker',
'torch>=1.4.0',
'torchvision>=0.5.0',
'Pillow',
'scipy',
'requests',
]
if __name__ == '__main__':
create_version_file()
setup(
name="torch-encoding",
version=version,
author="Hang Zhang",
author_email="[email protected]",
url="//",
description="PyTorch Encoding Package",
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
license='MIT',
install_requires=requirements,
packages=find_packages(exclude=["tests", "experiments"]),
package_data={ 'encoding': [
'LICENSE',
'lib/cpu/*.h',
'lib/cpu/*.cpp',
'lib/gpu/*.h',
'lib/gpu/*.cpp',
'lib/gpu/*.cu',
]},
)
(4)总结
数据集:
能够对特定的数据集进行处理和分析,对于相关的特征处理也更加的得当。
Intel加速套件
使用Intel MKL-DNN库:MKL-DNN库是Intel开发的针对深度学习计算加速的库,可以加速卷积、池化等操作。
掌握了DAnet网络原理
在语义分割任务中具有高效率和高精度:Danet结合了全卷积网络和空间金字塔池化模块的优点,可以同时实现高效率和高精度的语义分割。
总结:在语义分割任务中具有高效率和高精度:Danet结合了全卷积网络和空间金字塔池化模块的优点,可以同时实现高效率和高精度的语义分割。在本次实验中实现了较好的分割效果。