Applying deep learning to pathology is quite challenging due to the sheer size of the slide images (gigapixels!).
A common approach is to divide images into smaller patches, for which deep learning features can be extracted & aggregated to provide a slide-level diagnosis (1/9)
Unfortunately, dividing into small patches limits the context to cellular features, missing out on the various levels of relevant features, like larger-scale tissue organization. (2/9)
Additionally, it is difficult to improve long-range dependencies with Transformers due to the high number of patches which makes attention calculation computationally difficult. (3/9)
Recent work by @richardjchen et al. at #CVPR2022 introduced HIPT (Hierarchical Image Pyramid Transformer) to solve these challenges.
It's comprised of 3 separate ViTs that are applied at different scales. The output of one is treated as the input of the next transformer. (4/9)
@richardjchen Two of the ViTs are pretrained via self-supervised learning, specifically with the DINO framework. After pretraining the first ViT, its outputs can be used to pretrain the next. This is referred to as hierarchical pretraining. (5/9)
@richardjchen After the model is pretrained on thousands of slide images from various cancer types (the TCGA dataset), it can then be fine-tuned for specific tasks.
Compared to other models, HIPT had better performance (AUC score) for breast, lung, and kidney cancer classification (6/9)
@richardjchen Since these are Vision Transformers, it provides us with built-in interpretability and visualization with the attention heads.
A pathologist was able to confirm based on these visualizations that the ViTs are indeed attending to medically-relevant features (7/9)
@richardjchen Overall this was a very interesting paper and hopefully an important development for the field of computational pathology.
I also wonder what sorts of applications this architecture might have outside of pathology. (8/9)
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! ↓↓↓🧵
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)
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.
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
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. 👨💻
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:
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)