这篇论文提出了任务交换网络(TSN),首次使用单编码器-单解码器的结构显著减少了参数量。
TSN

主干网络是Resnet-18,解码器中每一层会接受上一层中上采样后的特征图拼接上本层的特征图。
与以往的模型最大的区别在于输出后面只接了一个头(decoder)。做卷积之后利用这一个头去完成不同的任务。为了区分不同的任务,引入了Task Embedding,为每个任务得到一个\(l_{\tau}\)向量通过某种方式区分不同的任务。输出通道数的选择也是有讲究的,一般取所有任务中所需输出的最大的通道数。这样对于其他的任务,可以沿通道执行平均池化来适应不同的任务。(多说一句,平均池化是没有参数的,所以不会增加额外的参数)
Task Embedding Network
这是一个得到\(l_{\tau}\)向量的过程。如图中的左下角
首先,要为每个任务初始化一个d维的条件向量。根据执行的任务的不同,选择任务对应的向量\(v_{\tau}\)。然后经过一个全连接层,输出一个\(l_{\tau}\),仍然为d维。 \(v_{\tau}\)的选择有两种:
- 不同的任务的条件向量是正交
\[ v_{\tau ^1}^Tv_{\tau ^2}=\begin{cases} \frac{d}{T},& \tau _1=\tau _2\\ 0,& otherwise\\ \end{cases} \]
- \(v_{\tau}\)是高斯随机矩阵
\[ v_{\tau}\sim N\left( 0_d,\text{diag}\left( 1_d \right) \right) \]
Conditional Convolution Module
也就是A模块,其结构如图中右下角所示
输入的张量的通道数为c
上一步中得到的\(l_{\tau}\)会经过两个全连接层,将d维的向量映射到c维去。这样会分别得到两个向量\(\gamma\)和\(\beta\)。
随后经过AdaIN函数,其中的\(\mu\)代表均值,\(\sigma ^2\)代表方差。
这两个值是通过Instance Normalization(IN)得到的。具体可见:https://blog.csdn.net/u011447962/article/details/117714531?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-117714531-blog-125660719.pc_relevant_show_downloadRating&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-117714531-blog-125660719.pc_relevant_show_downloadRating&utm_relevant_index=2
简单来说就是对于每个通道内部求均值方差。 \[ AdaIN\left( \hat{x},\beta ,\gamma \right) =\gamma \frac{\left( \hat{x}-\mu \right)}{\sqrt{\sigma ^2}}+\beta \] 所以这个式子就是做IN的过程。\(\gamma\)和\(\beta\)称为缩放系数和偏移量。