O modo retrato nos smartphones Pixel permite tirar fotos com aparência profissional que chamam a atenção para o assunto com a desfocagem do fundo. No ano passado, descrevemos como calculamos a profundidade usando uma única câmera e foco automático com detecção de fase (foco automático com detecção de fase, PDAF), também conhecido como
foco automático com dois pixels . Esse processo usou um
algoritmo estéreo tradicional sem treinamento. Este ano, no Pixel 3, adotamos o aprendizado de máquina para melhorar a avaliação de profundidade e produzir resultados ainda melhores no modo retrato.
Esquerda: A imagem original capturada em HDR + . À direita, há uma comparação dos resultados da fotografia no modo retrato usando a profundidade do estéreo tradicional e do aprendizado de máquina. Os resultados da aprendizagem produzem menos erros. No resultado estéreo tradicional, a profundidade de muitas linhas horizontais atrás do homem é incorretamente estimada igual à profundidade do próprio homem, como resultado das quais elas permanecem nítidas.Uma breve excursão ao material anterior
No ano passado, descrevemos que o modo retrato usa uma rede neural para separar os pixels pertencentes às imagens das pessoas e uma imagem de fundo e complementa essa máscara de dois níveis com informações de profundidade derivadas dos pixels do PDAF. Tudo isso foi feito para obter o desfoque, dependendo da profundidade, próximo ao que uma câmera profissional pode oferecer.
Para trabalhar, o PDAF tira duas fotos ligeiramente diferentes da cena. Alternando entre imagens, você pode ver que a pessoa não está se movendo e o fundo está se movendo horizontalmente - esse efeito é chamado de
paralaxe . Como a paralaxe é uma função da distância de um ponto da câmera e da distância entre dois pontos de vista, podemos determinar a profundidade comparando cada ponto em uma imagem com o ponto correspondente em outra.
As imagens do PDAF à esquerda e no meio parecem semelhantes, mas a paralaxe pode ser vista no fragmento ampliado à direita. É mais fácil notar pela estrutura redonda no centro de ampliação.No entanto, encontrar essas correspondências nas imagens PDAF (esse método é chamado de profundidade estéreo) é uma tarefa extremamente difícil, pois os pontos entre as fotos se movem muito fracamente. Além disso, todas as tecnologias estéreo sofrem de problemas de abertura. Se você observar a cena através de uma pequena abertura, não será possível encontrar a correspondência de pontos para linhas paralelas à linha de base estéreo, ou seja, a linha que liga as duas câmeras. Em outras palavras, ao estudar linhas horizontais na foto apresentada (ou linhas verticais nas fotos com orientação retrato), todas as mudanças em uma imagem em relação à outra parecem aproximadamente iguais. No modo retrato do ano passado, todos esses fatores podem levar a erros na determinação da profundidade e na aparência de artefatos desagradáveis.
Melhorando a avaliação da profundidade
Com o modo retrato Pixel 3, corrigimos esses erros usando o fato de o paralaxe de fotos estéreo ser apenas uma das muitas pistas nas imagens. Por exemplo, pontos que estão longe do plano de foco parecem menos nítidos e isso será uma dica da profundidade desfocada. Além disso, mesmo ao visualizar uma imagem em uma tela plana, podemos estimar facilmente a distância dos objetos, pois sabemos o tamanho aproximado dos objetos do dia a dia (ou seja, você pode usar o número de pixels que representam o rosto de uma pessoa para estimar a sua localização). Esta será uma pista semântica.
O desenvolvimento manual de um algoritmo que combina essas dicas é extremamente difícil, mas usando o MO, podemos fazer isso enquanto melhoramos o desempenho das dicas de paralaxe do PDAF. Especificamente, treinamos uma
rede neural convolucional escrita em
TensorFlow , que recebe pixels do PDAF como entrada e aprendemos a prever a profundidade. Esse novo método aprimorado para estimar a profundidade com base no MO é usado no modo retrato Pixel 3.
Nossa rede neural convolucional recebe imagens de PDAF e fornece um mapa de profundidade. A rede usa uma arquitetura no estilo codificador-decodificador com conexões de salto adicionais e blocos residuais.Treinamento em redes neurais
Para treinar a rede, precisamos de muitas imagens PDAF e mapas de profundidade de alta qualidade correspondentes. E como precisamos que previsões de profundidade sejam úteis no modo retrato, precisamos de dados de treinamento semelhantes às fotos que os usuários tiram com smartphones.
Para isso, projetamos um dispositivo Frankenfon especial, no qual combinamos cinco telefones Pixel 3 e estabelecemos uma conexão WiFi entre eles, o que nos permitiu tirar fotos simultaneamente de todos os telefones (com uma diferença de não mais que 2 ms). Com este dispositivo, calculamos mapas de profundidade de alta qualidade com base em fotografias, usando movimento e estéreo de vários ângulos.
Esquerda: Um dispositivo para coletar dados de treinamento. No meio: um exemplo de alternância entre cinco fotografias. A sincronização da câmera garante a capacidade de calcular a profundidade em cenas dinâmicas. Direita: profundidade total. Pontos com baixa confiança, onde a comparação de pixels em fotos diferentes era incerta devido à fraqueza das texturas, são pintados de preto e não são usados em treinamento.Os dados obtidos com este dispositivo foram ideais para treinar a rede pelos seguintes motivos:
- Cinco pontos de vista garantem a presença de paralaxe em várias direções, o que nos salva do problema da abertura.
- A localização das câmeras garante que qualquer ponto da imagem seja repetido em pelo menos duas fotografias, o que reduz o número de pontos que não podem ser correspondidos.
- A linha de base, ou seja, a distância entre as câmeras, é maior que a do PDAF, o que garante uma estimativa mais precisa da profundidade.
- A sincronização da câmera garante a capacidade de calcular a profundidade em cenas dinâmicas.
- A portabilidade do dispositivo garante a possibilidade de tirar fotos na natureza, simulando fotos que os usuários tiram usando smartphones.
No entanto, apesar da idealidade dos dados obtidos usando este dispositivo, ainda é extremamente difícil prever a profundidade absoluta dos objetos de cena - qualquer par PDAF pode corresponder a vários mapas de profundidade (tudo depende das características das lentes, distância focal etc.). Para levar tudo isso em consideração, estimamos a profundidade relativa dos objetos da cena, o que é suficiente para obter resultados satisfatórios no modo retrato.
Combinamos tudo isso
A estimativa da profundidade usando MOs no Pixel 3 deve funcionar rapidamente, para que os usuários não precisem esperar muito tempo pelos resultados de retrato. No entanto, para obter boas estimativas de profundidade usando pequenos desfocagens e paralaxe, é necessário alimentar as redes neurais da foto em resolução total. Para garantir resultados rápidos, usamos o
TensorFlow Lite , uma solução de plataforma cruzada para o lançamento de modelos MO em dispositivos móveis e incorporados, bem como uma poderosa GPU Pixel 3, que permite calcular rapidamente a profundidade de dados de entrada incomumente grandes. Em seguida, combinamos as estimativas de profundidade obtidas com as máscaras da nossa rede neural, que distingue as pessoas, para obter os mais belos resultados da captura no modo retrato.
Experimente você mesmo
No Google Camera App versão 6.1 e superior, nossos mapas de profundidade são incorporados nas imagens no modo retrato. Isso significa que podemos usar o
Editor de profundidade do
Google Fotos para alterar o grau de desfoque e o ponto de foco depois de tirar uma foto. Você também pode usar programas de
terceiros para extrair mapas de profundidade do jpeg e estudá-los você mesmo. Você também pode tirar um álbum
do link , mostrando mapas de profundidade relativa e imagens correspondentes no modo retrato, para comparar a abordagem estéreo e MO tradicional.