Quando as pessoas pesquisam na Internet uma foto ou um vĂdeo, geralmente adicionam a frase "de boa qualidade". A qualidade geralmente se refere Ă resolução - os usuários desejam que a imagem seja grande e, ao mesmo tempo, pareça boa na tela de um computador, smartphone ou TV moderno. Mas e se a fonte de boa qualidade simplesmente nĂŁo existir?
Hoje, contaremos aos leitores da Habr como, com a ajuda das redes neurais, podemos aumentar a resolução do vĂdeo em tempo real. VocĂŞ tambĂ©m aprenderá como a abordagem teĂłrica para resolver esse problema difere da prática. Se vocĂŞ nĂŁo estiver interessado em detalhes tĂ©cnicos, poderá rolar com segurança pela postagem - no final, vocĂŞ encontrará exemplos de nosso trabalho.

Há muito conteĂşdo de vĂdeo na Internet em baixa qualidade e resolução. Pode ser filmado há dĂ©cadas ou transmitido canais de TV que, por várias razões, nĂŁo sĂŁo da melhor qualidade. Quando os usuários esticam esse vĂdeo para tela cheia, a imagem fica nublada e confusa. Uma solução ideal para filmes antigos seria encontrar o filme original, digitalizá-lo com equipamentos modernos e restaurar manualmente, mas isso nem sempre Ă© possĂvel. As transmissões sĂŁo ainda mais complicadas - elas precisam ser processadas ao vivo. Nesse sentido, a opção mais aceitável para trabalharmos Ă© aumentar a resolução e limpar artefatos usando a tecnologia de visĂŁo computacional.
Na indĂşstria, a tarefa de aumentar fotos e vĂdeos sem perda de qualidade Ă© chamada de super-resolução. Muitos artigos já foram escritos sobre esse tĂłpico, mas as realidades do aplicativo "combate" se mostraram muito mais complicadas e interessantes. Brevemente sobre os principais problemas que tivemos que resolver em nossa prĂłpria tecnologia DeepHD:
- VocĂŞ precisa restaurar detalhes que nĂŁo estavam no vĂdeo original devido Ă sua baixa resolução e qualidade, para finalizá-los.
- As soluções da área de super-resolução restauram os detalhes, mas tornam claros e detalhados nĂŁo apenas os objetos no vĂdeo, mas tambĂ©m artefatos de compactação, o que causa aversĂŁo ao pĂşblico.
- Há um problema com a coleta da amostra de treinamento - Ă© necessário um grande nĂşmero de pares em que o mesmo vĂdeo está presente em baixa resolução e qualidade e em alta. Na realidade, geralmente nĂŁo há par de qualidade para conteĂşdo ruim.
- A solução deve funcionar em tempo real.
Seleção de tecnologia
Nos Ăşltimos anos, o uso de redes neurais levou a um sucesso significativo na resolução de quase todas as tarefas de visĂŁo computacional, e a tarefa de super-resolução nĂŁo Ă© exceção. Encontramos as soluções mais promissoras baseadas na GAN (Redes Adversárias Generativas, redes rivais generativas). Eles permitem obter imagens fotorrealistas de alta definição, complementando-as com os detalhes ausentes, por exemplo, desenhando cabelos e cĂlios nas imagens das pessoas.

No caso mais simples, uma rede neural consiste em duas partes. A primeira parte - o gerador - obtém uma imagem de entrada e retorna uma ampliação dobrada. A segunda parte - o discriminador - recebe a imagem gerada e "real" como entrada e tenta distingui-la.

Preparação do conjunto de treinamento
Para treinamento, reunimos dezenas de clipes com qualidade UltraHD. Primeiro, reduzimos para uma resolução de 1080p, obtendo assim exemplos de referĂŞncia. Em seguida, reduzimos pela metade esses vĂdeos, compactando-os com uma taxa de bits diferente ao longo do caminho para obter algo semelhante a um vĂdeo real em baixa qualidade. Dividimos os vĂdeos resultantes em quadros e os usamos de maneira a treinar a rede neural.
Desbloqueio
Obviamente, querĂamos obter uma solução completa: treinar a rede neural para gerar vĂdeo e qualidade de alta resolução diretamente do original. No entanto, os GANs eram muito caprichosos e tentavam constantemente refinar os artefatos de compactação, em vez de eliminá-los. Portanto, tive que dividir o processo em várias etapas. O primeiro Ă© a supressĂŁo de artefatos de compactação de vĂdeo, tambĂ©m conhecido como desbloqueio.
Um exemplo de um dos métodos de lançamento:

Nesse estágio, minimizamos o desvio padrĂŁo entre o quadro gerado e o quadro original. Assim, embora tenhamos aumentado a resolução da imagem, nĂŁo obtivemos um aumento real na resolução devido Ă regressĂŁo Ă mĂ©dia: a rede neural, sem saber em quais pixels especĂficos uma determinada borda da imagem passa, foi forçada a calcular a mĂ©dia de várias opções, obtendo um resultado desfocado. O principal que alcançamos nesse estágio Ă© a eliminação dos artefatos de compactação de vĂdeo; portanto, no estágio seguinte, a rede generativa precisava apenas aumentar a clareza e adicionar os pequenos detalhes ausentes, texturas. ApĂłs centenas de experimentos, selecionamos a arquitetura ideal em termos de desempenho e qualidade, que lembra vagamente a arquitetura
DRCN :

A idĂ©ia principal de uma arquitetura desse tipo Ă© o desejo de obter a arquitetura mais profunda, sem ter problemas com a convergĂŞncia em seu treinamento. Por um lado, cada camada convolucional subsequente extrai recursos cada vez mais complexos da imagem de entrada, o que permite determinar que tipo de objeto está em um determinado ponto da imagem e restaurar peças complexas e gravemente danificadas. Por outro lado, a distância no gráfico da rede neural de qualquer camada atĂ© a saĂda permanece pequena, o que melhora a convergĂŞncia da rede neural e torna-se possĂvel o uso de um grande nĂşmero de camadas.
Treinamento de rede generativa
Tomamos a arquitetura
SRGAN como base de uma rede neural para aumentar a resolução. Antes de treinar uma rede competitiva, vocĂŞ precisa prĂ©-treinar o gerador - treiná-lo da mesma maneira que no estágio de desbloqueio. Caso contrário, no inĂcio do treinamento, o gerador retornará apenas ruĂdo, o discriminador começará imediatamente a "vencer" - aprenderá facilmente a distinguir o ruĂdo dos quadros reais e nenhum treinamento funcionará.

Depois treinamos a GAN, mas existem algumas nuances. É importante para nĂłs que o gerador nĂŁo apenas crie quadros fotorrealistas, mas tambĂ©m armazene as informações disponĂveis neles. Para isso, adicionamos a função de perda de conteĂşdo Ă arquitetura GAN clássica. Representa várias camadas da rede neural VGG19 treinadas no conjunto de dados ImageNet padrĂŁo. Essas camadas transformam a imagem em um mapa de recursos que contĂ©m informações sobre o conteĂşdo da imagem. A função de perda minimiza a distância entre esses cartões obtidos dos quadros gerados e originais. AlĂ©m disso, a presença dessa função de perda permite nĂŁo estragar o gerador nas primeiras etapas do treinamento, quando o discriminador ainda nĂŁo está treinado e fornece informações inĂşteis.

Aceleração de rede neural
Tudo correu bem e, apĂłs uma sĂ©rie de experimentos, conseguimos um bom modelo que já podia ser aplicado a filmes antigos. No entanto, ainda era muito lento para processar o streaming de vĂdeo. Aconteceu que Ă© impossĂvel simplesmente reduzir o gerador sem uma perda significativa na qualidade do modelo final. EntĂŁo, a abordagem da destilação de conhecimento veio em nosso auxĂlio. Esse mĂ©todo envolve o treinamento de um modelo mais leve, de modo que repita os resultados de um modelo mais pesado. Pegamos muitos vĂdeos reais em baixa qualidade, processamos com a rede neural generativa obtida na etapa anterior e treinamos a rede mais leve para obter o mesmo resultado dos mesmos quadros. Devido a essa tĂ©cnica, obtivemos uma rede que nĂŁo possui qualidade muito inferior Ă original, mas Ă© dez vezes mais rápida: para processar um canal de TV com resolução 576p, Ă© necessária uma placa NVIDIA Tesla V100.

Avaliação da qualidade das soluções
Talvez o momento mais difĂcil ao trabalhar com redes generativas seja a avaliação da qualidade dos modelos resultantes. NĂŁo existe uma função de erro clara, como, por exemplo, ao resolver o problema de classificação. Em vez disso, sabemos apenas a precisĂŁo do discriminador, que nĂŁo reflete a qualidade do gerador que nos interessa (um leitor que esteja familiarizado com essa área poderia sugerir o uso
da métrica de Wasserstein , mas, infelizmente, deu um resultado notavelmente pior).
As pessoas nos ajudaram a resolver esse problema. Mostramos aos usuários os pares de imagens do serviço
Yandex.Tolok , um dos quais era a fonte e o outro processado por uma rede neural, ou ambos foram processados ​​por diferentes versões de nossas soluções. Por uma taxa, os usuários escolheram um vĂdeo melhor de um par, por isso obtivemos uma comparação estatisticamente significativa de versões, mesmo com alterações difĂceis de ver com os olhos. Nossos modelos finais vencem em mais de 70% dos casos, o que Ă© bastante, já que os usuários gastam apenas alguns segundos na classificação de alguns vĂdeos.
Um resultado interessante tambĂ©m foi o fato de o vĂdeo com resolução 576p, aumentado pela tecnologia DeepHD para 720p, superar o mesmo vĂdeo original com resolução 720p em 60% dos casos - ou seja, O processamento nĂŁo apenas aumenta a resolução do vĂdeo, mas tambĂ©m melhora sua percepção visual.
Exemplos
Na primavera, testamos a tecnologia DeepHD em vários filmes antigos que podem ser assistidos no KinoPoisk: “
Rainbow ” de Mark Donskoy (1943), “
Cranes are Flying ” de Mikhail Kalatozov (1957), “
My Dear Man ” de Joseph Kheifits (1958), “
The Fate of a Man ” Sergei Bondarchuk (1959), “
Ivan Childhood ”, de Andrei Tarkovsky (1962), “
Father of a Soldier ”, Rezo Chkheidze (1964) e “
Tango of Our Childhood ”, de Albert Mkrtchyan (1985).

A diferença entre as versões antes e depois do processamento Ă© especialmente notável se vocĂŞ observar os detalhes: estude as expressões faciais dos herĂłis em close-ups, considere a textura da roupa ou um padrĂŁo de tecido. Foi possĂvel compensar algumas das deficiĂŞncias da digitalização: por exemplo, remover superexposições nas faces ou tornar mais visĂveis os objetos colocados na sombra.
Mais tarde, a tecnologia DeepHD começou a ser usada para melhorar a qualidade das transmissões de
alguns canais no serviço Yandex.Air. É fácil reconhecer esse conteúdo pela tag
dHD .
Agora
em Yandex na melhoria da qualidade, vocĂŞ pode ver o "Snow Queen", "Os MĂşsicos de Bremen", "Antelope Ouro" e outro estĂşdio de cinema popular desenho animado "Soyuzmultfilm". Alguns exemplos de dinâmica podem ser vistos no vĂdeo:
Para espectadores exigentes, a diferença será especialmente notável: a imagem ficou mais nĂtida, folhas de árvores, flocos de neve, estrelas no cĂ©u noturno sobre a selva e outros pequenos detalhes sĂŁo mais visĂveis.
Mais Ă© mais.
Links Ăşteis
Jiwon Kim, Jung Kwon Lee, Rede convolucional profundamente recursiva de Kyoung Mu Lee para super-resolução de imagem [
arXiv: 1511.04491 ].
Christian Ledig et al. Super-resolução de imagem única foto-realista usando uma rede adversária generativa [
arXiv: 1609.04802 ].
Mehdi SM Sajjadi, Bernhard Schölkopf, Michael Hirsch EnhanceNet: Super-resolução de imagem Ăşnica atravĂ©s da sĂntese automatizada de texturas [
arXiv: 1612.07919 ].