opennn

Open Neural Networks project for image classification task

https://github.com/epishchik/opennn

Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.0%) to scientific vocabulary

Keywords

classification neural-networks pytorch
Last synced: 4 months ago · JSON representation ·

Repository

Open Neural Networks project for image classification task

Basic Info
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 11
Topics
classification neural-networks pytorch
Created almost 4 years ago · Last pushed about 3 years ago
Metadata Files
Readme License Citation

README.md

**Open Neural Networks library for image classification.** [![PyPI](https://img.shields.io/pypi/v/opennn_pytorch?color=blue&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/opennn-pytorch/) [![Generic badge](https://img.shields.io/badge/License-MIT-.svg?style=for-the-badge)](https://github.com/Pe4enIks/OpenNN/blob/main/LICENSE)
[![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)](https://github.com/Pe4enIks/OpenNN/blob/main/docker/Dockerfile) [![PyTorch](https://img.shields.io/badge/PyTorch-%23EE4C2C.svg?style=for-the-badge&logo=PyTorch&logoColor=white)](https://pytorch.org)

Table of content

  1. Quick start
  2. Warnings
  3. Encoders
  4. Decoders
  5. Pretrained
  6. Pretrained old configs fixes
  7. Datasets
  8. Losses
  9. Metrics
  10. Optimizers
  11. Schedulers
  12. Examples
  13. Wandb

Quick start

1. Straight install.

1.1 Install torch with cuda.

bash pip install -U torch --extra-index-url https://download.pytorch.org/whl/cu113

1.2 Install opennn_pytorch.

bash pip install -U opennn_pytorch

2. Dockerfile.

bash cd docker/ docker build -t opennn:latest .

Warnings

  1. Cuda is only supported for nvidia graphics cards.
  2. Alexnet decoder doesn't support bce losses family.
  3. Sometimes combination of dataset/encoder/decoder/loss will give bad results, try to combine others.
  4. Custom cross-entropy support only mode when preds have (n, c) shape and labels have (n) shape.
  5. Not all options in transform.yaml and config.yaml are required.
  6. Mean and std in datasets section must be used in transform.yaml, for example [mean=[0.2859], std=[0.3530]] -> normalize: [[0.2859], [0.3530]]

Encoders

Decoders

Pretrained

LeNet
|Encoder |Decoder |Dataset |Weights |Configs |Logs | |--------------------|--------------------|--------------------|------------------|------------------|------------------| |LeNet |LeNet |MNIST |[BEST](https://cloud.mail.ru/public/Xr5z/42Mx6gC7p), [PLAN](https://cloud.mail.ru/public/eAgN/iPFm2v4UG) |[CONFIG](https://cloud.mail.ru/public/sCvP/UWXwUJxeb), [TRANSFORM](https://cloud.mail.ru/public/L8tj/kKEf5bKiA) |[TRAINVAL](https://cloud.mail.ru/public/c2BY/6BnctFNWd) | |LeNet |LeNet |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/TDuA/86rXD6yNV), [PLAN](https://cloud.mail.ru/public/RtcL/81CTm8doR) |[CONFIG](https://cloud.mail.ru/public/fZgh/FMzWYiDGS), [TRANSFORM](https://cloud.mail.ru/public/H2ic/j8gnpMGKV) |[TRAINVAL](https://cloud.mail.ru/public/5c1r/GsRgkFBsX) | |LeNet |Linear |MNIST |[BEST](https://cloud.mail.ru/public/REu7/za1tGB6qb), [PLAN](https://cloud.mail.ru/public/8Kfc/51kRbBdau) |[CONFIG](https://cloud.mail.ru/public/5Ztd/vFESYuv81), [TRANSFORM](https://cloud.mail.ru/public/xuwr/665RBtYTM) |[TRAINVAL](https://cloud.mail.ru/public/EHHp/mr4FzmiTX) | |LeNet |Linear |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/5oFr/YgrEuCjwY), [PLAN](https://cloud.mail.ru/public/cau1/17FS5Ab8L) |[CONFIG](https://cloud.mail.ru/public/iNrh/oLbWHydYW), [TRANSFORM](https://cloud.mail.ru/public/5mAj/fPWjDGZjb) |[TRAINVAL](https://cloud.mail.ru/public/2WUX/VZXsvBs8Z) | |LeNet |AlexNet |MNIST |[BEST](https://cloud.mail.ru/public/oX7D/YkvXxgftt), [PLAN](https://cloud.mail.ru/public/wjSw/woE5Zh2NS) |[CONFIG](https://cloud.mail.ru/public/vo77/xiGPwELZu), [TRANSFORM](https://cloud.mail.ru/public/k12g/UoHHx3iBJ) |[TRAINVAL](https://cloud.mail.ru/public/5nQ3/FfnmxPZws) | |LeNet |AlexNet |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/MUeQ/yFo7Rsrgo), [PLAN](https://cloud.mail.ru/public/BSG8/xtMqCR6mt) |[CONFIG](https://cloud.mail.ru/public/TCDL/SiXjmaDSV), [TRANSFORM](https://cloud.mail.ru/public/y3iw/5choydKkM) |[TRAINVAL](https://cloud.mail.ru/public/f9k3/ZMpjAgStT) |
AlexNet
|Encoder |Decoder |Dataset |Weights |Configs |Logs | |--------------------|--------------------|--------------------|------------------|------------------|------------------| |AlexNet |LeNet |MNIST |[BEST](https://cloud.mail.ru/public/KiVr/TAe8EV3yf), [PLAN](https://cloud.mail.ru/public/PHRA/jZtdVdWPP) |[CONFIG](https://cloud.mail.ru/public/np4t/A43jgb1oY), [TRANSFORM](https://cloud.mail.ru/public/FJ6x/SniuHZfEK) |[TRAINVAL](https://cloud.mail.ru/public/nq7F/kBV9NeVEq) | |AlexNet |LeNet |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/nieg/s5Nf7Pmnq), [PLAN](https://cloud.mail.ru/public/ZrgH/joJn5xhsn) |[CONFIG](https://cloud.mail.ru/public/bpFo/Vjmm7Dd4e), [TRANSFORM](https://cloud.mail.ru/public/Uqjw/P4BnF1xeQ) |[TRAINVAL](https://cloud.mail.ru/public/7DAu/ygnrhn5X7) | |AlexNet |Linear |MNIST |[BEST](https://cloud.mail.ru/public/N9nj/VeYTWXoyK), [PLAN](https://cloud.mail.ru/public/FyGQ/oLXxQDhYw) |[CONFIG](https://cloud.mail.ru/public/ReTm/oMmkKVkmS), [TRANSFORM](https://cloud.mail.ru/public/fksy/B4tHCfQQf) |[TRAINVAL](https://cloud.mail.ru/public/PvUP/Q3yubZu15) | |AlexNet |Linear |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/ZJPa/MtxqWu69p), [PLAN](https://cloud.mail.ru/public/uF4S/78sLapHdZ) |[CONFIG](https://cloud.mail.ru/public/ReDL/9ya4e56vu), [TRANSFORM](https://cloud.mail.ru/public/qpZm/kM2jfk13a) |[TRAINVAL](https://cloud.mail.ru/public/3hwi/EuKnoHiUw) | |AlexNet |AlexNet |MNIST |[BEST](https://cloud.mail.ru/public/RUsN/dHia5LgKP), [PLAN](https://cloud.mail.ru/public/bKjQ/Jot1gWoLu) |[CONFIG](https://cloud.mail.ru/public/iPJX/rtcFg7c8n), [TRANSFORM](https://cloud.mail.ru/public/HUxD/jkdVQ8gt4) |[TRAINVAL](https://cloud.mail.ru/public/7Y5x/92fZTtd1A) | |AlexNet |AlexNet |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/q93Z/RRbNEXJrk), [PLAN](https://cloud.mail.ru/public/KXoT/wNxScRaBm) |[CONFIG](https://cloud.mail.ru/public/vxwb/VivRXsEud), [TRANSFORM](https://cloud.mail.ru/public/Df9p/vd82CP8h1) |[TRAINVAL](https://cloud.mail.ru/public/sVvz/CDoCkgt8f) |
GoogleNet
|Encoder |Decoder |Dataset |Weights |Configs |Logs | |--------------------|--------------------|--------------------|------------------|------------------|------------------| |GoogleNet |Linear |MNIST |[BEST](https://cloud.mail.ru/public/oTD1/xRa26UVaG), [PLAN](https://cloud.mail.ru/public/ByvC/y1oZ2icei) |[CONFIG](https://cloud.mail.ru/public/Lt9M/WxiehNMwL), [TRANSFORM](https://cloud.mail.ru/public/hGb4/BanKp7YrQ) |[TRAINVAL](https://cloud.mail.ru/public/5W22/SFLgwsVqu) | |GoogleNet |Linear |FASHION-MNIST |[BEST](https://cloud.mail.ru/public/rhKv/ATwGUW3bQ), [PLAN](https://cloud.mail.ru/public/TDCf/Txpg8HY3c) |[CONFIG](https://cloud.mail.ru/public/zkaJ/WB8Zp2c7E), [TRANSFORM](https://cloud.mail.ru/public/Y1GU/5KzEgDdug) |[TRAINVAL](https://cloud.mail.ru/public/q9PD/7Sk3rHVp8) |
ResNet
|Encoder |Decoder |Dataset |Weights |Configs |Logs | |--------------------|--------------------|--------------------|------------------|------------------|------------------| |ResNet18 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/HNQe/GrQTYVR4D), [PLAN](https://cloud.mail.ru/public/np89/1ZKoTVruk) |[CONFIG](https://cloud.mail.ru/public/bW8W/Xxmpk9r2a), [TRANSFORM](https://cloud.mail.ru/public/WxRb/YgwRkWjkA) |[TRAINVAL](https://cloud.mail.ru/public/8zXr/6z4gY4Gsp) | |ResNet34 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/eJZ9/15V8dgGKg), [PLAN](https://cloud.mail.ru/public/SoxA/gcWABVppm) |[CONFIG](https://cloud.mail.ru/public/9bp6/G6q7ZPamn), [TRANSFORM](https://cloud.mail.ru/public/hG4D/xF9mTFF6P) |[TRAINVAL](https://cloud.mail.ru/public/A97j/EKN2WKseA) | |ResNet50 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/m6dS/dEphhQGq7), [PLAN](https://cloud.mail.ru/public/Uu4W/3fEtherM7) |[CONFIG](https://cloud.mail.ru/public/Bzzg/igi13GBuD), [TRANSFORM](https://cloud.mail.ru/public/LMRU/Tuo1Abc9j) |[TRAINVAL](https://cloud.mail.ru/public/ednt/o5MTGJQxX) | |ResNet101 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/GFT9/METVBdbLG), [PLAN](https://cloud.mail.ru/public/o2sL/CvKQw9Dde) |[CONFIG](https://cloud.mail.ru/public/dgCC/Ead9DPqiq), [TRANSFORM](https://cloud.mail.ru/public/CRzw/1oWVSkjEt) |[TRAINVAL](https://cloud.mail.ru/public/1drh/eonZo69jx) | |ResNet152 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/cp6D/YGM7rqFQk), [PLAN](https://cloud.mail.ru/public/BJsM/yi34akeYU) |[CONFIG](https://cloud.mail.ru/public/c9iD/b2U9TTU54), [TRANSFORM](https://cloud.mail.ru/public/kYvR/y2EscgW3d) |[TRAINVAL](https://cloud.mail.ru/public/XCNJ/f9Z1F8D8C) |
MobileNet
|Encoder |Decoder |Dataset |Weights |Configs |Logs | |--------------------|--------------------|--------------------|------------------|------------------|------------------| |MobileNet |Linear |MNIST |[BEST](https://cloud.mail.ru/public/1N8q/a7W615oHq), [PLAN](https://cloud.mail.ru/public/rje5/L4fdJr9BE) |[CONFIG](https://cloud.mail.ru/public/whgD/ntaS6BebM), [TRANSFORM](https://cloud.mail.ru/public/h2Tm/mLaD4bYeN) |[TRAINVAL](https://cloud.mail.ru/public/F6X1/jhDRPYoGb) |
VGG
|Encoder |Decoder |Dataset |Weights |Configs |Logs | |--------------------|--------------------|--------------------|------------------|------------------|------------------| |VGG-11 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/6wUm/vKJxLiHtJ), [PLAN](https://cloud.mail.ru/public/3rEd/MXwrSKPRE) |[CONFIG](https://cloud.mail.ru/public/hTe5/jA8PrYgdN), [TRANSFORM](https://cloud.mail.ru/public/nUjx/PLKuqkNU4) |[TRAINVAL](https://cloud.mail.ru/public/SceV/Mk4PHzg6n) | |VGG-16 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/mGsd/SY83ovV1R), [PLAN](https://cloud.mail.ru/public/fStQ/Xn5eRRgXo) |[CONFIG](https://cloud.mail.ru/public/F4q4/Qc7FWLHeq), [TRANSFORM](https://cloud.mail.ru/public/tDAy/K1E3Gix3B) |[TRAINVAL](https://cloud.mail.ru/public/w3ed/HLSCjA9NU) | |VGG-19 |Linear |MNIST |[BEST](https://cloud.mail.ru/public/mMUk/a5VWw8PN1), [PLAN](https://cloud.mail.ru/public/BfZb/ps46dKYgy) |[CONFIG](https://cloud.mail.ru/public/2ZQJ/6BeeqB1rj), [TRANSFORM](https://cloud.mail.ru/public/Nhya/QFxGiRdvG) |[TRAINVAL](https://cloud.mail.ru/public/urow/wbKkV6uyv) |

Pretrained configs issues

Config file changed, check configs folder!!! 1. Config must include testpart value, (trainpart + validpart + testpart) value can be < 1.0. 2. You will able to add wandb structure for logging in wandb. 3. Full restructure into branches structure.

Datasets

Dataset parameters: - MNIST [classes=10] [mean=[0.1307], std=[0.3801]] - FASHION-MNIST [classes=10] [mean=[0.2859], std=[0.3530]] - CIFAR-10 [classes=10] [mean=[0.491, 0.482, 0.446], std=[0.247, 0.243, 0.261]] - CIFAR-100 [classes=100] [mean=[0.5071, 0.4867, 0.4408], std=[0.2675, 0.2565, 0.2761]]

Losses

Metrics

Optimizers

Schedulers

Examples

  1. Run from yaml config. ```python from opennn_pytorch import run

config = 'path to yaml config' # check configs folder run(config) ```

  1. Get encoder and decoder. ```python from opennnpytorch.encoder import getencoder from opennnpytorch.decoder import getdecoder

encodername = 'ResNet18' decodername = 'AlexNet' decodermode = 'Single' inputchannels = 1 number_classes = 10 device = 'cuda:0'

encoder = getencoder(encodername, input_channels).to(device)

model = getdecoder(decodername, encoder, numberclasses, decodermode, device).to(device) ```

3.1 Get dataset. ```python from opennnpytorch.dataset import getdataset from torchvision import transforms

transformconfig = 'path to transform yaml config' datasetname = 'MNIST' datafiles = None trainpart = 0.7 validpart = 0.2 test_part = 0.05

transformlst = opennnpytorch.transformslst(transformconfig) transform = transforms.Compose(transform_lst)

traindata, validdata, testdata = getdataset(datasetname, trainpart, validpart, testpart, transform, datafiles) ```

3.2 Get custom dataset. ```python from opennnpytorch.dataset import getdataset from torchvision import transforms

transformconfig = 'path to transform yaml config' datasetname = 'CUSTOM' images = 'path to folder with images' annotation = 'path to annotation yaml file with image: class structure' datafiles = (images, annotation) trainpart = 0.7 validpart = 0.2 test_part = 0.05

transformlst = opennnpytorch.transformslst(transformconfig) transform = transforms.Compose(transform_lst)

traindata, validdata, testdata = getdataset(datasetname, trainpart, validpart, testpart, transform, datafiles) ```

  1. Get optimizer. ```python from opennnpytorch.optimizer import getoptimizer

optimizername = 'RAdam' lr = 1e-3 weightdecay = 1e-5 optimizerparams = {'lr': lr, 'weightdecay': weight_decay}

optimizer = getoptimizer(optimizername, model, optimizer_params) ```

  1. Get scheduler. ```python from opennnpytorch.scheduler import getscheduler

schedulername = 'PolynomialLRDecay' schedulertype = 'custom' schedulerparams = {'maxdecaysteps': 20, 'endlearning_rate': 0.0005, 'power': 0.9}

scheduler = getscheduler(schedulername, optimizer, schedulerparams, schedulertype) ```

  1. Get loss function. ```python from opennnpytorch.loss import getloss

lossfn = 'L1Loss' lossfn, onehot = getloss(loss_fn) ```

  1. Get metrics functions. ```python from opennnpytorch.metric import getmetric

metricsnames = ['accuracy', 'precision', 'recall', 'f1score'] numberclasses = 10 metricsfn = getmetric(metricsnames, nc=number_classes) ```

  1. Train/Test. ```python from opennn_pytorch.algo import train, test, prediction import random

algorithm = 'train' batchsize = 16 classnames = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] numberclasses = 10 saveevery = 5 epochs = 20 wandbflag = True wandbmetrics = ['accuracy', 'f1_score']

traindataloader = torch.utils.data.DataLoader(traindata, batchsize=batchsize, shuffle=True)

validdataloader = torch.utils.data.DataLoader(validdata, batchsize=batchsize, shuffle=False)

testdataloader = torch.utils.data.DataLoader(testdata, batch_size=1, shuffle=False)

if algorithm == 'train': train(traindataloader, validdataloader, model, optimizer, scheduler, lossfn, metricsfn, epochs, checkpoints, logs, device, saveevery, onehot, numberclasses, wandbflag, wandbmetrics) elif algorithm == 'test': testlogs = test(testdataloader, model, lossfn, metricsfn, logs, device, onehot, numberclasses, wandbflag, wandbmetrics) if pred: indices = random.sample(range(0, len(testdata)), 10) os.mkdir(testlogs + '/prediction', 0o777) for i in range(10): tmprange = range(numberclasses) tmpdct = {i: names[i] for i in tmprange} prediction(testdata, model, device, tmpdct, testlogs + f'/prediction/{i}', indices[i]) ```

Wandb

Wandb is very powerful logging tool, you will able to log metrics, hyperparamets, model hooks etc.

bash wandb login <your api token from wandb.ai>

Workspace

Table

Citation

Project citation.

License

Project is distributed under MIT License.

Owner

  • Name: Evgenii Pishchik
  • Login: epishchik
  • Kind: user
  • Location: Moscow, Russia

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
  - name: "OpenNN Contributors"
title: "OpenNN library for classification task"
date-released: 2022-04-03
url: "https://github.com/Pe4enIks/OpenNN"
license: MIT

GitHub Events

Total
Last Year

Issues and Pull Requests

Last synced: 5 months ago

All Time
  • Total issues: 0
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 0
  • Total pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

docker/Dockerfile docker
  • ubuntu 20.04 build