generated from autodistill/autodistill-base-model-template
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 2fcc32b
Showing
6 changed files
with
208 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
.PHONY: style check_code_quality | ||
|
||
export PYTHONPATH = . | ||
check_dirs := src | ||
|
||
style: | ||
black $(check_dirs) | ||
isort --profile black $(check_dirs) | ||
|
||
check_code_quality: | ||
black --check $(check_dirs) | ||
isort --check-only --profile black $(check_dirs) | ||
# stop the build if there are Python syntax errors or undefined names | ||
flake8 $(check_dirs) --count --select=E9,F63,F7,F82 --show-source --statistics | ||
# exit-zero treats all errors as warnings. E203 for black, E501 for docstring, W503 for line breaks before logical operators | ||
flake8 $(check_dirs) --count --max-line-length=88 --exit-zero --ignore=D --extend-ignore=E203,E501,W503 --statistics | ||
|
||
publish: | ||
python setup.py sdist bdist_wheel | ||
twine upload -r testpypi dist/* -u ${PYPI_USERNAME} -p ${PYPI_TEST_PASSWORD} --verbose | ||
twine check dist/* | ||
twine upload dist/* -u ${PYPI_USERNAME} -p ${PYPI_PASSWORD} --verbose |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
<div align="center"> | ||
<p> | ||
<a align="center" href="" target="_blank"> | ||
<img | ||
width="850" | ||
src="https://media.roboflow.com/open-source/autodistill/autodistill-banner.png?3" | ||
> | ||
</a> | ||
</p> | ||
</div> | ||
|
||
# Autodistill Base Model Template | ||
|
||
**⚠️ Note: Before you start building a Base Model, check out our [Available Models](https://docs.autodistill.com/#available-models) directory to see if a model is already being implemented. If your desired model is being implemented, check the [Autodistill](https://github.com/autodistill/autodistill) GitHub Issues for progress. We encourage you to offer support to models you want to see in Autodistill if work is already being done on them.** | ||
|
||
This repository contains a template for use in creating a Base Model for [Autodistill](https://github.com/autodistill/autodistill). | ||
|
||
A Base Model is a large model that you can use for automatically labeling data. Autodistill enables you to connect Base Models to a smaller Target Model. A new model is trained using the Target Model architecture and your labeled data. This model will be smaller and thus more cost effective to run. | ||
|
||
Autodistill is an ecosystem of Base and Target Models, with the main [Autodistill](https://github.com/autodistill/autodistill) repository acting as the bridge between the two. | ||
|
||
This repository contains a starter template from which you can create a Base Model extension. | ||
|
||
Read the full [Autodistill documentation](https://autodistill.github.io/autodistill/). | ||
## Steps to Build a Base Model | ||
|
||
To build a base model, first rename the `src` directory to the name of the model you want to implement: | ||
|
||
``` | ||
mkdir autodistill_model_name | ||
``` | ||
|
||
Use underscores to separate words in the folder name. | ||
|
||
Next, open the `model.py` file. This is the file where your model loading and inference code will be stored. If you need to write helper functions for use with your model -- for example, long methods for loading data, processing extensions -- you may opt to create new files to store the helper scripts. | ||
|
||
In `model.py`, replace the `Model` class name with the name of your model. | ||
|
||
Next, implement the following functions: | ||
|
||
1. `__init__`: Code for loading the model. | ||
2. `predict`: A function that takes in an image name, runs inference, and returns a `supervision` Detections object (object detection) or a `supervision` Classifications object (classification). | ||
|
||
Replace the import statement in the `__init__.py` file in your model directory to point to your model. You only need to import the model, such as: | ||
|
||
``` | ||
from autodistill_clip.clip_model import CLIP | ||
``` | ||
|
||
Your version should be set in the `__init__.py` file as `0.1.0` before submitting your model for review. | ||
|
||
Update the `setup.py` file to use the name of your model where appropriate. Add all of the requisite dependencies to the `install_requires` section. | ||
|
||
Your Base Model should feature a README that shows a minimal example of how to use the base model. This should only be a few lines of code. Refer to `README_EXAMPLE.md` for an example of an Autodistill Base Model README. Feel free to copy this example and replace all parts as required. | ||
|
||
Your package must be licensed under the same license as the model you are using (i.e. if your model uses an Apache 2.0 license, your Autodistill extension must use the same license). Your license should be in a file called `LICENSE`, stored in the root directory of your Autodistill extension GitHub repository. | ||
|
||
Update your README to note the license applied to your package. | ||
|
||
When your Autodistill extension is ready for testing, open an Issue in the main [Autodistill](https://github.com/autodistill/autodistill) repository with a link to a public GitHub repository that contains your code. | ||
|
||
An Autodistill maintainer will review your code. If accepted, we will: | ||
|
||
1. Add your package to the [Autodistill documentation](https://docs.autodistill.com). | ||
2. Package your project up to PyPi and publish it as an official `autodistill` extension. | ||
3. Announce your project on social media. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
**⚠️ This is an example README for use in creating a Base Model. You will need to adjust this document for the model you are using.** | ||
|
||
<div align="center"> | ||
<p> | ||
<a align="center" href="" target="_blank"> | ||
<img | ||
width="850" | ||
src="https://media.roboflow.com/open-source/autodistill/autodistill-banner.png" | ||
> | ||
</a> | ||
</p> | ||
</div> | ||
|
||
# Autodistill CLIP Module | ||
|
||
This repository contains the code supporting the CLIP base model for use with [Autodistill](https://github.com/autodistill/autodistill). | ||
|
||
[CLIP](https://github.com/openai/CLIP), developed by OpenAI, is a computer vision model trained using pairs of images and text. You can use CLIP with autodistill for image classification. | ||
|
||
Read the full [Autodistill documentation](https://autodistill.github.io/autodistill/). | ||
|
||
Read the [CLIP Autodistill documentation](https://autodistill.github.io/autodistill/base_models/clip/). | ||
|
||
## Installation | ||
|
||
To use CLIP with autodistill, you need to install the following dependency: | ||
|
||
|
||
```bash | ||
pip3 install autodistill-clip | ||
``` | ||
|
||
## Quickstart | ||
|
||
```python | ||
from autodistill_clip import CLIP | ||
|
||
# define an ontology to map class names to our GroundingDINO prompt | ||
# the ontology dictionary has the format {caption: class} | ||
# where caption is the prompt sent to the base model, and class is the label that will | ||
# be saved for that caption in the generated annotations | ||
# then, load the model | ||
base_model = CLIP( | ||
ontology=CaptionOntology( | ||
{ | ||
"person": "person", | ||
"a forklift": "forklift" | ||
} | ||
) | ||
) | ||
base_model.label("./context_images", extension=".jpeg") | ||
``` | ||
|
||
|
||
## License | ||
|
||
[add license information here] | ||
|
||
## 🏆 Contributing | ||
|
||
We love your input! Please see the core Autodistill [contributing guide](https://github.com/autodistill/autodistill/blob/main/CONTRIBUTING.md) to get started. Thank you 🙏 to all our contributors! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from autodistill_base_model.model import ModelName | ||
|
||
__version__ = "0.1.0" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import os | ||
from dataclasses import dataclass | ||
|
||
import torch | ||
|
||
import supervision as sv | ||
from autodistill.detection import CaptionOntology, DetectionBaseModel | ||
|
||
HOME = os.path.expanduser("~") | ||
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") | ||
|
||
|
||
@dataclass | ||
class Model(DetectionBaseModel): | ||
ontology: CaptionOntology | ||
|
||
def __init__(self, ontology: CaptionOntology): | ||
pass | ||
|
||
def predict(self, input: str, confidence: int = 0.5) -> sv.Detections: | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import setuptools | ||
from setuptools import find_packages | ||
import re | ||
|
||
with open("./autodistill_base_model/__init__.py", 'r') as f: | ||
content = f.read() | ||
# from https://www.py4u.net/discuss/139845 | ||
version = re.search(r'__version__\s*=\s*[\'"]([^\'"]*)[\'"]', content).group(1) | ||
|
||
with open("README.md", "r") as fh: | ||
long_description = fh.read() | ||
|
||
setuptools.setup( | ||
name="autodistill-base-model", | ||
version=version, | ||
author="", | ||
author_email="", | ||
description="Model for use with Autodistill", | ||
long_description=long_description, | ||
long_description_content_type="text/markdown", | ||
url="", | ||
install_requires=[ | ||
# list your requires | ||
], | ||
packages=find_packages(exclude=("tests",)), | ||
extras_require={ | ||
"dev": ["flake8", "black==22.3.0", "isort", "twine", "pytest", "wheel"], | ||
}, | ||
classifiers=[ | ||
"Programming Language :: Python :: 3", | ||
"License :: OSI Approved :: MIT License", | ||
"Operating System :: OS Independent", | ||
], | ||
python_requires=">=3.7", | ||
) |