https://github.com/udaylunawat/whats-this-rock
Telegram Rock Classification Bot!
https://github.com/udaylunawat/whats-this-rock
deep-learning docker image-classification image-processing keras machine-learning nbdev python telegram-bot tensorflow
Last synced: 16 days ago
JSON representation
Telegram Rock Classification Bot!
- Host: GitHub
- URL: https://github.com/udaylunawat/whats-this-rock
- Owner: udaylunawat
- License: mit
- Created: 2022-05-26T14:42:04.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-07-10T06:23:39.000Z (over 2 years ago)
- Last Synced: 2025-09-26T12:31:46.512Z (29 days ago)
- Topics: deep-learning, docker, image-classification, image-processing, keras, machine-learning, nbdev, python, telegram-bot, tensorflow
- Language: Jupyter Notebook
- Homepage: https://udaylunawat.github.io/Whats-this-rock/
- Size: 37.8 MB
- Stars: 27
- Watchers: 1
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.bak
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
Whats-this-rock
================
This project deploys a telegram bot that classifies rock images into 1
of 7 types.
[](https://github.com/udaylunawat/Whats-this-rock/actions/workflows/test.yaml) 





[](https://github.com/dwyl/esta/issues)
[](http://hits.dwyl.com/udaylunawat/Whats-this-rock)

This package uses [tensorflow](https://github.com/tensorflow/tensorflow)
to accelerate deep learning experimentation.
MLOps workflow like
- Experiment Tracking
- Model Management
- Hyperparameter Tuning
was all done using [Weights & Biases](https://wandb.ai)
Additionally, [nbdev](https://github.com/fastai/nbdev) was used to
- develop the package
- produce documentation based on a series of notebooks.
- CI
- publishing to [PyPi](https://pypi.org/project/rocks-classifier/)
## Inspiration
> [The common complaint that you need massive amounts of data to do deep
> learning can be a very long way from the
> truth!](https://youtu.be/J6XcP4JOHmk?t=2029)
> You very often don’t need much data at all, a lot of people are
> looking for ways to share data and aggregate data, but that’s
> unnecessary.They assume they need more data than they do, cause
> they’re not familiar with the basics of transfer learning which is
> this critical technique for needing orders of magnitudes less data.
> [Jeremy
> Howards](https://en.wikipedia.org/wiki/Jeremy_Howard_(entrepreneur))
## Documentation
Documentation for the project has been created using
[`nbdev`](https://nbdev.fast.ai/getting_started.html), and is available
at
[udaylunawat.github.io/Whats-this-rock](https://udaylunawat.github.io/Whats-this-rock/).
[`nbdev`](https://nbdev.fast.ai/getting_started.html) is a
notebook-driven development platform. Simply write notebooks with
lightweight markup and get high-quality documentation, tests, continuous
integration, and packaging for free!
Once I discovered nbdev, I couldn’t help myself but redo the whole
project from scratch.
It’s just makes me 10x more productive and makes the whole process
streamlined and more enjoyable.
## Installation
You can directly install using pip
``` bash
pip install rocks_classifier
```
Install - Directly from Github (latest beta version)
``` bash
pip install git+https://github.com/udaylunawat/Whats-this-rock.git
```
### Download and process data
``` bash
%%bash
rocks_process_data --config-dir configs \
remove_bad= True \
remove_misclassified= True \
remove_duplicates= True \
remove_corrupted= True \
remove_unsupported= True \
sampling=None \
train_split=0.8 \
```
### Train Model
Train model using default parameters in `configs/config.yaml`.
``` bash
rocks_train_model --config-dir configs
```
You can try different models and parameters by editing
`configs/config.yaml`, or you can override it by passing arguments like
this:-
By using Hydra it’s now much more easier to override parameters like
this:-
``` bash
rocks_train_model --config-dir configs \
wandb.project=Whats-this-rock \
wandb.mode=offline \
wandb.use=False \
dataset_id=[1,2] \
epochs=30 \
lr=0.005 \
augmentation=None \
monitor=val_loss \
loss=categorical_crossentropy \
backbone=resnet \
lr_schedule=cosine_decay_restarts \
lr_decay_steps=300 \
trainable=False \
```
### Wandb Sweeps (Hyperparameter Tuning)
Edit `configs/sweep.yaml`
``` bash
wandb sweep \
--project Whats-this-rock \
--entity udaylunawat \
configs/sweep.yaml
```
This will return a command with \$sweepid, run it to start running
sweeps!
``` bash
wandb agent udaylunawat/Whats-this-rock/$sweepid
```
### Telegram Bot
You can try the bot [here](https://t.me/test7385_bot) on Telegram.
> Type `/help` to get instructions in chat.
Or deploy it yourself
``` bash
rocks_deploy_bot
```
## Demo
| Colab | GitHub | Download |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Run in Colab](https://colab.research.google.com/drive/1N1CIqdOKlJSJla5PU53Yn9KWSao47eMv?usp=sharing) | [View Source on GitHub](https://github.com/udaylunawat/Whats-this-rock) | [Download Notebook](https://github.com/udaylunawat/Whats-this-rock/blob/main/notebooks/03_training.ipynb) |
## Features
& Things I’ve Experimented with
| `Feature` | | `Feature` | |
|-----------------|--------------------------------------------------------------------------------------------|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Wandb` | \- Experiment Tracking
- System Tracking
- Model Tracking
- Hyperparameter Tuning | `Datasets` | \- [Dataset 1](https://www.kaggle.com/datasets/mahmoudalforawi/igneous-metamorphic-sedimentary-rocks-and-minerals)
- [Dataset 2](https://www.kaggle.com/datasets/salmaneunus/rock-classification) |
| `Augmentation` | \- Keras-CV
- MixUp
- CutMix
- Normal | `Models` | \- ConvNextTiny
- Efficientnet
- Resnet101
- MobileNetv1
- MobileNetv2
- Xception |
| `Optimisers` | \- Adam
- Adamax
- SGD
- RMSProp | `LR Scheduler` | \- [CosineDecay](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/schedules/CosineDecay)
- [ExponentialDecay](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/schedules/ExponentialDecay)
- [CosineDecayRestarts](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/schedules/CosineDecayRestarts) |
| `Remove Images` | \- Duplicate Images
- Corrupt Images
- Bad Images
- Misclassified | `Configuration Management` | \- hydra
- ml-collections
- argparse
-google-fire |
| `Generators` | \- tf.data.DataSet
- ImageDataGenerator | `Deployment` | \- Heroku
- Railway |
| `Evaluation` | \- Classification Report
- Confusion Matrix | `GitHub Actions` (CICD) | \- GitHub Super Linter
- Deploy to Telegram
- Deploy to Railway
- nbdev tests CI
- GitHub Pages(Documentation) |
| `Linting` | \- Flake8
- Pydocstyle | `Telegram Bot` | \- Greet
- Info
- Predict Image |
| `Formatting` | \- Black
- yapf | `Documentation` | \- Code Description
- Code comments
- Source link
- Doclinks |
| `Badges` | \- Build
- Issues
- Lint Codebase | `Docker` | |
| `Publishing` | \- PyPi | | |
## Planned Features
| Feature | | Feature | |
|----------------|------------------------------------------------------------------------------------------------------------------------------|------------|--------------|
| `Deploy` | \- HuggingFaces | `Backend` | \- FastAPI |
| `Coding Style` | \- Object Oriented | `Frontend` | \- Streamlit |
| `WandB` | \- Group Runs
- [WandB Tables](https://twitter.com/ayushthakur0/status/1508962184357113856?s=21&t=VRL-ZXzznXV_Hg2h7QnjuA) | `Badges` | \- Railway |
## Technologies Used
| | | |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [](https://colab.research.google.com/drive/1N1CIqdOKlJSJla5PU53Yn9KWSao47eMv?usp=sharing "Google collaboratory") | [](https://github.com/python-telegram-bot/python-telegram-bot "Telegram Bot") | [](https://railway.app "Railway") |
| [](https://jupyter.org "Jupyter") | [](https://www.python.org/ "Python") | [](https://github.com/features/actions "Github Actions") |
| [](http://wandb.ai "Weights & Biases") | [](https://www.tensorflow.org/ "Tensorflow") | [](https://apple.com/macos "macOS") |
| [](http://docker.com "Docker") | [](https://git-scm.com "Git") | [](http://hydra.cc "Hydra") |
| [](http://github.com/psf/black "Black") | | |
## Directory Tree
├── imgs <- Images for skill banner, project banner and other images
│
├── configs <- Configuration files
│ ├── configs.yaml <- config for single run
│ └── sweeps.yaml <- confguration file for sweeps hyperparameter tuning
│
├── data
│ ├── corrupted_images <- corrupted images will be moved to this directory
│ ├── misclassified_images <- misclassified images will be moved to this directory
│ ├── bad_images <- Bad images will be moved to this directory
│ ├── duplicate_images <- Duplicate images will be moved to this directory
│ ├── sample_images <- Sample images for inference
│ ├── 0_raw <- The original, immutable data dump.
│ ├── 1_extracted <- Extracted data.
│ ├── 2_processed <- Intermediate data that has been transformed.
│ └── 3_tfds_dataset <- The final, canonical data sets for modeling.
│
├── notebooks <- Jupyter notebooks. Used to create the source code.
│
├── rocks_classifier <- Source code used in this project.
│ │
│ ├── data <- Scripts to download or generate data
│ │ ├── download.py
│ │ ├── preprocess.py
│ │ └── utils.py
│ │
│ ├── callbacks <- functions that are executed during training at given stages of the training procedure
│ │ └── callbacks.py
│ │
│ ├── models <- Scripts to train models and then use trained models to make
│ │ │ predictions
│ │ ├── evaluate.py
│ │ ├── models.py
│ │ ├── predict.py
│ │ ├── train.py
│ │ └── utils.py
│ │
│ └── visualization <- Scripts for visualizations
│
├── .dockerignore <- Docker ignore
├── .gitignore <- GitHub's excellent Python .gitignore customized for this project
├── LICENSE <- Your project's license.
├── README.md <- The top-level README for developers using this project.
├── CHANGELOG.md <- Release changes.
├── CODE_OF_CONDUCT.md <- Code of conduct.
├── CONTRIBUTING.md <- Contributing Guidelines.
├── settings.ini <- configuration.
├── README.md <- The top-level README for developers using this project.
├── requirements.txt <- The requirements file for reproducing the analysis environment, e.g.
│ generated with `pip freeze > requirements.txt`
└── setup.py <- makes project pip installable (pip install -e .) so src can be imported
# Learnings
- [“Better data is better than better
models!”](https://youtu.be/yrtAoBr3iuQ?t=306)
## Bug / Feature Request
If you find a bug (the site couldn’t handle the query and / or gave
undesired results), kindly open an issue
[here](https://github.com/udaylunawat/Whats-this-rock/issues) by
including your search query and the expected result.
If you’d like to request a new function, feel free to do so by opening
an issue [here](https://github.com/udaylunawat/Whats-this-rock/issues).
Please include sample queries and their corresponding results.
## Contributing
- Contributions make the open source community such an amazing place to
learn, inspire, and create.
- Any contributions you make are **greatly appreciated**.
- Check out our [contribution guidelines](../CONTRIBUTING.md) for more
information.
## License
Whats-this-rock! is licensed under the MIT License - see the
[LICENSE](LICENSE) file for details.
## Credits
- [Jeremy Howard & Lex Fridman
Podcast](https://www.youtube.com/watch?v=J6XcP4JOHmk&t=3883s&ab_channel=LexFridman)
- [Underfitted](https://youtu.be/yrtAoBr3iuQ?t=306) -
[Twitter](https://twitter.com/svpino)
- nbdev inspiration - [tmabraham](https://github.com/tmabraham/UPIT)
- [Dataset 1 - by Mahmoud
Alforawi](https://www.kaggle.com/datasets/mahmoudalforawi/igneous-metamorphic-sedimentary-rocks-and-minerals)
- [Dataset 2 - by
salmaneunus](https://www.kaggle.com/datasets/salmaneunus/rock-classification)
## Support
This project needs a ⭐️ from you. Don’t forget to leave a star ⭐️
Walt might be the one who knocks
but Hank is the one who rocks.