Comments (10)
对prune_model_keep_size2和update_activation的理解
block: conv1-bn1-leaky1-conv2-bn2-leaky2
在prune_model_keep_size2中,依据bn层γ来选择哪些层被剪,小于阈值的层要被剪掉。 但被减去层的bias(β)还是会影响到结果,因此我们对BN1.weight筛选后还需要将被剪通道的bias转移至后续层计算,这样减少bias的影响 为什么说是减少呢? 回顾BN层计算:w*x+b,这儿w即γ,bias即b w小于阈值的直接被置0,但在训练过程中w可能非常小,但也很微妙影响到输出。w趋向0,则对应层输出受bias控制。
prune_model_keep_size2处理逻辑:
- 将BN1中γ小于阈值的层权重置0
- 将BN1中γ小于阈值的层的bias转移至后一层计算
怎么转移?
先求取出被剪层cut_layers(即1-mask对应的层)的激活输出,这些激活输出就可以看做是对应层实际计算结果的近似(即bias),因为w趋向0了嘛
好了,下面计算cut_layers在后续层的值,后续层是conv2,那么conv后的输出即offsetoffset其实就是求的每一个卷积核针对上一层的一个激活输出,卷积的计算流程是将kernel_size范围内的神经元加权求和,而cut_layers对应的层的输出即bias 因此,每一层卷积计算可简化一下: (b1_w11+b1_w12+b1_w13+...)->b1_sum(kernel),也就是下面offset求取的方式 由于cut_layers每一层输出的值是一样的,那么均值也就是每一个卷积核一次求取的结果
3.conv2后面是BN层,那么这儿将上一层bias的计算结果直接写到BN的均值中。上一层原本是加cut_layers的均值,到了BN层就是减去他们了 (这一步的前提是conv2的bias为False) 如果conv2后面没BN层,那么直接将上一层的bias叠加到conv2的bias里去请问第3条该如何理解呢?第一个convolutional的leaky(bias)传递给第二个convolutional后,为什么需要BN的均值减去offset呢?而传递到没有BN的卷积中,需要bias加上offset呢?
bn均值减去offset(用k表示)是因为bn输入的x此时也减少了offset, ((x-k)-(mean-k))= x-k 。卷积加上是因为 令k = wk',w(x-k') + b + k = wx + b,保证输出近似不变
from yolov3-channel-and-layer-pruning.
这一步只是把bn weight置零了,结构还是原来的,bias的激活值也还没转移,只是先测试下初步效果;bias处理在后面的prune_model_keep_size2里,会先将bias的激活偏移值传给后来层,再把它置零。
from yolov3-channel-and-layer-pruning.
这一步只是把bn weight置零了,结构还是原来的,bias的激活值也还没转移,只是先测试下初步效果;bias处理在后面的prune_model_keep_size2里,会先将bias的激活偏移值传给后来层,再把它置零。
恩是的。我看到了,here。非常感谢
from yolov3-channel-and-layer-pruning.
这一步只是把bn weight置零了,结构还是原来的,bias的激活值也还没转移,只是先测试下初步效果;bias处理在后面的prune_model_keep_size2里,会先将bias的激活偏移值传给后来层,再把它置零。
yolov3-channel-and-layer-pruning/utils/prune_utils.py
Lines 255 to 263 in 79a94ee
请问你指的是这里吗?
from yolov3-channel-and-layer-pruning.
bias处理在后面的prune_model_keep_size2里,会先将bias的激活偏移值传给后来层,再把它置零。
yolov3-channel-and-layer-pruning/utils/prune_utils.py
Lines 255 to 263 in 79a94ee
请问你指的是这里吗?
对的,是这里
from yolov3-channel-and-layer-pruning.
对prune_model_keep_size2和update_activation的理解
block: conv1-bn1-leaky1-conv2-bn2-leaky2
在prune_model_keep_size2中,依据bn层γ来选择哪些层被剪,小于阈值的层要被剪掉。
但被减去层的bias(β)还是会影响到结果,因此我们对BN1.weight筛选后还需要将被剪通道的bias转移至后续层计算,这样减少bias的影响
为什么说是减少呢?
回顾BN层计算:w*x+b,这儿w即γ,bias即b
w小于阈值的直接被置0,但在训练过程中w可能非常小,但也很微妙影响到输出。w趋向0,则对应层输出受bias控制。
prune_model_keep_size2处理逻辑:
- 将BN1中γ小于阈值的层权重置0
- 将BN1中γ小于阈值的层的bias转移至后一层计算
怎么转移?
先求取出被剪层cut_layers(即1-mask对应的层)的激活输出,这些激活输出就可以看做是对应层实际计算结果的近似(即bias),因为w趋向0了嘛
好了,下面计算cut_layers在后续层的值,后续层是conv2,那么conv后的输出即offset
offset其实就是求的每一个卷积核针对上一层的一个激活输出,卷积的计算流程是将kernel_size范围内的神经元加权求和,而cut_layers对应的层的输出即bias
因此,每一层卷积计算可简化一下: (b1w11+b1w12+b1w13+...)->b1sum(kernel),也就是下面offset求取的方式
由于cut_layers每一层输出的值是一样的,那么均值也就是每一个卷积核一次求取的结果
3.conv2后面是BN层,那么这儿将上一层bias的计算结果直接写到BN的均值中。上一层原本是加cut_layers的均值,到了BN层就是减去他们了
(这一步的前提是conv2的bias为False)
如果conv2后面没BN层,那么直接将上一层的bias叠加到conv2的bias里去
from yolov3-channel-and-layer-pruning.
对prune_model_keep_size2和update_activation的理解
block: conv1-bn1-leaky1-conv2-bn2-leaky2
在prune_model_keep_size2中,依据bn层γ来选择哪些层被剪,小于阈值的层要被剪掉。 但被减去层的bias(β)还是会影响到结果,因此我们对BN1.weight筛选后还需要将被剪通道的bias转移至后续层计算,这样减少bias的影响 为什么说是减少呢? 回顾BN层计算:w*x+b,这儿w即γ,bias即b w小于阈值的直接被置0,但在训练过程中w可能非常小,但也很微妙影响到输出。w趋向0,则对应层输出受bias控制。
prune_model_keep_size2处理逻辑:
- 将BN1中γ小于阈值的层权重置0
- 将BN1中γ小于阈值的层的bias转移至后一层计算
怎么转移?
先求取出被剪层cut_layers(即1-mask对应的层)的激活输出,这些激活输出就可以看做是对应层实际计算结果的近似(即bias),因为w趋向0了嘛
好了,下面计算cut_layers在后续层的值,后续层是conv2,那么conv后的输出即offsetoffset其实就是求的每一个卷积核针对上一层的一个激活输出,卷积的计算流程是将kernel_size范围内的神经元加权求和,而cut_layers对应的层的输出即bias 因此,每一层卷积计算可简化一下: (b1_w11+b1_w12+b1_w13+...)->b1_sum(kernel),也就是下面offset求取的方式 由于cut_layers每一层输出的值是一样的,那么均值也就是每一个卷积核一次求取的结果
3.conv2后面是BN层,那么这儿将上一层bias的计算结果直接写到BN的均值中。上一层原本是加cut_layers的均值,到了BN层就是减去他们了 (这一步的前提是conv2的bias为False) 如果conv2后面没BN层,那么直接将上一层的bias叠加到conv2的bias里去
请问第3条该如何理解呢?第一个convolutional的leaky(bias)传递给第二个convolutional后,为什么需要BN的均值减去offset呢?而传递到没有BN的卷积中,需要bias加上offset呢?
from yolov3-channel-and-layer-pruning.
@YeLL0W 非常感谢,我想我明白了
from yolov3-channel-and-layer-pruning.
对prune_model_keep_size2和update_activation的理解
block: conv1-bn1-leaky1-conv2-bn2-leaky2
在prune_model_keep_size2中,依据bn层γ来选择哪些层被剪,小于阈值的层要被剪掉。 但被减去层的bias(β)还是会影响到结果,因此我们对BN1.weight筛选后还需要将被剪通道的bias转移至后续层计算,这样减少bias的影响 为什么说是减少呢? 回顾BN层计算:w*x+b,这儿w即γ,bias即b w小于阈值的直接被置0,但在训练过程中w可能非常小,但也很微妙影响到输出。w趋向0,则对应层输出受bias控制。
prune_model_keep_size2处理逻辑:
- 将BN1中γ小于阈值的层权重置0
- 将BN1中γ小于阈值的层的bias转移至后一层计算
怎么转移?
先求取出被剪层cut_layers(即1-mask对应的层)的激活输出,这些激活输出就可以看做是对应层实际计算结果的近似(即bias),因为w趋向0了嘛
好了,下面计算cut_layers在后续层的值,后续层是conv2,那么conv后的输出即offsetoffset其实就是求的每一个卷积核针对上一层的一个激活输出,卷积的计算流程是将kernel_size范围内的神经元加权求和,而cut_layers对应的层的输出即bias 因此,每一层卷积计算可简化一下: (b1_w11+b1_w12+b1_w13+...)->b1_sum(kernel),也就是下面offset求取的方式 由于cut_layers每一层输出的值是一样的,那么均值也就是每一个卷积核一次求取的结果
3.conv2后面是BN层,那么这儿将上一层bias的计算结果直接写到BN的均值中。上一层原本是加cut_layers的均值,到了BN层就是减去他们了 (这一步的前提是conv2的bias为False) 如果conv2后面没BN层,那么直接将上一层的bias叠加到conv2的bias里去请问第3条该如何理解呢?第一个convolutional的leaky(bias)传递给第二个convolutional后,为什么需要BN的均值减去offset呢?而传递到没有BN的卷积中,需要bias加上offset呢?
bn均值减去offset(用k表示)是因为bn输入的x此时也减少了offset, ((x-k)-(mean-k))= x-k 。卷积加上是因为 令k = wk',w(x-k') + b + k = wx + b,保证输出近似不变
@YeLL0W 请问若BN层的weight不趋向于0,是否仍旧有办法将该BN的bias移动到下一个BN的running_mean中呢?
因为relu(A+B)不等于relu(A) + relu(B),若BN层的weight不趋向于0,上述推理就不成立了....
from yolov3-channel-and-layer-pruning.
from yolov3-channel-and-layer-pruning.
Related Issues (20)
- Can I use this to prune model MobileNetv2-Yolov4
- ValueError: not enough values to unpack (expected 2, got 1)
- 关于稀疏训练和剪枝的阈值
- 进行yolov4稀疏化训练 HOT 3
- 关于其他数据集标注格式要进行的代码修改
- 为什么稀疏训练和剪枝都要将yolov3赋给darknet?
- What are the flags -sr ,--s 0.001 ,--prune 1 --global_percent flag while doing pruning
- 刚开始推理时,GPU内存占用持续增加
- 训练时候出现一个问题 soft rratio是0测试时候 P R mAP F1也是nan这种情况怎么办呢
- The P R F1-score and [email protected] are around 90% after sparse training (--s 0.001 --prune 0). Still the sparse model is not performing well on the test dataset.
- 通道剪枝的时候遇到问题~ HOT 1
- 请问支持分组卷积的枝剪吗 HOT 1
- data文件夹下的.shapes文件需要自己准备吗?
- ValueError: Number of rows must be a positive integer, not 4.0 HOT 3
- 剪枝改进后的模型
- RuntimeError: shape '[128, 64, 3, 3]' is invalid for input of size 7067 训练v3报错
- 可以正常剪枝,但是微调并没有提升map,且微调后的bn_weight的大部分值仍接近0?
- How to transfor the pt model to ONNX format
- 在windows下没有生成val.shapes
- 没有models.yolo
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yolov3-channel-and-layer-pruning.