bilinear pooling

一、双线性汇合的计算过程:

第一步,计算Gram 矩阵:

对于一组H×W×D的feature maps,$\boldsymbol{x}_{i} \in \mathbb{R}^{D}$是图像的深度描述,其中$1 \leq i \leq H W$。双线性汇合双线性汇合是计算深度描述向量的格拉姆矩阵(Gram matrix),其中$\boldsymbol{G} \in \mathbb{R}^{D \times D}$。

\begin{equation}
\boldsymbol{G} :=\frac{1}{H W} \sum_{i=1}^{H W} \boldsymbol{x}_{i} \boldsymbol{x}_{i}^{\top}
\end{equation}

如果 不在整张图里面求取一个均值,思考一个像素点更容易理解双线性汇合。

把$x_{1}$作为列向量,$x_{1}^{T}$就是行向量,这样相乘就是一个D×D的矩阵。

从数学运算上思考上面的格拉姆矩阵,相当于是这么算的,将每个feature map展开为一维向量的形式,格拉姆矩阵中的一个值就是两个feature map向量【1,HW】与【HW,1】的乘积再除上HW。而综合来看就是【D,HW】与【HW,D】的矩阵乘积除以HW。

第二步,将格拉姆矩阵展成向量:

\begin{equation}
\boldsymbol{s} :=\operatorname{vec} \boldsymbol{G} \in \mathbb{R}^{D^{2}}
\end{equation}

第三步,进行规范化:

\begin{equation}
s_{k} \leftarrow \operatorname{sign} s_{k} \sqrt{\left|s_{k}\right|}, s \leftarrow \frac{s}{\|s\|}
\end{equation}

(这个地方没有明白是如何计算的?)

二、延申与扩展

 协方差矩阵的定义:

\begin{equation}
\mathbf{\Sigma} :=\frac{1}{H W} \sum_{i=1}^{H W}\left(\boldsymbol{x}_{i}-\boldsymbol{\mu}\right)\left(\boldsymbol{x}_{i}-\boldsymbol{\mu}\right)^{\top}=\frac{1}{H W} \boldsymbol{X} \tilde{\boldsymbol{I}} \boldsymbol{X}^{\top}
\end{equation}

其中:

\begin{equation}
\boldsymbol{\mu} :=\frac{1}{H W} \sum_{i=1}^{H W} \boldsymbol{x}_{i}
\end{equation}

\begin{equation}
\tilde{\boldsymbol{I}} :=\boldsymbol{I}-\frac{1}{H W} \mathbf{1} \mathbf{1}^{\top} \in \mathbb{R}^{H W \times H W}
\end{equation}

(这个地方没有明白是如何计算的?)

posted @ 2019-04-25 22:42  阿刚的代码进阶之旅  阅读(1692)  评论(4编辑  收藏  举报