Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dino model #74

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
5 changes: 3 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ name: Update docs
on:
push:
branches:
- master
- main
tags:
- v*
workflow_dispatch:

jobs:
update-docs:
name: Update docs
uses: unifyai/workflows/.github/workflows/docs.yml@master
uses: unifyai/workflows/.github/workflows/docs.yml@main
secrets: inherit
2 changes: 1 addition & 1 deletion .github/workflows/lint-bot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ permissions:
jobs:
fix-linting:
name: Fix Linting
uses: unifyai/workflows/.github/workflows/lint-bot.yml@master
uses: unifyai/workflows/.github/workflows/lint-bot.yml@main
secrets: inherit
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ on: [push, pull_request]
jobs:
check-formatting:
name: Check formatting
uses: unifyai/workflows/.github/workflows/lint.yml@master
uses: unifyai/workflows/.github/workflows/lint.yml@main
4 changes: 1 addition & 3 deletions .github/workflows/test-new-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ jobs:
uses: tj-actions/changed-files@v37
with:
files: |
"ivy_models_tests/"
files_ignore: |
"!*.py"
"ivy_models_tests/**/*.py"

- name: Run tests if any files in ivy_models_tests changed
if: steps.changed-files.outputs.any_changed == 'true'
Expand Down
54 changes: 27 additions & 27 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
.. image:: https://github.com/unifyai/unifyai.github.io/blob/master/img/externally_linked/logo.png?raw=true#gh-light-mode-only
.. image:: https://github.com/unifyai/unifyai.github.io/blob/main/img/externally_linked/logo.png?raw=true#gh-light-mode-only
:width: 100%
:class: only-light

.. image:: https://github.com/unifyai/unifyai.github.io/blob/master/img/externally_linked/logo_dark.png?raw=true#gh-dark-mode-only
.. image:: https://github.com/unifyai/unifyai.github.io/blob/main/img/externally_linked/logo_dark.png?raw=true#gh-dark-mode-only
:width: 100%
:class: only-dark

Expand Down Expand Up @@ -78,23 +78,23 @@ The layers are sometimes kept in a separate file, usually named :code:`layers.py
.. raw:: html

<div style="display: block;" align="center">
<img class="dark-light" width="6%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/empty.png">
<img class="dark-light" width="6%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/empty.png">
<a href="https://jax.readthedocs.io">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/jax_logo.png">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/jax_logo.png">
</a>
<img class="dark-light" width="12%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/empty.png">
<img class="dark-light" width="12%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/empty.png">
<a href="https://www.tensorflow.org">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/tensorflow_logo.png">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/tensorflow_logo.png">
</a>
<img class="dark-light" width="12%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/empty.png">
<img class="dark-light" width="12%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/empty.png">
<a href="https://pytorch.org">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/pytorch_logo.png">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/pytorch_logo.png">
</a>
<img class="dark-light" width="12%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/empty.png">
<img class="dark-light" width="12%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/empty.png">
<a href="https://numpy.org">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/numpy_logo.png">
<img class="dark-light" width="13%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/numpy_logo.png">
</a>
<img class="dark-light" width="6%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/supported/empty.png">
<img class="dark-light" width="6%" style="float: left;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/supported/empty.png">
</div>
<br clear="all" />

Expand All @@ -109,26 +109,26 @@ neural memory, pre-trained models + implementations, and builder tools with trai
<div style="display: block;">
<a href="https://github.com/unifyai/mech">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_mech_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_mech.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_mech_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_mech.png">
</picture>
</a>
<a href="https://github.com/unifyai/vision">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_vision_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_vision.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_vision_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_vision.png">
</picture>
</a>
<a href="https://github.com/unifyai/robot">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_robot_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_robot.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_robot_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_robot.png">
</picture>
</a>
<a href="https://github.com/unifyai/gym">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_gym_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_gym.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_gym_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_gym.png">
</picture>
</a>

Expand Down Expand Up @@ -166,26 +166,26 @@ neural memory, pre-trained models + implementations, and builder tools with trai

<a href="https://github.com/unifyai/memory">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_memory_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_memory.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_memory_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_memory.png">
</picture>
</a>
<a href="https://github.com/unifyai/builder">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_builder_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_builder.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_builder_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_builder.png">
</picture>
</a>
<a href="https://github.com/unifyai/models">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_models_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_models.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_models_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_models.png">
</picture>
</a>
<a href="https://github.com/unifyai/ecosystem">
<picture>
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_ecosystem_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/master/img/externally_linked/logos/ivy_ecosystem.png">
<source class="dark-light" width="15%" style="float: left; margin: 0% 5%;" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_ecosystem_dark.png">
<img class="dark-light" width="15%" style="float: left; margin: 0% 5%;" src="https://raw.githubusercontent.com/unifyai/unifyai.github.io/main/img/externally_linked/logos/ivy_ecosystem.png">
</picture>
</a>

Expand Down
5 changes: 4 additions & 1 deletion ivy_models/base/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,4 +170,7 @@ def load_from_huggingface(
spec = self.get_spec_class().from_json_file(config_path)
os.remove(config_path)

return self(spec=spec, v=weights)
model = self(spec=spec)
model.v = weights

return model
Empty file added ivy_models/dino/__init__.py
Empty file.
134 changes: 134 additions & 0 deletions ivy_models/dino/dino.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
from ivy_models.base import BaseModel, BaseSpec
import ivy
from ivy_models.vit.vit import VisionTransformer
from ivy_models.dino.layers import MultiCropWrapper, DINOHead, DINOBackbone
from ivy_models.vit.layers import partial, ConvStemConfig

class DINOConfig(BaseSpec):
def __init__(self, img_size: int,
patch_size: int,
num_layers: int,
num_heads: int,
hidden_dim: int,
mlp_dim: int,
in_dim: int = 0,
dropout: float = 0.0,
attention_dropout: float = 0.0,
num_classes: int = 1000,
representation_size: ivy.Optional[int] = None,
norm_layer: ivy.Callable[..., ivy.Module] = partial(ivy.LayerNorm, eps=1e-6),
conv_stem_configs: ivy.Optional[ivy.List[ConvStemConfig]] = None,
out_dim: int = 65536,
use_bn: bool = False,
norm_last_layer: bool = True,
nlayers: int = 1,
hidden_dim_: int = 2048,
bottleneck_dim: int = 256,
_weight_init: ivy.Initializer = ivy.GlorotUniform(),
_bias_init: ivy.Initializer = ivy.Zeros(),
with_bias: bool = True,
device=None,
dtype=None
):
super(DINOConfig, self).__init__()
self.img_size = img_size
self.patch_size = patch_size
self.num_layers = num_layers
self.num_heads = num_heads
self.hidden_dim = hidden_dim
self.mlp_dim = mlp_dim
self.in_dim = in_dim
self.dropout = dropout
self.attention_dropout = attention_dropout
self.num_classes = num_classes
self.representation_size = representation_size
self.norm_layer = norm_layer
self.conv_stem_configs = conv_stem_configs
self.out_dim = out_dim
self.use_bn = use_bn
self.norm_last_layer = norm_last_layer
self.nlayers = nlayers
self.hidden_dim_ = hidden_dim_
self.bottleneck_dim = bottleneck_dim
self._weight_init = _weight_init
self._bias_init = _bias_init
self.with_bias = with_bias
self.device = device
self.dtype = dtype

def get(self, *attr_names):
new_dict = {}
for name in attr_names:
new_dict[name] = getattr(self, name)
return new_dict

def get_vit_attrs(self):
return self.get(
"img_size",
"patch_size",
"num_layers",
"num_heads",
"hidden_dim",
"mlp_dim",
"dropout",
"attention_dropout",
"num_classes",
"representation_size",
"norm_layer",
"conv_stem_configs"
)

def get_head_attrs(self):
return self.get(
"in_dim",
"out_dim",
"use_bn",
"norm_last_layer",
"nlayers",
"hidden_dim_",
"bottleneck_dim",
"_weight_init",
"_bias_init",
"with_bias"
)

class DINONet(BaseModel):

def __init__(
self,
config: DINOConfig,
v: ivy.Container = None,
) -> None:
self.config = config
super(DINONet, self).__init__(v=v)

@classmethod
def get_spec_class(self):
return DINOConfig

def _build(self):
self.student = DINOBackbone(**self.config.get_vit_attrs())
self.teacher = DINOBackbone(**self.config.get_vit_attrs())
self.config.in_dim = self.config.num_classes
self.teacher_head = DINOHead(**self.config.get_head_attrs())
self.student_head = DINOHead(**self.config.get_head_attrs())

def _forward(self, x):
return {
"student_output": self.student_head(self.student(x)),
"teacher_output": self.teacher_head(self.teacher(x))
}


def dino_base(pretrained=False):
# instantiate the hyperparameters same as bert
# set the dropout rate to 0.0 to avoid stochasticity in the output
config = DINOConfig(img_size = 224, patch_size=16,
num_layers=12,
num_heads=12,
hidden_dim=768,
mlp_dim=3072, out_dim = 65536,
)
model = DINONet(config)
return model

Loading