|
--- |
|
tags: |
|
- image-classification |
|
- timm |
|
- chart |
|
- charts |
|
- fintwit |
|
- stocks |
|
- crypto |
|
- finance |
|
- financial |
|
- financial charts |
|
- graphs |
|
- financial graphs |
|
- plot |
|
- plots |
|
- financial plots |
|
- cryptocurrency |
|
- image-recognition |
|
- recognition |
|
library_name: timm |
|
license: mit |
|
datasets: |
|
- StephanAkkerman/crypto-charts |
|
- StephanAkkerman/stock-charts |
|
- StephanAkkerman/fintwit-images |
|
language: |
|
- en |
|
metrics: |
|
- accuracy |
|
- f1 |
|
- precision |
|
- recall |
|
model-index: |
|
- name: chart-recognizer |
|
results: |
|
- task: |
|
type: image-classification |
|
dataset: |
|
name: Test Set |
|
type: images |
|
metrics: |
|
- type: accuracy |
|
value: 0.9782 |
|
- type: f1 |
|
value: 0.9685 |
|
pipeline_tag: image-classification |
|
base_model: timm/efficientnet_b0.ra_in1k |
|
--- |
|
# Chart Recognizer |
|
|
|
chart-recognizer is a finetuned model for classifying images. It uses efficientnet as its base model, making it a fast and small model. |
|
This model is trained on my own dataset of financial charts posted on Twitter, which can be found here [StephanAkkerman/fintwit-charts](https://huggingface.co/datasets/StephanAkkerman/fintwit-charts). |
|
|
|
## Intended Uses |
|
|
|
chart-recognizer is intended for classifying images, mainly images posted on social media. |
|
|
|
## Dataset |
|
|
|
chart-recognizer has been trained on my own dataset. So far I have not been able to find another image dataset about financial charts. |
|
- [StephanAkkerman/crypto-charts](https://huggingface.co/datasets/StephanAkkerman/crypto-charts): 4,880 images. |
|
- [StephanAkkerman/stock-charts](https://huggingface.co/datasets/StephanAkkerman/stock-charts): 5,203 images. |
|
- [StephanAkkerman/fintwit-images](https://huggingface.co/datasets/StephanAkkerman/fintwit-images): 4,579 images. |
|
|
|
### Example Images |
|
The following images are not part of the training set and can be used for testing purposes. |
|
|
|
#### Chart |
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/648728961eee18b6bd1836bb/LWfEx-IhNLIsBPkbsvvnO.png) |
|
|
|
#### Non-Chart |
|
This can be any image that does not represent a (financial) chart. |
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/648728961eee18b6bd1836bb/mKdLqAVXG032eODbt4EXw.png) |
|
|
|
## More Information |
|
|
|
For a comprehensive overview, including the training setup and analysis of the model, visit the [chart-recognizer GitHub repository](https://github.com/StephanAkkerman/chart-recognizer). |
|
|
|
## Usage |
|
|
|
Using [HuggingFace's transformers library](https://huggingface.co/docs/transformers/index) the model can be converted into a pipeline for image classification. |
|
|
|
```python |
|
import timm |
|
import torch |
|
from PIL import Image |
|
from timm.data import resolve_data_config, create_transform |
|
|
|
# Load and set model to eval mode |
|
model = timm.create_model("hf_hub:StephanAkkerman/chart-recognizer", pretrained=True) |
|
model.eval() |
|
|
|
# Create transform and get labels |
|
transform = create_transform(**resolve_data_config(model.pretrained_cfg, model=model)) |
|
labels = model.pretrained_cfg["label_names"] |
|
|
|
# Load and preprocess image |
|
image = Image.open("img/examples/tweet_example.png").convert("RGB") |
|
x = transform(image).unsqueeze(0) |
|
|
|
# Get model output and apply softmax |
|
probabilities = torch.nn.functional.softmax(model(x)[0], dim=0) |
|
|
|
# Map probabilities to labels |
|
output = {label: prob.item() for label, prob in zip(labels, probabilities)} |
|
|
|
# Print the predicted probabilities |
|
print(output) |
|
``` |
|
|
|
## Citing & Authors |
|
|
|
If you use chart-recognizer in your research, please cite me as follows: |
|
|
|
``` |
|
@misc{chart-recognizer, |
|
author = {Stephan Akkerman}, |
|
title = {chart-recognizer: A Specialized Image Model for Financial Charts}, |
|
year = {2024}, |
|
publisher = {GitHub}, |
|
journal = {GitHub repository}, |
|
howpublished = {\url{https://github.com/StephanAkkerman/chart-recognizer}} |
|
} |
|
``` |
|
|
|
## License |
|
|
|
This project is licensed under the MIT License. See the [LICENSE](https://choosealicense.com/licenses/mit/) file for details. |