2 pontos por GN⁺ 2024-02-14 | 1 comentários | Compartilhar no WhatsApp
  • Stable Cascade é a base de código oficial da Stability AI e fornece scripts de treinamento e inferência, além de vários checkpoints de modelo de geração de imagens baseados na arquitetura Würstchen
  • A principal diferença é que ele opera em um espaço latente (latent space) muito menor do que o Stable Diffusion, codificando imagens 1024x1024 em 24x24 em vez de 128x128, o que reduz a velocidade de inferência e o custo de treinamento
  • O modelo é composto por uma cascata de 3 estágios, Stage A, Stage B, Stage C, em que Stage A e B fazem a compressão da imagem, e Stage C é responsável por gerar uma representação latente 24x24 a partir de um prompt de texto
  • Os recursos oferecidos incluem texto-para-imagem, variações de imagem, imagem-para-imagem, ControlNet, LoRA, reconstrução de imagem, treinamento do zero e fine-tuning, além de acesso via diffusers 🤗
  • A base de código está em estágio inicial de desenvolvimento, então pode haver erros inesperados ou código de treinamento e inferência ainda não otimizado; o código segue a MIT License, e os pesos do modelo seguem a Stability AI Non-Commercial Research Community License

O problema que o Stable Cascade tenta resolver

  • Stable Cascade é a base de código oficial do Stable Cascade, oferecendo scripts de treinamento e inferência, além de vários modelos disponíveis para uso
  • O modelo é baseado na arquitetura Würstchen
  • A principal diferença em relação a modelos como Stable Diffusion é que ele opera em um espaço latente muito menor
    • Stable Diffusion usa um fator de compressão de 8 para codificar uma imagem 1024x1024 em 128x128
    • Stable Cascade alcança um fator de compressão de 42, podendo codificar uma imagem 1024x1024 em 24x24
    • O modelo condicionado por texto é treinado nesse espaço latente altamente comprimido
  • Um espaço latente menor leva a inferência mais rápida e treinamento mais barato
  • A versão anterior dessa arquitetura alcançou uma redução de custo de 16x em comparação com o Stable Diffusion 1.5

Desempenho e eficiência

  • Stable Cascade é apresentado como um modelo adequado para usos em que eficiência é importante
  • Métodos de extensão já conhecidos, como fine-tuning, LoRA, ControlNet, IP-Adapter e LCM, também são possíveis com essa abordagem
  • Na avaliação interna, o Stable Cascade apresentou o melhor desempenho em quase todas as comparações tanto em alinhamento ao prompt quanto em qualidade estética
  • A avaliação humana foi feita misturando parti-prompts e aesthetic prompts
    • O Stable Cascade foi comparado com 30 etapas de inferência
    • Os comparativos foram Playground v2 com 50 etapas, SDXL com 50 etapas, SDXL Turbo com 1 etapa e Würstchen v2 com 30 etapas
  • O maior modelo inclui 1,4 bilhão de parâmetros a mais que o Stable Diffusion XL, mas ainda mostra tempo de inferência mais rápido

Estrutura do modelo em 3 estágios

  • Como o nome sugere, o Stable Cascade é composto por três modelos em cascata para gerar imagens: Stage A, Stage B, Stage C
  • Stage A e Stage B têm a função de comprimir imagens, de forma semelhante ao VAE do Stable Diffusion
  • Stage C recebe o prompt de texto como entrada e gera uma pequena representação latente 24 x 24
  • Stage A é um VAE, enquanto Stage B e Stage C são modelos de difusão
  • Esta release fornece os seguintes checkpoints
    • Stage C: versões com 1 bilhão e 3,6 bilhões de parâmetros
    • Stage B: versões com 700 milhões e 1,5 bilhão de parâmetros
    • Stage A: 20 milhões de parâmetros, fixo por ser pequeno
  • É fortemente recomendado usar a versão de 3,6 bilhões do Stage C, já que a maior parte do trabalho de fine-tuning se concentrou nela
  • Ambas as versões do Stage B produzem bons resultados, mas a versão de 1,5 bilhão de parâmetros é melhor para reconstruir detalhes pequenos e delicados
  • Para os melhores resultados, é sugerido usar as variantes maiores em cada estágio

Recursos de inferência e notebooks

  • A execução do modelo pode ser feita pelos notebooks da seção inference
  • Essa seção inclui detalhes sobre download do modelo, requisitos de computação e tutoriais de uso
  • Text-to-Image

    • text_to_image.ipynb oferece os recursos básicos de texto-para-imagem, variações de imagem e imagem-para-imagem
    • As variações de imagem entendem embeddings de imagem e podem gerar variações da imagem fornecida; no exemplo, nenhum prompt é dado
    • Imagem-para-imagem funciona adicionando ruído à imagem até um certo ponto e depois gerando a partir desse ponto inicial
    • No exemplo, a imagem da esquerda é ruidosa em 80% e usa a legenda A person riding a rodent.
    • O modelo também pode ser acessado pela biblioteca diffusers 🤗 por meio da documentação stable-cascade no Hugging Face
  • ControlNet

    • controlnet.ipynb cobre como usar os ControlNet fornecidos para o Stable Cascade ou ControlNet treinados pelo próprio usuário
    • O ControlNet desta release inclui Inpainting / Outpainting, Face Identity, Canny e Super Resolution
    • O Face Identity ControlNet será lançado posteriormente
    • Ele pode ser usado no mesmo notebook, bastando mudar a configuração para cada ControlNet
  • LoRA

    • O Stable Cascade oferece sua própria implementação para treinamento e uso de LoRA
    • LoRA pode ser usado para fazer fine-tuning do modelo condicionado por texto, o Stage C
    • É possível adicionar e treinar novos tokens e adicionar camadas LoRA ao modelo
    • lora.ipynb mostra como usar uma LoRA treinada
  • Reconstrução de imagem

    • reconstruct_images.ipynb mostra como codificar e decodificar imagens e as vantagens da abordagem de alta compressão
    • O Diffusion Autoencoder do Stable Cascade permite trabalhar em um espaço muito comprimido
    • Assim como se usa o VAE do Stable Diffusion para treinar modelos próprios, também é possível usar Stage A e Stage B
    • O batch de exemplo 4 x 3 x 1024 x 1024 é codificado em 4 x 16 x 24 x 24
    • O fator de compressão espacial é 1024 / 24 = 42.67
    • Depois, é possível decodificar novamente para 4 x 3 x 1024 x 1024 com Stage A e Stage B
    • O resultado da reconstrução é muito próximo do original, inclusive em detalhes pequenos, e o texto afirma que esse tipo de reconstrução não seria possível com um VAE padrão

Treinamento, app e licença

  • O código de treinamento inclui treinamento do Stable Cascade do zero, fine-tuning, ControlNet e LoRA
  • Instruções detalhadas de treinamento estão disponíveis na training folder
  • A base de código está em estágio inicial de desenvolvimento
    • Pode haver erros inesperados
    • O código de treinamento e inferência pode ainda não estar totalmente otimizado
    • Se houver interesse, o plano é continuar lançando atualizações com as melhorias e otimizações mais recentes
    • Ideias, feedback e contribuições de atualização são bem-vindos
  • Para executar o app em Gradio, instale primeiro o seguinte
  • Na raiz do projeto, execute o app em Gradio com o seguinte comando
    • PYTHONPATH=./ python3 gradio_app/app.py
  • O código segue a MIT LICENSE
  • Os pesos do modelo disponíveis no Hugging Face seguem a STABILITY AI NON-COMMERCIAL RESEARCH COMMUNITY LICENSE

1 comentários

 
GN⁺ 2024-02-14
Opiniões do Hacker News
  • Depois de usar por algumas horas, parece que a aderência ao prompt ficou muito melhor
    Por enquanto, a qualidade parece inferior à de alguns modelos SDXL, mas vou suspender o julgamento até testar por mais alguns dias
    Também é rápido; parece cerca de 2 a 3 vezes mais rápido que o SDXL não turbo

    • Eu escolheria aderência ao prompt em vez de qualidade a qualquer momento
      Se for preciso recorrer a ControlNet, OpenPose e até depth map para forçar uma aparência ou profundidade específica, a solução acaba ficando personalizada demais para cada geração
      Testando por conta própria, notei melhora em seguir o prompt, e as imagens também me agradaram mais visualmente
    • Fico curioso sobre quanta VRAM é necessária
      Dizem que o maior modelo tem 1,4 bilhão de parâmetros a mais que o SDXL, e o SDXL já exige bastante VRAM
    • Dá para executar na CPU?
  • Muito impressionante
    Pelo que entendo, a Stability AI está recebendo investimento de venture capital no momento, mas parece inevitável que queime muito dinheiro, e também não está claro se o modelo de negócios é sustentável
    Talvez mereça receber financiamento público para pesquisa

    • A Stability AI já vem queimando muito dinheiro há algum tempo, e parece que por isso modelos mais recentes como o Stable Cascade deixaram de ser open source com uma licença comercialmente amigável
      Houve reportagens dizendo que, na época do acordo com a Intel, ela gastava cerca de US$ 8 milhões por mês com contas e salários, enquanto a receita era apenas uma fração disso
      A receita de agosto foi de US$ 1,2 milhão, e havia uma publicação de Mostaque no X dizendo que software e serviços estavam caminhando para US$ 3 milhões naquele mês, mas ela foi apagada depois
      https://fortune.com/2023/11/29/stability-ai-sale-intel-ceo-r...
    • Lembro de já ter visto o fundador da Stability AI, Emad, comentando em algum lugar aqui no HN sobre qual era exatamente o modelo de negócios e como isso evoluiria
      Hoje a busca do HN não está ajudando, então não consigo encontrar o comentário específico de que me lembro
      Se alguém conseguir procurar, a página do usuário é esta: https://news.ycombinator.com/user?id=emadm
    • Acho que a Stability deveria receber bolsas de pesquisa
    • Os pesquisadores não são da stability.ai, mas de universidades na Alemanha e no Canadá
      Então fico curioso sobre como essa estrutura funciona
      É trabalho exclusivo para a stability.ai?
  • Pelo commit, a licença mudou de MIT para uma licença customizada própria: https://github.com/Stability-AI/StableCascade/commit/209a526...
    É legalmente possível usar o snapshot anterior à mudança de licença sob a licença MIT original?

    • A intenção parece bem claramente ter sido usar uma licença não comercial, então, se alguém realmente insistir, pode ser uma questão para os tribunais
      Em geral, os tribunais olham o quadro mais amplo e consideram a intenção, além de entenderem que erros administrativos podem acontecer
      No entanto, uma exceção poderia ser o caso de uma empresa alegar que confiou na licença anterior e investiu muitos recursos
      O momento do commit parece bem importante. Se o repositório ficou sob MIT por apenas algumas horas antes do lançamento público, seria difícil uma empresa alegar que fez investimentos substanciais
    • É possível
      Esse commit pode continuar sendo usado como quiser sob a licença MIT vigente quando foi publicado
      É parecido com comprar um ebook e depois a 2ª edição sair apenas em capa dura: você ainda pode ler o ebook da 1ª edição
    • A arquitetura do modelo, o código de treinamento etc. ainda são MIT, e os pesos, que são o resultado do treinamento em um enorme cluster de GPUs, além do dataset usado, parecem estar sob a nova licença
    • O código é MIT, e o modelo está sob uma licença não comercial
      São obras diferentes sob licenças diferentes
      A Stability AI afirmou que essa licença não comercial existe porque é uma prévia técnica, como o SDXL 0.9
    • A licença MIT não é contagiosa como a GPL
      É possível fechar uma base de código MIT, mas não é possível alterar retroativamente a licença de um código antigo já publicado
      Como os commits iniciais da Stability tinham uma licença MIT, você pode fazer um fork desse commit e usá-lo como quiser
      A parte complicada é que fizeram um commit mudando a licença de MIT para proprietária, mas sem alterações no código
      Isso provavelmente não é válido, porque não dá para distribuir a mesma base de código sob duas licenças contraditórias
      A nova licença só poderia ser aplicada às mudanças adicionadas à base de código depois da alteração da licença
      Eu não chegaria a chamar de “ilegal”, mas, como o mesmo software já foi distribuído sob uma licença aberta, a alegação de que ele é software proprietário dificilmente se sustentaria em tribunal
  • Há um playground otimizado aqui: https://www.fal.ai/models/stable-cascade

    • “sign in to run” parece uma oportunidade de marketing perdida
      Especialmente em uma área tão competitiva como esta, e o público do HN provavelmente vai preferir rodar por conta própria se tiver que se cadastrar só para testar a geração de uma única imagem
  • Como outros geradores de imagem que testei, este também não consegue fazer teclas de piano corretamente [1]
    Parece que será necessária outra abordagem para conseguir contar os grupos de teclas pretas
    [1] https://fal.ai/models/stable-cascade?share=13d35b76-d32f-45c...

    • Acho que vai além disso
      No meu caso, ao criar imagens relacionadas a basquete, a maioria tinha mais de uma bola
      Não sou especialista, mas parece que o treinamento não capta, ou capta apenas parcialmente, restrições básicas da vida cultural humana, como todas as teclas de um piano terem que ser iguais ou haver apenas uma bola em uma partida
    • Assim como mãos humanas, consistência é um problema que se resolve aumentando o tamanho do modelo e o treinamento
  • Este modelo foi criado sobre a arquitetura Würstchen
    Há um vídeo em que um dos autores explica muito bem como este modelo funciona
    https://www.youtube.com/watch?v=ogJsCPqgFMk

    • É um bom vídeo e, em resumo, é isto :)
      Gemini Advanced> Summarize this video: https://www.youtube.com/watch?v=ogJsCPqgFMk
      Este vídeo trata do método de treinamento de um modelo de difusão texto-para-imagem chamado Würstchen
      Ele é muito mais eficiente do que abordagens existentes, como o Stable Diffusion 1.4, e consegue produzir resultados semelhantes usando apenas 1/16 do tempo de treinamento e da computação
      O ponto central é um processo de compressão em 2 etapas
      Na primeira etapa, um VQ-VAE comprime a imagem em um espaço latente 4 vezes menor que o espaço latente usado pelo Stable Diffusion; na segunda etapa, um modelo de difusão comprime novamente o espaço latente em 10 vezes
      Assim, a taxa total de compressão chega a 40 vezes, muito maior que a compressão de 8 vezes do Stable Diffusion
      Graças ao espaço latente comprimido, o modelo de difusão texto-para-imagem do Würstchen pode ser muito menor e treinado muito mais rapidamente que modelos Stable Diffusion
      O Würstchen pode ser treinado em uma única GPU com 24.000 horas de GPU, enquanto o Stable Diffusion 1.4 precisa de 150.000 horas de GPU
      Mesmo sendo eficiente, ele consegue criar imagens de qualidade semelhante à do Stable Diffusion e, em imagens com resolução mais alta ou mais detalhes, às vezes entrega qualidade melhor
      No geral, o Würstchen é um avanço importante na área de geração texto-para-imagem e, ao permitir treinar modelos de forma mais eficiente e barata, pode ampliar usos como imagens de marketing, ilustrações de livros e avatares personalizados
  • Existe algum método que possa ser usado para gerar várias imagens do mesmo modelo?
    Por exemplo, criar imagens de um modelo de carro girado em vários ângulos, mantendo todas como o mesmo carro gerado

    • Parece que alguém com recursos deveria treinar o Zero123 [1] com esse backbone
      [1] https://zero123.cs.columbia.edu/
    • É possível
      Dá para fazer um fluxo imagem de entrada => embedding => N imagens e, se também considerar o ponto de vista de renderização 3D, aplicar ControlNet a essas N imagens
      Referência: “The model can also understand image embeddings, which makes it possible to generate variations of a given image (left). There was no prompt given here.”
  • Lembro que, tempos atrás, fiz vários experimentos com esses dois pesquisadores tentando encontrar a melhor forma de conectar condicionalmente o Stage B à representação latente
    Acabamos desistindo porque simplesmente concatenar os canais de entrada com o upsample por vizinho mais próximo da representação latente dava resultados melhores do que uma atenção cruzada bem sofisticada com embeddings de posição 2D relativos
    Este modelo era conhecido antes como Würstchen v3

  • Será que funciona em AMD?
    Não consegui encontrar se há suporte
    Usuários que rodam Stable Diffusion em AMD provavelmente estão enfrentando perda de desempenho, então este é um recurso bem importante para projetos assim

  • Acho que o mais impressionante é a compressão
    Conseguir comprimir imagens 42 vezes é uma vantagem enorme em dispositivos móveis, conexões ruins de internet ou ambos

    • Isso é compressão de 42 vezes na dimensão espacial, e são necessários 16 canais em vez dos 3 canais do RGB
    • A essa altura, imagino que alguém já esteja criando um codec de vídeo baseado em IA rápido, que inclua um pequeno modelo pré-treinado e funcione até em ambientes com memória limitada, como TVs
      A ideia seria entregar resolução 8K com baixa largura de banda