caffe 关于Deconvolution的初始化注意事项

对于fcn,经常要使用到Deconvolution进行上采样。对于caffe使用者,使用Deconvolution上采样,其参数往往直接给定,不需要通过学习获得。

给定参数的方式很有意思,可以通过两种方式实现,但是这两种方式并非完全等价,各有各的价值。

第一种方式: 通过net_surgery给定,

这种方式最开始出现在FCN中。https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/voc-fcn32s/solve.py
代码如下:

import caffe
import surgery, scoreimport numpy as np
import os
import systry:import setproctitlesetproctitle.setproctitle(os.path.basename(os.getcwd()))
except:passweights = '../ilsvrc-nets/vgg16-fcn.caffemodel'# init
caffe.set_device(int(sys.argv[1]))
caffe.set_mode_gpu()solver = caffe.SGDSolver('solver.prototxt')
solver.net.copy_from(weights)# surgeries  (这里就是对于反卷积层的参数进行初始化)
interp_layers = [k for k in solver.net.params.keys() if 'up' in k]
surgery.interp(solver.net, interp_layers)# scoring
val = np.loadtxt('../data/segvalid11.txt', dtype=str)for _ in range(25):solver.step(4000)score.seg_tests(solver, False, val, layer='score')

上采样的函数:

 #  make a bilinear interpolation kerneldef upsample_filt(self,size):factor = (size + 1) // 2if size % 2 == 1:center = factor - 1else:center = factor - 0.5og = np.ogrid[:size, :size]return (1 - abs(og[0] - center) / factor) * \(1 - abs(og[1] - center) / factor)# set parameters s.t. deconvolutional layers compute bilinear interpolation# N.B. this is for deconvolution without groupsdef interp_surgery(self,net, layers):for l in layers:print lm, k, h, w = net.params[l][0].data.shape   #仅仅修改w,不需要修改bias,其为0print("deconv shape:\n")print m, k, h, w if m != k and k != 1:print 'input + output channels need to be the same or |output| == 1'raiseif h != w:print 'filters need to be square'raisefilt = self.upsample_filt(h)print(filt)net.params[l][0].data[range(m), range(k), :, :] = filt

第二种方式:直接在Deconvolution中给定参数weight_filler,即:

代码如下:

layer {name: "fc8_upsample"type: "Deconvolution"bottom: "fc8"top: "fc8_upsample"param {lr_mult: 0decay_mult: 0}param {lr_mult: 0decay_mult: 0}convolution_param {num_output: 1kernel_size: 16stride: 8pad: 3weight_filler {   # 这里相当于上面的直接赋值type: "bilinear"}}
}

weight_filler初始化成双线性就等价于直接按照上面的方式赋值。

看起来好像以上两种方法一样,但是实际上有不同。主要区别在对于num_output>1的情形。

比如对于一个输入是2个通道的map,希望对其进行上采样,自然我们希望分别对于map放大即可。如果使用Deconvolution,则shape大小为2,2,16,16(设其大小为16*16).不考虑bias项。

假设按照上面的方式初始化,则对于第一种方法,得到结果:
[0,0,:,:]:

[[ 0.00390625 0.01171875 0.01953125 0.02734375 0.03515625 0.04296875
0.05078125 0.05859375 0.05859375 0.05078125 0.04296875 0.03515625
0.02734375 0.01953125 0.01171875 0.00390625]
[ 0.01171875 0.03515625 0.05859375 0.08203125 0.10546875 0.12890625
0.15234375 0.17578125 0.17578125 0.15234375 0.12890625 0.10546875
0.08203125 0.05859375 0.03515625 0.01171875]
[ 0.01953125 0.05859375 0.09765625 0.13671875 0.17578125 0.21484375
0.25390625 0.29296875 0.29296875 0.25390625 0.21484375 0.17578125
0.13671875 0.09765625 0.05859375 0.01953125]
[ 0.02734375 0.08203125 0.13671875 0.19140625 0.24609375 0.30078125
0.35546875 0.41015625 0.41015625 0.35546875 0.30078125 0.24609375
0.19140625 0.13671875 0.08203125 0.02734375]
[ 0.03515625 0.10546875 0.17578125 0.24609375 0.31640625 0.38671875
0.45703125 0.52734375 0.52734375 0.45703125 0.38671875 0.31640625
0.24609375 0.17578125 0.10546875 0.03515625]
[ 0.04296875 0.12890625 0.21484375 0.30078125 0.38671875 0.47265625
0.55859375 0.64453125 0.64453125 0.55859375 0.47265625 0.38671875
0.30078125 0.21484375 0.12890625 0.04296875]
[ 0.05078125 0.15234375 0.25390625 0.35546875 0.45703125 0.55859375
0.66015625 0.76171875 0.76171875 0.66015625 0.55859375 0.45703125
0.35546875 0.25390625 0.15234375 0.05078125]
[ 0.05859375 0.17578125 0.29296875 0.41015625 0.52734375 0.64453125
0.76171875 0.87890625 0.87890625 0.76171875 0.64453125 0.52734375
0.41015625 0.29296875 0.17578125 0.05859375]
[ 0.05859375 0.17578125 0.29296875 0.41015625 0.52734375 0.64453125
0.76171875 0.87890625 0.87890625 0.76171875 0.64453125 0.52734375
0.41015625 0.29296875 0.17578125 0.05859375]
[ 0.05078125 0.15234375 0.25390625 0.35546875 0.45703125 0.55859375
0.66015625 0.76171875 0.76171875 0.66015625 0.55859375 0.45703125
0.35546875 0.25390625 0.15234375 0.05078125]
[ 0.04296875 0.12890625 0.21484375 0.30078125 0.38671875 0.47265625
0.55859375 0.64453125 0.64453125 0.55859375 0.47265625 0.38671875
0.30078125 0.21484375 0.12890625 0.04296875]
[ 0.03515625 0.10546875 0.17578125 0.24609375 0.31640625 0.38671875
0.45703125 0.52734375 0.52734375 0.45703125 0.38671875 0.31640625
0.24609375 0.17578125 0.10546875 0.03515625]
[ 0.02734375 0.08203125 0.13671875 0.19140625 0.24609375 0.30078125
0.35546875 0.41015625 0.41015625 0.35546875 0.30078125 0.24609375
0.19140625 0.13671875 0.08203125 0.02734375]
[ 0.01953125 0.05859375 0.09765625 0.13671875 0.17578125 0.21484375
0.25390625 0.29296875 0.29296875 0.25390625 0.21484375 0.17578125
0.13671875 0.09765625 0.05859375 0.01953125]
[ 0.01171875 0.03515625 0.05859375 0.08203125 0.10546875 0.12890625
0.15234375 0.17578125 0.17578125 0.15234375 0.12890625 0.10546875
0.08203125 0.05859375 0.03515625 0.01171875]
[ 0.00390625 0.01171875 0.01953125 0.02734375 0.03515625 0.04296875
0.05078125 0.05859375 0.05859375 0.05078125 0.04296875 0.03515625
0.02734375 0.01953125 0.01171875 0.00390625]]
[0,1,:,:]:

[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
[1,0,:,:]:

[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
[1,1,:,:]:

[[ 0.00390625 0.01171875 0.01953125 0.02734375 0.03515625 0.04296875
0.05078125 0.05859375 0.05859375 0.05078125 0.04296875 0.03515625
0.02734375 0.01953125 0.01171875 0.00390625]
[ 0.01171875 0.03515625 0.05859375 0.08203125 0.10546875 0.12890625
0.15234375 0.17578125 0.17578125 0.15234375 0.12890625 0.10546875
0.08203125 0.05859375 0.03515625 0.01171875]
[ 0.01953125 0.05859375 0.09765625 0.13671875 0.17578125 0.21484375
0.25390625 0.29296875 0.29296875 0.25390625 0.21484375 0.17578125
0.13671875 0.09765625 0.05859375 0.01953125]
[ 0.02734375 0.08203125 0.13671875 0.19140625 0.24609375 0.30078125
0.35546875 0.41015625 0.41015625 0.35546875 0.30078125 0.24609375
0.19140625 0.13671875 0.08203125 0.02734375]
[ 0.03515625 0.10546875 0.17578125 0.24609375 0.31640625 0.38671875
0.45703125 0.52734375 0.52734375 0.45703125 0.38671875 0.31640625
0.24609375 0.17578125 0.10546875 0.03515625]
[ 0.04296875 0.12890625 0.21484375 0.30078125 0.38671875 0.47265625
0.55859375 0.64453125 0.64453125 0.55859375 0.47265625 0.38671875
0.30078125 0.21484375 0.12890625 0.04296875]
[ 0.05078125 0.15234375 0.25390625 0.35546875 0.45703125 0.55859375
0.66015625 0.76171875 0.76171875 0.66015625 0.55859375 0.45703125
0.35546875 0.25390625 0.15234375 0.05078125]
[ 0.05859375 0.17578125 0.29296875 0.41015625 0.52734375 0.64453125
0.76171875 0.87890625 0.87890625 0.76171875 0.64453125 0.52734375
0.41015625 0.29296875 0.17578125 0.05859375]
[ 0.05859375 0.17578125 0.29296875 0.41015625 0.52734375 0.64453125
0.76171875 0.87890625 0.87890625 0.76171875 0.64453125 0.52734375
0.41015625 0.29296875 0.17578125 0.05859375]
[ 0.05078125 0.15234375 0.25390625 0.35546875 0.45703125 0.55859375
0.66015625 0.76171875 0.76171875 0.66015625 0.55859375 0.45703125
0.35546875 0.25390625 0.15234375 0.05078125]
[ 0.04296875 0.12890625 0.21484375 0.30078125 0.38671875 0.47265625
0.55859375 0.64453125 0.64453125 0.55859375 0.47265625 0.38671875
0.30078125 0.21484375 0.12890625 0.04296875]
[ 0.03515625 0.10546875 0.17578125 0.24609375 0.31640625 0.38671875
0.45703125 0.52734375 0.52734375 0.45703125 0.38671875 0.31640625
0.24609375 0.17578125 0.10546875 0.03515625]
[ 0.02734375 0.08203125 0.13671875 0.19140625 0.24609375 0.30078125
0.35546875 0.41015625 0.41015625 0.35546875 0.30078125 0.24609375
0.19140625 0.13671875 0.08203125 0.02734375]
[ 0.01953125 0.05859375 0.09765625 0.13671875 0.17578125 0.21484375
0.25390625 0.29296875 0.29296875 0.25390625 0.21484375 0.17578125
0.13671875 0.09765625 0.05859375 0.01953125]
[ 0.01171875 0.03515625 0.05859375 0.08203125 0.10546875 0.12890625
0.15234375 0.17578125 0.17578125 0.15234375 0.12890625 0.10546875
0.08203125 0.05859375 0.03515625 0.01171875]
[ 0.00390625 0.01171875 0.01953125 0.02734375 0.03515625 0.04296875
0.05078125 0.05859375 0.05859375 0.05078125 0.04296875 0.03515625
0.02734375 0.01953125 0.01171875 0.00390625]]
而第二种方式全部都是[0,0,:,:]这样的矩阵。

以上两种方法应该是第一种对的。因为Deconvolution 其实与卷积类似,按照第一种结果才能分别单独地对map上采样,而采用第二种则将会得到两个相同的map。(因为综合了两个输入map的信息)

因此结论: 对于多个输入输出的Deconvolution,采用方法1,对于单个输入的,方法1,2通用。

附上Deconvolution的官方编码:

这里写图片描述

说明:
以上的称述有点瑕疵,其实caffe已经解决了上述的问题,我之前没有好好留意。 关键就在group这个选项。
如果num_output>1,则填上group: c 再加上weight_filler: { type: “bilinear” },即可完成初始化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多目标进化优化_SDIM 学术讲座|分解多目标优化与帕累托多任务学习

分解多目标优化与帕累托多任务学习2020年11月4日晚,香港城市大学电脑学系讲座教授、博士生导师、IEEE Fellow张青富教授应我院王振坤教授的邀请,在线举办了一场主题为“分解多目标优化与帕累托多任务学习”的学术讲座。此次讲座采用线上和线下两种渠道&a…

hibernate(nested transactions not supported)异常

org.hibernate.TransactionException: nested transactions not supported错误的解决方法! 原因:事务没有提交,事务提交后正常 Transaction tx session.beginTransaction(); tx.commit(); //缺少这句话转载于:https://www.cnblogs.com/lmq-1…

Ubuntu使用Windows下的conio.h

把虚线框里面的内容粘贴进文档文本里面 ---------------------------------------------------------------------------------------------------------- #include <termios.h>#include <stdio.h>static struct termios old, new;/* Initialize new terminal i/o …

安装oracle-java,并覆盖原先的OpenJDK

Centos默认安装openJDK只安装了java,没有安装javac.如果需要安装javac&#xff0c;需要install the openjdk-8-jdk package。参考&#xff1a;http://openjdk.java.net/install/ 为了完整地安装java&#xff0c;我们转而选择使用oracle-java&#xff0c;由于我们没有root权限&a…

反射创建对象_如何应用Java反射技术灵活地创建程序类的对象实例

软件项目实训及课程设计指导——如何应用Java反射技术灵活地创建程序类的对象实例1、如何应用属性配置文件实现对系统中的配置信息进行读写操作Java中的属性配置文件主要可以作为软件应用系统及项目的配置文件&#xff0c;比如许多J2EE的开源框架系统中都提供了属性配置文件作为…

js回到顶部

2019独角兽企业重金招聘Python工程师标准>>> <html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"> <title></title> <style type"text/css"> #control_pannel …

java 产生的固体物的基础上 增删改的SQL声明

经过多次修改。最后版本。package com.power.sql;import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.List; import java.util.Vector;import org.apache.commons.lang3.reflect.FieldUtils; /*** author Gary Huang* 博客地址&#xff1a;…

OSEK简介

What is OSEKA specification for an RTOS•With standard software interfaces (OS API)•Including intertask & interprocessor communication (COM)•Including network management (NM)•Including the language used to statically declare OS elements used in an a…

python中布尔型的值_在python中对于bool布尔值的取反操作

背景根据公司业务的需求&#xff0c;需要做一个对于mysql数据库的大批量更新。脚本嘛也是干干单单。使用了redis的队列做缓存&#xff0c;可以异步并发的多任务进行更新。有点难受的地方在于&#xff0c;请求访问时&#xff0c;因为一些网速&#xff0c;速率之内的原因&#xf…

门道多:一次MaxCompute PS任务的问题排查之旅

关于PS是什么&#xff0c;可以参考一下以下两个介绍&#xff1a;基于参数服务器的大规模在线学习算法和Parameter Server。更多问题可以咨询玄乐。下面主要总结一下这回遇到一个PS任务跑不起来的问题排查过程。不想看过程的直接看最后一点总结就行。一 为什么要分享一个问题排查…

源码安装Bazel

有时候我们需要源码安装tensorflow&#xff0c;这时逃不过的第一步就是安装Bazel,如果没有root权限的时候&#xff0c;这时我们就需要源码安装Bazel了。下面是安装步骤&#xff0c;参考&#xff1a;https://docs.bazel.build/versions/master/install-compile-source.html 1. E…

234. Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 先找到链表中点&#xff0c;将第二部分反转&#xff0c;然后比较两部分链表的值。 /** * Definition for singly-linked list. * public class ListNo…

当查找名字的时候通过外围作用域向外查找(如何理解)

int a;//#1int b;//#2namespace A{int c;//#3void fun(){int a;//#4使用(a);//从里查找已经声明名字首先寻找内层花括号之内a找#3//会继续查找使用(b);//从里查找已经声明名字//首先寻找内层花括号之内没有声明b//继续外层花括号&#xff08;namespace A&#xff09;内寻找没有…

python 服务注册_将python程序注册为Ubuntu系统服务,并开机启动的方法。

一、系统环境操作系统&#xff1a;ubuntu 18 (该版本已默认使用systemd作为init)python版本&#xff1a;3.6二、步骤(一)准备python程序1、在 /usr/bin/ 下新建python程序 svc-test.py# nano /usr/bin/svc-test.py#! /usr/bin/python3import timewhile True:f open(/tmp/svc-t…

源码安装NASM,无root权限

首先说明我的系统是redhat linux64位。没有root权限。我们想安装nasm2.13. 下面介绍具体的安装步骤。 1. 下载源码: https://www.nasm.us/pub/nasm/releasebuilds/2.13/ 选择nasm-2.13-xdoc.tar.gz下载在本地目录下 2. 解压&#xff0c;tar -xvzf nasm-2.13-xdoc.tar.gz &…

Volley简单学习使用五—— 源代码分析三

一、Volley工作流程图&#xff1a; 二、Network在NetworkDispatcher中须要处理的网络请求。由以下进行处理&#xff1a;NetworkResponse networkResponse mNetwork.performRequest(request);看一下mNetwork的定义&#xff1a;&#xff08;定义在NetworkDispatcher中&#xff0…

html5 - history 历史管理

参考文章&#xff1a; w3c : http://www.w3.org/html/ig/zh/wiki/HTML5/history 张鑫旭 : http://www.zhangxinxu.com/wordpress/2013/06/html5-history-api-pushstate-replacestate-ajax/ zawa : http://zawa.iteye.com/blog/1271031  Demo : Demo 截图&#xff…

源码安装libjpeg-turbo1.2.1,无root权限

首先说明我的系统是redhat linux64位。没有root权限。我们想安装libjpeg-turbo. 下面介绍具体的安装步骤。 本来想安装最新的版本&#xff0c;但是最后失败了&#xff0c;无奈安装成1.2.1. 1. 下载源码&#xff1a; https://zh.osdn.net/projects/sfnet_libjpeg-turbo/download…

Android开发学习---使用Intelij idea 13.1 进行android 开发

Android开发学习---使用Intelij idea 13.1 进行android 开发 原文:Android开发学习---使用Intelij idea 13.1 进行android 开发1.为什么放弃eclipse?太卡!! 实在受不了eclipse的卡了,运行WEB项目还好,但android开发实在太慢,太慢!经常卡死,CPU经常被占满! 看网上很多人都说比I…

python滑动条来设置阈值houghcircle_OpenCV Python,为什么Hough Circle Transform找不到所有圆圈?...

我搜索了很长时间可能出错但我并不真正了解参数和预处理的影响我无法发布图片,但是在一张非常清晰的欧元照片上,该程序识别出一些圈子,而不是其他一些圈子,甚至可以像其他人一样清楚.这是我的代码&#xff1a;‘$’import cv2import numpy as npfilename rC:\Users\roseline\D…