- 基本结构是逐点卷积(11卷积核)进行通道数上升,33卷积层进行特征提取,最后逐点卷积进行通道数下降,获得最终的通道数。
- 残差结构,如果输入输出特征图通道数,尺寸均未发生改变,则直接进行残差链接,否则对输入特征使用一个卷积层处理为与输出相同的形状后进行残差链接
- resnet结构每个layer都包含若干个上述残差块,但是每个layer中只有第一个残差块负责对特征图进行下采样及通道数变更(即如果通过这个layer后特征图被下采样两倍,那这个下采样一定发生在此layer的第一个残差块的3*3卷积层这里)
- 以3 512 512的rgb图像为例,resnet50在第234个layer会发生下采样
x = self.conv1(x) # k=7 s=2 p=3下采样两倍
x = self.bn1(x)
feat1 = self.relu(x)
feat1(64,256,256)
x = self.maxpool(feat1)
feat2 = self.layer1(x) # layer2不进行下采样,下采样发生在上面的最大值池化
feat2(256,128,128)
feat3 = self.layer2(feat2)
feat3(512,64,64)
feat4 = self.layer3(feat3)
feat4(1024,32,32)
feat5 = self.layer4(feat4)
feat5(2048,16,16)
- 之后对这五个特征图进行特征融合
以输入为3,600,600为例
特征将融合4次,融合后的特征会经过unetUp层进行处理,此层先对inputs2进行下采样与input1的尺寸保持一致,之后两个特征层在通道维进行堆叠(这里是堆叠,resnet中残差结构是输入输出特征图相加),堆叠后经过两个不改变尺寸的3*3卷积进行通道数调整即可。
- 定义一些超参数,定义了4个unetUp层的输入输出通道数
in_filters = [192, 512, 1024, 3072]
out_filters = [64, 128, 256, 512]
up4 = self.up_concat4(feat4, feat5)
特征图五上采样两倍,与特征图4混合特征形状为(3072,32,32)
所以concat4的input_size为3072,输出形状为(512, 32, 32)
up3 = self.up_concat3(feat3, up4)
up4上采样两倍,与特征图3混合特征形状为(1024,64,64)
所以concat3的input_size为1024,输出形状为(256, 64, 64)
up2 = self.up_concat2(feat2, up3)
up3上采样两倍,与特征图3混合特征形状为(512,128,128)
所以concat2的input_size为512,输出形状为(128, 128, 128)
up1 = self.up_concat1(feat1, up2)
up2上采样两倍,与特征图3混合特征形状为(192,256,256)
所以concat1的input_size为192,输出形状为(64, 256,256)
if self.up_conv != None:
up1 = self.up_conv(up1)
最后再进行一次二倍上采样还原回输入图片的尺寸(64,512,512)
至此特征图up1尺寸与输入图片的尺寸完全相同,64相当于对原图的每个像素点获得了64位的特征向量
- 此网络是以mobilenetv2为基础搭建的语义分隔框架,其基本结构是InvertedResidual,与残差块相似,也是逐点卷积加3*3卷积加逐点卷积,如果进行下采样,这个下采样过程也发生在3*3卷积层,区别在于,3*3卷积层采用分层卷积,成倍缩减了参数量,且只有在输入输出特征图通道数与尺寸完全一样时才采用残差链接
- 原始的mobilenetv2
与resnet相似,以(512 512 3)输入图像为例
512, 512, 3 -> 256, 256, 32走来先获取初始特征图
self.features = [conv_bn(3, input_channel, 2)]
后续有七个layer
n代表这组有几个InvertedResidual
s表示在组的第一个InvertedResidual是否对特征图尺寸进行2倍缩放(一组中只有第一个InvertedResidual会缩放特征图,其他的都会保证输入输出特征图尺寸不发生改变)
c表示的是这组输出特征层的通道数发生改变(一组中只有第一个InvertedResidual会改变,其他的都会保证输入输出通道数不发生改变)
(因此一组中只有第一个InvertedResidual没有残差链接,其他的都有残差链接)
t表示的是这组中的所有InvertedResidual是否有通道数上升的过程,即expand_ratio参数
t, c, n, s
[1, 16, 1, 1], # 256, 256, 32 -> 256, 256, 16
[6, 24, 2, 2], # 256, 256, 16 -> 128, 128, 24 2
[6, 32, 3, 2], # 128, 128, 24 -> 64, 64, 32 4
[6, 64, 4, 2], # 64, 64, 32 -> 32, 32, 64 7
[6, 96, 3, 1], # 32, 32, 64 -> 32, 32, 96
[6, 160, 3, 2], # 32, 32, 96 -> 16, 16, 160 14
[6, 320, 1, 1], # 16, 16, 160 -> 16, 16, 320
2 4 7 14指的是在第2,4,7,14个InvertedResidual块时stride=2,特征图被下采样
- 在实际用于deeplabv3+时,会根据实际情况对mobilnetv2进行调整
原本mobilnet会在开始时进行一次下采样,后续第2,4,7,14个InvertedResidual块会进行下采样,如果下采样8倍,则只需三次,那么会从第7个块开始对后续的所有块进行调整,让其不再进行下采样。
具体是使用_nostride_dilate对块进行调整,调整后
前7个块的第二个卷积层都是普通分层卷积,其中第2第4块执行下采样s=2
第8到第14个块的第二个卷积层是dilation=2的分层空洞卷积
第15到最后的第二个卷积层是dilation=4的分层空洞卷积
取出第2个InvertedResidual的输出作为浅层特征low_level_features,这个浅层特征相对于输入图片被下采样4次,最后一个InvertedResidual输出的特征为深层特征记为x
- 对于深层特征边,会使用不同空洞率的空洞卷积及池化操作并行得到五个特征层,这五个特征层将有不同的感受野,将其cat后用逐点卷积进行特征融合
- 深层卷积经过ASPP进行空洞卷积特征提取后与浅层特征再进行特征融合,之后经过分类头,再上采样到输入图像的尺寸即完成了对每个像素点的分类。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/63895.html