2023.3.28
2023.3.28
U-GAT-IT
Unsupervised Generative Attentional networks
with adaptive layer-instance normalization(AdaLIN) for Image-to-Image Translation
The attention module:模型关注区分source domains and target domain(attention map)
New AdaLIN:自适应 层实例 归一化函数——control the amount of change in shape and texture(依据不同的数据集 改变函数的超参)
G
:attention map–将注意力集中在两个领域(source domain&target domain)之间的特殊区别上。D
:attention map–helps fine-tuning(微调) BY 关注 target domain内fake图像和real图像之间的区别。
==归一化函数(normalization function)的选取影响the quality of the transformed results for various datasets(很多数据集的转换结果质量,这些数据集有着不同数量的在shape和texture上的改变)==
<受BIN批处理实例归一化的启发>,提出AdaLIN(自适应层实例归一化)
无监督生成网络
Goal:训练函数$G_{s\rightarrow t }$:from source domain $X_s$ to target domain $X_t$ (==unpaired sample==)
Frameworks:
- Generators:$G_{s\rightarrow t}$,$G_{t\rightarrow s}$
- Discriminators:$D_s$,$D_t$
Model($G_{s\rightarrow t}$)
$x\in {X_s,X_t}$:表示一个来自source & target domain的sample。
$G_{s\rightarrow t}=E_s+G_t+\eta_s$:encoder、decoder、auxiliary classifier(辅助分类器)。
$\eta_s(x)$:$x$来自$X_s$(source domain)的可能性。
$E_s^k(x)$:encoder的第k个activation map(激活映射)。
$E_s^{K_{ij}}(x)$:点$(i,j)$的值–承接上面$E_s^k(x)$,所以是encoder的第k个激活映射中点$(i,j)$的值。
$w_s^k$:第k个feature map(特征映射)的权值。==使用全局平均池化&全局最大池化(BY CAM)==
$$
\color{red}i.e.\color{black}\ \eta_s(x)=\sigma(\sum_k w_s^k\sum_{ij}E_s^{k_{ij}}(x))
$$
$a_s(x)$:domain specific attention feature map( $n$是encoder feature maps的数量 )
$$
a_s(x)=w_sE_s(x)={w_s^kE_s^k|1\le k\le n}
$$
==Translation Model:$G_{s\rightarrow t}=G_t(a_s(x))$==
AdaLIN
其参数$\gamma$和$\beta$将在一个来自attention map的全连接层进行动态计算。
$$
AdaLIN(\alpha,\gamma,\beta)=\gamma\ \cdot \ (\rho\ \cdot \hat{a_I}+(1-\rho)\ \cdot\ \hat{a_L})+\beta\
\hat{a_I}=\frac{a-\mu_I}{\sqrt{\sigma_I^2+\epsilon}}\
\hat{a_L}=\frac{a-\mu_L}{\sqrt{\sigma_L^2+\epsilon}}\
\rho\leftarrow clip_{[0,1]}(\rho-\tau \Delta \rho),\rho\in[0,1]
$$
- $\mu_I,\mu_L$:channel-wise mean(通道), layer-wise mean(层)
- $\sigma_I,\sigma_L$:channel-wise & layer-wise 标准差(standard deviation)
- $\tau$:learning rate(学习速率)
- $\Delta \rho$:更新向量的参数(BY 优化器optimizer)
$\rho$的值是在imposing bounds (Step:更新param)时被限制在[0,1]
G调整$\rho$值,$\rho$接近1时instance normalization很重要;$\rho$接近0时LN很重要。
$\rho$值在解码器的剩余块(redidual blocks)中初始化为1,在解码器的上采样块(up-sampling blocks)中初始化为0。
Discriminator
$x\in {X_t,G_{s\rightarrow t}(X_s)}$:来自目标域和翻译后的源域的示例。
$D_t=E_{D_t}+C_{D_t}+\eta_{D_t}$:$\eta_{D_t}(x)$ 和$D_t(x)$都被训练to分辨$x$来自$X_t$(target domain)还是$G_{s\rightarrow t}(X_s)$(从source domain生成的由source到target的映射,即fake images)
$\alpha_{D_t}(x)=w_{D_t}*E_{D_t}(x)$
==discriminator model:$D_t(x)=C_{D_t}(\alpha_{D_t}(x))$==
Loss function
包含以下四个损失函数:
- Adversarial loss(对抗损失):将转换后图像的分布与目标图像的分布进行匹配。
- Cycle loss(返回原样损失):to alleviate the mode collapse problem,因此施加周期约束——使得$x$从$X_s\rightarrow X_t$然后再$X_t\rightarrow X_S$能够恢复原样(original domain)。
- Identify loss(标志一致约束):保证输入图像与输出图像的颜色分布式是相似的。Given an image $x ∈ X_t$, after the translation of $x$ using $G_{s→t}$, the image should not change.
- CAM loss(可提升损失):给定一个来自${X_s,X_t}$的sample,$G_{s→t}$ and $D_t$ get to know where they need to improve or what makes the most difference between two domains in the current state.
$$
L_{lsgan}^{s\to t}=(E_{x\sim X_t}[(D_t(x))^2]+E_{x\sim X_s}[(1-D_t(G_{s\to t}(x)))^2])\
L_{cycle}^{s\to t}=E_{x\sim X_s}[|x-G_{t\to s}(G_{s\to t}(x))|1]\
L{identity}^{s\to t}=E_{x\sim X_t}[|x-G_{s\to t}(x)|1]\
L{cam}^{s\to t}=-(E_{x\sim X_s}[log(\eta_s(x))]+E_{x\sim X_t}[log(1-\eta_s(x))])\
L_{cam}^{D_t}=E_{x\sim X_t}[(\eta_{D_t}(x))^2]+E_{x\sim X_s}[1-\eta_{D_t}(G_{s\to t}(x))^2]\
$$
然后对它们联合起来一起训练:
$$
\min_{G_{s\to t},G_{t\to s},\eta_s,\eta_t}\ \max_{D_s,D_t,\eta D_s,\eta D_t}\lambda_1 L_{lsgan}+\lambda_2 L_{cycle}+\lambda_3 L_{identity}+\lambda_4 L_{cam}\
L_{lsgan}=L_{lsgan}^{s\to t}+L_{lsgan}^{t\to s}\ \ (same\ as\ L{cycle},L_{identity},L_{cam})\
\lambda_1=1,\lambda_2=10,\lambda_3=100,\lambda_4=1000\
$$
luogugu
P4017
给你一个食物网,你要求出这个食物网中最大食物链的数量。
(这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。)
Delia 非常急,所以你只有 $1$ 秒的时间。
由于这个结果可能过大,你只需要输出总数模上 $80112002$ 的结果。
P1177-快排
1 |
|
乐,本来由三个点T了。结果开完O2就A了,6.
真実に:いろいろのways。所以换一种板子:
1 |
|
话说Bucket这种排序我是没有接触过么?
那倒不是,只是又忘记了:类似Hash表做vector,然后每个vec[i]都是一个bucket.