Caffe实现上采样(upsample)方法总结

更新时间:2023-05-15 19:04:56 阅读: 评论:0

Caffe实现上采样(upsample)⽅法总结
引⾔
CNN的下采样(subsample)在⼏乎所有的模型结构中都会出现,⽐如stride>1的卷积操作,pooling操作,都会减少特征图的长宽,起到下采样的效果。与之相对的就是上采样(upsample)操作了,顾名思义,上采样在CNN模型中的作⽤上增⼤特征图的长宽,⽐如都变为原来的2倍。上采样在模型构建中并不像下采样那么频繁被使⽤,⼀般情况下,会在下⾯⼏个应⽤中⽤到上采样操作:
2.图像⽣成任务,⽐如GAN,AVE等,也需要还原到原始输⼊图像的尺⼨;
3N可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最⼤,即可视化哪些特征是卷积操作提取出来的;
那么在Caffe中,都有哪些上采样操作呢?
转置卷积
原理
转置卷积⼜叫反卷积,及对常规卷积操作的⼀种逆运算,在这⾥我们不清晰说反卷积的原理,只是从输⼊输出尺⼨⽅⾯说明如何实现上采样的。
⽐如⼀个尺⼨的特征图(蓝⾊),⽤尺⼨的卷积核,以stride=1做卷积操作,并且不做padding,那么就会得到尺⼨为的特
征图(绿⾊)。
上⾯对应的反卷积过程是,将尺⼨的特征图padding到(蓝⾊),⽤尺⼨的卷积核,以stride=1做反卷积操作,那么就会得到尺⼨为
的特征图(绿⾊)。
⼀个尺⼨的特征图(蓝⾊),padding到,⽤尺⼨的卷积核,以stride=2做卷积操作,那么就会得到尺⼨为的特征图
(绿⾊)。
上⾯对应的反卷积过程是,将尺⼨的特征图padding到(蓝⾊),⽤尺⼨的卷积核,以stride=1做反卷积操作,那么就会得到尺⼨为的特征图(绿⾊)。
需要注意的地⽅是,stride=2对应的反卷积,stride并不等于2,⽽是在padding的策略上有所区别。
实现
转置卷积在原版Caffe中就有对应的实现,就是Deconvlution layer,它具体由⽂件实现,继承⾃BaConvlutionLayer类。
4×43×32×22×26×63×34×45×57×73×33×33×37×73×35×5
应⽤
转置卷积可以像下⾯这样使⽤:
layer {
name: "upscore"
type: "Deconvolution"
bottom: "score_fr"
top: "upscore"
param {
lr_mult: 0
}
convolution_param {
num_output: 40
bias_term: fal
kernel_size: 64
stride: 32
}
}
在全卷积⽹络(FCN)中,就是⽤转置卷积实现上采样操作,⽐如FCN使⽤了下采样经过5次卷积(和pooling)以后,图像的分辨率依次缩⼩了2,4,8,16,32倍。对于最后⼀层的输出图像,需要进⾏32倍的上采样,以得到原图⼀样的⼤⼩。
FCN具体的⽹络模型可以参考。
UnMaxPooling
原理
免费学英语UnMaxPoolling,顾名思义就是max pooling的逆操作,我们都知道,max pooling是在池化核中选择最⼤的那个数作为池化后的结果,⽽这个数必然会对应⼀个原特征图位置的索引,这个索引就被后续⽤来做反maxpool操作,也就是将需要上采样的特征图,根据索引,放到上采样后的特征图的对应位置上去,其余的地⽅都补上0。
实现如何写辞职信
UnMaxPoolling的实现在原版caffe中是没有的,需要加个⾃定义的layer,这个layer已经有⼈实现了,它被⽤于SegNet⽹络中,叫做。如果⼤家仔细看看实现的源码的话,就会发现这个layer实现起来还是很容易的,因为它需要的索引
const Dtype* bottom_mask_data = bottom[1]->cpu_data()
在caffe的原始代码中就已经实现好了,就在中:
ca PoolingParameter_PoolMethod_MAX:
// Initialize
//如果使⽤top_mask的话,max pooling的第⼆个top,就是mask    if (u_top_mask) {
top_mask = top[1]->mutable_cpu_data();
caffe_t(top_count, Dtype(-1), top_mask);
} el {
mask = max_idx_.mutable_cpu_data();
caffe_t(top_count, -1, mask);
}
caffe_t(top_count, Dtype(-FLT_MAX), top_data);
// The main loop
for (int n = 0; n < bottom[0]->num(); ++n) {
for (int c = 0; c < channels_; ++c) {
cang
for (int ph = 0; ph < pooled_height_; ++ph) {
for (int pw = 0; pw < pooled_width_; ++pw) {
int hstart = ph * stride_h_ - pad_h_;
int wstart = pw * stride_w_ - pad_w_;
int hend = min(hstart + kernel_h_, height_);
int wend = min(wstart + kernel_w_, width_);
hstart = max(hstart, 0);
wstart = max(wstart, 0);
const int pool_index = ph * pooled_width_ + pw;
for (int h = hstart; h < hend; ++h) {
for (int w = wstart; w < wend; ++w) {
const int index = h * width_ + w;
if (bottom_data[index] > top_data[pool_index]) {
top_data[pool_index] = bottom_data[index];
if (u_top_mask) {
top_mask[pool_index] = static_cast<Dtype>(index);                  } el {
mask[pool_index] = index;
}
leneta
}
}
新视野大学英语视听说教程4第二版答案}
}
}
// compute offt
bottom_data += bottom[0]->offt(0, 1);
top_data += top[0]->offt(0, 1);
词典英语if (u_top_mask) {
top_mask += top[0]->offt(0, 1);
} el {
mask += top[0]->offt(0, 1);
}
}
}
应⽤
UnMaxPooling可以像下⾯这样使⽤:
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
weapontop: "pool1_mask"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
put on
}
六级多少分算过layer {
name: "upsample1"
type: "Upsample"
bottom: "conv_decode2"
bottom: "pool1_mask"
top: "upsample1"
upsample_param {
scale: 2
}
}
可以看到,这个Upsample就是UnMaxPooling,它有两个bottom,分别是需要上采样的特征图“conv_decode2”和下采样时的索
引“pool1_mask”;⽽这个索引就是pooling时得到的。
前⾯提到了,SegNet中使⽤的就是UnMaxPooling的上采样机制,它同样是个⽤于图像分割的⽹络。
线性插值
原理
⼀张图像做resize的时候,都是使⽤插值算法来完成的,在这⾥常见的插值算法就不过多介绍了,⼤家可以参考。
那么显然,特征图也可以使⽤插值算法来进⾏上采样的,下⾯这种⽅法就是使⽤线性插值⽅法的上采样机制,原理与图像缩放中的线性插值完全相同。
实现
线性插值的实现在原版caffe中同样是没有的,这个⾃定义的layer叫做。
应⽤
线性插值层可以像下⾯这样使⽤:
layers {
bottom: "label"
top: "label_shrink"
name: "label_shrink"
type: INTERP
interp_param {
shrink_factor: 8
pad_beg: -1
pad_end: 0caucasian
}
}
线性插值层被⽤于系列⽹络中,同样⽤于图像分割。

本文发布于:2023-05-15 19:04:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/109699.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:卷积   采样   操作   特征   实现   图像   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图