You may have seen surreal and absurd AI-generated images like these ones...

These are all generated with an AI tool known as DALL·E mini

Let's talk about the history of #dallemini, and also *how* it works! ↓↓↓🧵 Image
First, let's clarify the different AI tools which many get confused about:

- DALL·E was an @OpenAI-developed AI project from Jan 2021

- DALL·E mini is a community-created project inspired by DALL·E
- DALL·E 2 is another @OpenAI-developed tool released in April (2/16)
@OpenAI DALL·E mini was actually originally developed about a year ago, back in July 2021.

During a programming competition organized by @huggingface (an AI company), @borisdayma & some community folks (including myself!) developed a neural network inspired by DALL·E & studied it (3/16) ImageImage
@OpenAI @huggingface @borisdayma It was a great experience, we even won that competition!

Boris has now been continuing development on DALL·E mini, developing larger neural networks with even more data!

But how does it work?? (4/16) Image
@OpenAI @huggingface @borisdayma At the core of DALL·E mini are two components:
- language model
- image decoder

DALL·E mini learns from *millions* of image-text caption pairs sourced from the Internet. (5/16) Image
@OpenAI @huggingface @borisdayma The first component is a neural language model. You may already be familiar with neural language models, like the famous GPT-3 model, which takes texts and produces more text.

DALL·E mini uses another type of neural language model known as "BART" (6/16)
@OpenAI @huggingface @borisdayma But the BART model takes in text and produces images! How's that possible?

It's worth realizing that the language models don't actually work with text directly but represent the text as a sequence of discrete values that map to text. (this is known as "tokenization") (7/16)
@OpenAI @huggingface @borisdayma In fact, it's worth pointing out that BART is technically considered what is known as a "sequence-to-sequence" neural network for this reason. It can take in any discrete sequence and output a corresponding discrete sequence depending on the task it is trained on. (8/16) Image
@OpenAI @huggingface @borisdayma So what if we also represent images as a sequence of discrete values? 🤔

While we could consider each pixel as a separate discrete value, this is inefficient & doesn't scale well.

Instead we utilize another neural network to *learn* a mapping from an image to a sequence. (9/16) Image
@OpenAI @huggingface @borisdayma This neural network is known as VQGAN, which you may recognize from the VQGAN+CLIP technique used by another viral AI art tool (10/16)
@OpenAI @huggingface @borisdayma This VQGAN model learns from millions of images to learn a good mapping. A good mapping is one that can go from the sequence to a full image with minimal error. (11/16)
@OpenAI @huggingface @borisdayma As a separate note, you might have noticed that many of the #dallemini artworks have messed up faces 😄

This is mainly since the VQGAN hasn't learned a good mapping to easily represent faces as a sequence of discrete values. (12/16) Image
@OpenAI @huggingface @borisdayma So to summarize, we use BART, a sequence-to-sequence neural network to map our text prompt (which is represented as a discrete sequence) to another discrete sequence which is then mapped to an actual image with the VQGAN. (13/16) Image
@OpenAI @huggingface @borisdayma Millions of images and corresponding captions were available as datasets to use for DALL·E mini learning. Then during learning process, the BART model is given a caption and is adjusted to reduce the difference between generated images and the actual corresponding images. (14/16) Image
@OpenAI @huggingface @borisdayma It's that simple!

Well that's oversimplification obviously, with many challenges when scaling up these huge models and using millions of images, but the basic concept is simple. (15/16)
@OpenAI @huggingface @borisdayma Hope this thread was educational!

If you like this thread, please share!

Consider following me (@iScienceLuvr) for AI/ML-related content! 🙂

Also consider following the main DALL·E mini developer, @borisdayma! (16/16, end of thread)

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Tanishq Mathew Abraham

Tanishq Mathew Abraham Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @iScienceLuvr

May 31
Have you seen #dalle2 and #Imagen and wondered how it works?

Both models utilize diffusion models, a new class of generative models that have overtaken GANs in terms of visual quality.

Here are 10 resources to help you learn about diffusion models ⬇ ⬇ ⬇
1. "What are Diffusion Models?" by @ari_seff
Link →

This 3blue1brown-esque YouTube video is a great introduction to diffusion models!
2. "Introduction to Diffusion Models for Machine Learning" by @r_o_connor
Link → assemblyai.com/blog/diffusion…

This article provides a great deep-dive of the theoretical foundations for Diffusion Models.
Read 13 tweets
Apr 27
Awesome and surprising things you can do with Jupyter Notebooks ⬇
1. Write a full-fledged Python library!

You can write all of your code, documentation, & tests with Jupyter Notebooks & nbdev.fast.ai, all while maintaining best software practices and implementing CI/CD!

fastai deep learning library is entirely written in notebooks!
2. Create a blog!

Platforms like fastpages.fast.ai easily allow you to create blog posts from your Jupyter Notebooks, with the code cells and outputs in your post, and can even be made interactive.

I have my own such blog at tmabraham.github.io/blog
Read 8 tweets
Mar 28
Yet another state-of-the-art method for text-to-image generation, this time from researchers at @MetaAI!

Link: arxiv.org/abs/2203.13131

How does it work? A short thread on this paper ⬇
The model is based on an autoregressive transformer (like DALL·E) combined with a VQGAN but utilizes several key tricks to improve the quality and also controllability of the generations. 2/10
One trick is the use of a segmentation map (referred to as a scene) and a VQGAN for the scene.

As you can see here, this provides more controllability to the generation process. 3/10
Read 10 tweets
Mar 25
Given that this @kaggle ML competition recently started, I thought it would be a good opportunity to share my approach to Kaggle competing

A quick thread (1/7) 👇
The first step is to explore the data, also known as EDA. Getting a feel for the data is important to be able to derive important insights that can help you. 👨‍💻

Here is my EDA notebook for this competition:
kaggle.com/code/tanlikesm…

(2/7)
After exploring the data, the next step is to make a baseline solution. In this case, I had put together a quick pretrained baseline based on @Nils_Reimers's SentenceTransformers:

kaggle.com/code/tanlikesm…

(3/7)
Read 7 tweets
Feb 4
What matters most when training a neural network is how well it generalizes to unseen data.

For neural networks, it turns out there's a simple principle that can allow you to understand model generalization. (1/18)

A thread ↓
First let's formalize what generalization means.

We can say that the generalization gap is the difference between the loss for the training data and the loss for the unseen data taken from the same distribution. (2/18)
The loss itself depends on the parameters of the model, and we adjust the parameters to decrease the loss through gradient descent and reach a (local) minimum. (3/18)
Read 18 tweets
Jan 19
How I used Python + Twitter API to run my Twitter giveaway - a quick thread🧵
For my 20k follower milestone, I hosted a Twitter book giveaway. I decided the rules, made a simple flyer, and tweeted it out:
In order to select the 3 winners, I needed to keep track of the entrants. I used the Twitter API to do so. I signed up for the Twitter API and followed the required steps:
developer.twitter.com/en/portal/peti…
Read 13 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(