AH-Net:三维各向异性混合网络:将二维图像的卷积特征转化为三维各向异性体

本文主要是介绍AH-Net:三维各向异性混合网络:将二维图像的卷积特征转化为三维各向异性体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章概要

文章先是在开头花了一半的篇幅介绍了2D丢失了层间信息、3D训练受制于设备和LSTM的困难。然后介绍他们的AH-Net可以从二维图像中学习到的卷积特征转化为三维各向异性体,并在两个数据及上表现出了state-of-the-art的成绩。

Introduction

直接利用3D信息存在着一些困难,主要体现在如下几个方面:

  1. 较小的3×3×3核可能很难从三维信息中学习有用的特征,因为每个维度的信息密度不同
  2. 理论上,与二维网络相比,三维网络需要更多的特征。三维网络的性能受到GPU内存的限制,限制了网络的宽度和深度
  3. 不像现在可以利用数百万张2D图像预训练,3D任务大多需要从头开始训练,此缺乏大型的三维数据集。

AH-Net

AH-Net使用预先训练的权重初始化,并使用多个2D图像切片作为输入,类似于伪RGB图片,组成多通道。该二维网络的特征编码器通过对二维核进行一维扩展,将其转化为三维网络,然后加入一个特征解码器子网络来提取三维上下文,卷积核有3x3x1和1x1x3两种。在输出之前,经过一个金字塔池化模块(详见SPP-Net)来提取多尺度特征。

image

由于是2D的模型,所以AH-Net也可以利用ImageNet的庞大数据集进行预训练,这样既易于训练,又易于推广。

AH-Net由一个特征编码器和一个特征解码器组成.从二维网络转换而来的编码器,是为了从高分辨率的二维切片中提取深度表示而设计的。由各向异性卷积的密集连接块构成的译码器负责利用3D上下文并保持两层间的一致性。

网络训练分两个阶段进行:学习编码器;然后添加3D解码器,并在编码器参数锁定的情况下进行精细调整。这里需要说明的是文中LOSS函数用的是Focal Loss,其之前一直被用在目标检测中。

Learning a multi-channel 2D feature encoder

作者训练了一个类似于 Large Kernel
Matters – Improve Semantic Segmentation by Global Convolutional Network
中提出的结构的2D多通道全局卷积网络(mc-gcn)来提取不同分辨率的二维片内特征。主要框架是ResNet50,采用了ImageNet数据集作为预训练,然后用从3d卷中提取的2D图像切片对网络进行精细调整。这个网络的输入是三个相邻的slice(类似像RGB通道一样处理)。因此,ResNet50的整个体系结构保持不变。多通道2D输入可以使2D网络在早期融合片间上下文。

image

GCN模块通过将一个大的K×K卷积核分解成两个一维核来模拟它,包含不同顺序排列的一维核的两个分支通过求和进行合并。每个Refine包含两个3×3的卷积,中间有一个Relu激活。每个Refine的输入也被添加到它的输出中,以形成一个残差连接。

Transferring the learned 2D net to 3D AH-Net

在二维MC-GCN网络收敛后,提取其编码器的参数,并将其传输到AH-net的相应编码器层。2D MC-GCN的译码器部分被丢弃,而解码部分则被丢弃。我们为AH-net设计了一个新的解码器,它由多层密集连接的块组成,然后是金字塔池化模块。

image

卷积张量从二维到三维的转换如下图所示,它的目的是在AH-net的编码器部分对3D卷逐片进行二维卷积,并且是将三个相邻的切片进行卷积。

image

然而,在三维空间中,Conv 1×1×1/(2,2,2)在z维上的每一步都跳过一个slice, 当图像只有少量的slice沿z 轴时,特别是用于检测任务的,这将丢失重要的信息。因此,作者使用Conv 1×1×1/(2,2,1)和MaxPool 1×1×2/(1,1,2)降采样来提取ResNet块之间的三维特征映射。

如上图中AH-Net ResNet Block所示,伴随着转换后的编码器,增加了三维解码器子网络,以利用三维图像上下文。在译码器中,具有Conv 1×1×1、Conv 3×3×1和Conv 1×1×3的卷积块。首先将特征传递到XY瓶颈块(不知道作者为什么称之为瓶颈块),Conv 3×3×1在两层Conv 1×1×1中间。然后输出到另一个中间为1×1×3的瓶颈块,并在转发到下一个块之前与其自身进行求和。这种卷积块将三维卷积分解为2D卷积和1D卷积。它首先使用2D卷积接收来自前几层的输入,保留了详细的2D特征,COV 1×1×3主要融合片内特征,使z维输出保持一致。

在预先训练的编码器和随机初始化的解码器上使用相同的学习速率来训练ah-net将使网络很难优化。为了训练3d AH-Net,首先锁定所有传输过来的参数,在优化过程中,只对译码器参数进行微调。然后,所有参数都可以一起微调。文中使用初始学习率0.0005对2D MCGCN进行微调。然后,在2D网络传输到3D后,将学习速率提高到0.001,对AH-Net进行微调,作者指出3D网络需要更大的学习速率才能在合理的时间内收敛。

文中Loss函数借鉴了Focal Loss,这个Loss函数与上面的金字塔池化一样,都是来自于何恺明大神的工作,他提出的这个损失函数,思路是希望那些hard examples对损失的贡献变大,使网络更倾向于从这些样本上学习。

F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) FL(p_t) = -\alpha_t(1-p_t)^\gamma log(p_t) FL(pt)=αt(1pt)γlog(pt)

而文中参考其,推出的损失函数为:

F F L ( y , y ^ ) = ( l n D ( y , y ^ ) l n D m a x ( y , y ^ ) ) γ D ( y , y ^ ) F_{FL}(y,\hat{y}) = (\frac{lnD(y,\hat{y})}{lnD_{max}(y,\hat{y})})^\gamma D(y,\hat{y}) FFL(y,y^)=(lnDmax(y,y^)lnD(y,y^))γD(y,y^)

其中函数D是L2损失所期望的最大数值,较大的γ值将使训练过程更多地关注在较难分类的区域上。当L2损失几乎不减时,用FL代替最初的L2损失。随着输出细节的逐步增加,训练损失可以在较长的时间内持续下降。

假设我们L2 Loss产生的最大数值为0.9,目前产生了两个loss分别为0.1和0.8,那么假设γ为2,则有

参考文献

  1. 本文讨论文章原文地址
  2. 本文涉及的Focal Loss原文地址

这篇关于AH-Net:三维各向异性混合网络:将二维图像的卷积特征转化为三维各向异性体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/195296

相关文章

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

poj2576(二维背包)

题意:n个人分成两组,两组人数只差小于1 , 并且体重只差最小 对于人数要求恰好装满,对于体重要求尽量多,一开始没做出来,看了下解题,按照自己的感觉写,然后a了 状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c[k]]+c[k]);其中i表示人数,j表示背包容量,k表示输入的体重的 代码如下: #include<iostream>#include<

hdu2159(二维背包)

这是我的第一道二维背包题,没想到自己一下子就A了,但是代码写的比较乱,下面的代码是我有重新修改的 状态转移:dp[i][j] = max(dp[i][j], dp[i-1][j-c[z]]+v[z]); 其中dp[i][j]表示,打了i个怪物,消耗j的耐力值,所得到的最大经验值 代码如下: #include<iostream>#include<algorithm>#include<

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上