128
правок
Изменения
Описания loss для глубокого блендинга, определение L_grad без пояснений
Алгоритм глубокого блендинга состоит из двух этапов. На первом этапе на стилевое изображения $S$ бесшовно накладывается входное изображение $I$, получается подготовительное блендинг-изображение $B$. На втором этапе $B$ модифицируется таким образом, чтобы результат по стилю был похож на $S$.
Будем считать, что на вход подаются изображения, прошедшие предварительную обработку:
* Используемая для вставки часть $I$ вырезана с помощью маски
* $M$ и $I$ выровнены относительно $S$
* Размеры матриц, задающих $M, S, I$ совпадают
'''Примеры входных данных:'''
| [[Файл:Deep bl i3.png|150px]]
|}
Алгоритм решает задачу блендинга, минимизируя следующие функции потерь:
* [[Блендинг_изображений#content_loss_def|Функция потерь содержания]] $\mathcal{L}_{cont}$ для сохранения содержания накладываемого изображения $I$
* [[Блендинг_изображений#style_loss_def|Функция потерь стиля]] $\mathcal{L}_{style}$ для переноса стиля изображения $S$ на $I$
* [[Блендинг_изображений#hist_loss_def|Гистограмная функция потерь]] $\mathcal{L}_{hist}$ для стабилизации переноса стиля
* [[Блендинг_изображений#tv_loss_def|Функция потерь полного отклонения]] $\mathcal{L}_{tv}$ для удаления шумов
* [[Блендинг_изображений#grad_loss_def|Градиентная функция потерь]] $\mathcal{L}_{grad}$ для бесшовности наложения
{{Определение
|definition =
'''Простой вставкой''' (англ. ''copy and paste'') $CAS(M, S, I)$ будем назвать изображение, полученное наложением части изображения $I$, заданной маской $M$, на изображение $S$.
$CAS(M, S, I) = I \odot M + S \odot (1 - M)$, где $\odot$ {{---}} покомпонентное умножение. }}
{{Определение
|id=grad_loss_def
|definition =
$\mathcal{L}_{grad}(S, I, M, O) = \displaystyle\frac{1}{2HW}\displaystyle\sum_{m=1}^H \gamma_l \displaystyle\sum_{n=1}^W [\,\nabla f(B) - (\nabla f(S) + \nabla f(I)) ]\,^2_{mn}$ {{---}} градиентная функция потерь (англ. ''Possion gradient loss''). $H, W$ {{---}} высота и ширина изображений. $B = CAS(M, S, O)$ {{---}} блендинговое изображение, оптимизируемое относительно $O$. }}
=== Первый этап ===
[[Файл:Deep bl 1stage.png|thumb|right|200px|Результат первого этапа]]
Построение подготовительного изображения начинается с белого шума. Для подсчета $\mathcal{L}_{style}$ и $\mathcal{L}_{content}$ авторами статьи<ref name='ZWS20'/> использовалась сеть VGG-19<ref name="SZ14"/>, обученная на ImageNet<ref name="ImageNet">https://image-net.org/papers/imagenet_cvpr09.pdf J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. FeiFei. Imagenet: A large-scale hierarchical image database</ref>. Для удобства введем вспомогательную функцию применения маски: <font size="3em"> <font color="green">// Вставка части изображения $I$, определенной маской $M$,</font> <font color="green">// на изображение $S$ </font> '''fun''' $ApplyMask(M, I, S)$: <font color="green">// За $\odot$ обозначим покомпонентное произведение </font> '''return''' $I \odot M + S \odot (1 - M)$</font>
Алгоритм первого этапа:
<font color="green">// Инициализируем первое приближение белым шумом </font>
$Z \leftarrow RandomNoise() $
$B \leftarrow ApplyMaskCAS(M, S, Z, S)$
<font color="green">// Определим суммарную функцию потерь с весами слагаемых $w$</font>
$\mathcal{L}_{total}(Z) \leftarrow w_{grad}\mathcal{L}_{grad}(I, S, B) + w_{cont}\mathcal{L}_{cont}(I, Z) + w_{style}\mathcal{L}_{style}(S, B) + w_{tv}\mathcal{L}_{tv}(B) + w_{hist}\mathcal{L}_{hist}(S, B)$
<font color="green">// С помощью алгоритма L-BFGS ищем изображение $Z$, которое минимизирует $\mathcal{L}_{total}$ </font>
$Z \leftarrow Reconstruct(\mathcal{L}_{total}, Z)$
'''return''' $ApplyMaskCAS(M, S, Z, S)$
</font>