{"id":46074729,"url":"https://github.com/horrible-dong/qtclassification","last_synced_at":"2026-03-01T14:04:17.348Z","repository":{"id":169387237,"uuid":"615661021","full_name":"horrible-dong/QTClassification","owner":"horrible-dong","description":"A lightweight and extensible toolbox for image classification and MORE","archived":false,"fork":false,"pushed_at":"2026-02-22T13:23:50.000Z","size":402,"stargazers_count":19,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-22T18:16:37.688Z","etag":null,"topics":["amp","cifar10","cifar100","configs","deep-learning","extensible","image-classfication","imagenet","lightweight","machine-learning","pytorch","resnet","template","toolbox","vision-transformer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/horrible-dong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-18T09:59:40.000Z","updated_at":"2026-01-03T16:06:04.000Z","dependencies_parsed_at":"2023-10-11T09:01:56.939Z","dependency_job_id":"452ec35f-7a5e-4c22-a08f-74c355a0b0ca","html_url":"https://github.com/horrible-dong/QTClassification","commit_stats":{"total_commits":95,"total_committers":1,"mean_commits":95.0,"dds":0.0,"last_synced_commit":"9db4ead1ac2ac4d9ef5462e5071912b6fdeb7d74"},"previous_names":["horrible-dong/qtclassification"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/horrible-dong/QTClassification","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/horrible-dong%2FQTClassification","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/horrible-dong%2FQTClassification/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/horrible-dong%2FQTClassification/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/horrible-dong%2FQTClassification/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/horrible-dong","download_url":"https://codeload.github.com/horrible-dong/QTClassification/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/horrible-dong%2FQTClassification/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29970545,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T13:32:00.443Z","status":"ssl_error","status_checked_at":"2026-03-01T13:32:00.084Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amp","cifar10","cifar100","configs","deep-learning","extensible","image-classfication","imagenet","lightweight","machine-learning","pytorch","resnet","template","toolbox","vision-transformer"],"created_at":"2026-03-01T14:04:16.880Z","updated_at":"2026-03-01T14:04:17.334Z","avatar_url":"https://github.com/horrible-dong.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"QTClassification\n========\n\n**A lightweight and extensible toolbox for image classification and MORE**\n\n[![version](https://img.shields.io/badge/Version-0.13.1-brightgreen)](https://github.com/horrible-dong/QTClassification)\n\u0026emsp;[![docs](https://img.shields.io/badge/Docs-Latest-orange)](README.md)\n\u0026emsp;[![license](https://img.shields.io/badge/License-Apache_2.0-blue)](LICENSE)\n\n\u003e Author: QIU Tian  \n\u003e Affiliation: Zhejiang University  \n\u003e \u003ca href=\"#installation\"\u003e🛠️ Installation\u003c/a\u003e | \u003ca href=\"#getting_started\"\u003e📘\n\u003e Documentation \u003c/a\u003e | \u003ca href=\"#dataset_zoo\"\u003e🌱 Dataset Zoo\u003c/a\u003e | \u003ca href=\"#model_zoo\"\u003e👀 Model Zoo\u003c/a\u003e  \n\u003e English | [简体中文](README_zh-CN.md)\n\n## \u003cspan id=\"Installation\"\u003eInstallation\u003c/span\u003e\n\nThe development environment of this project is `python 3.8 \u0026 pytorch 1.13.1+cu117`.\n\n1. Create your conda environment.\n\n```bash\nconda create -n qtcls python==3.8 -y\n```\n\n2. Enter your conda environment.\n\n```bash\nconda activate qtcls\n```\n\n3. Install PyTorch.\n\n```bash\npip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117\n```\n\nOr you can refer to [PyTorch](https://pytorch.org/get-started/previous-versions/) to install newer or older versions.\nPlease note that if pytorch ≥ 1.13, then python ≥ 3.7.2 is required.\n\n4. Install necessary dependencies.\n\n```bash\npip install -r requirements.txt\n```\n\n## \u003cspan id=\"getting_started\"\u003eGetting Started\u003c/span\u003e\n\nFor a quick experience, you can directly run the following commands:\n\n**Training**\n\n```bash\n# single-gpu\nCUDA_VISIBLE_DEVICES=0 \\\npython main.py \\\n  --data_root ./data \\\n  --dataset cifar10 \\\n  --model resnet50 \\\n  --batch_size 256 \\\n  --lr 1e-4 \\\n  --epochs 12 \\\n  --output_dir ./runs/__tmp__\n  \n# multi-gpu (requires pytorch\u003e=1.9.0)\nOMP_NUM_THREADS=1 CUDA_VISIBLE_DEVICES=0,1 \\\ntorchrun --nproc_per_node=2 main.py \\\n  --data_root ./data \\\n  --dataset cifar10 \\\n  --model resnet50 \\\n  --batch_size 256 \\\n  --lr 1e-4 \\\n  --epochs 12 \\\n  --output_dir ./runs/__tmp__\n  \n# multi-gpu (for any pytorch version, but with a \"deprecated\" warning)\nOMP_NUM_THREADS=1 CUDA_VISIBLE_DEVICES=0,1 \\\npython -m torch.distributed.launch --nproc_per_node=2 --use_env main.py \\\n  --data_root ./data \\\n  --dataset cifar10 \\\n  --model resnet50 \\\n  --batch_size 256 \\\n  --lr 1e-4 \\\n  --epochs 12 \\\n  --output_dir ./runs/__tmp__\n```\n\nThe `cifar10` dataset and `resnet50` pretrained weights will be automatically downloaded. Please keep the network\naccessible. The `cifar10` dataset will be downloaded to `./data`. The `resnet50` pretrained weights will be downloaded\nto `~/.cache/torch/hub/checkpoints`.\n\nDuring training, the config file, checkpoints, logs, and other outputs will be stored in `./runs/__tmp__`.\n\n**Evaluation**\n\n```bash\n# single-gpu\nCUDA_VISIBLE_DEVICES=0 \\\npython main.py \\\n  --data_root ./data \\\n  --dataset cifar10 \\\n  --model resnet50 \\\n  --batch_size 256 \\\n  --resume ./runs/__tmp__/checkpoint.pth \\\n  --eval\n  \n# multi-gpu (requires pytorch\u003e=1.9.0)\nOMP_NUM_THREADS=1 CUDA_VISIBLE_DEVICES=0,1 \\\ntorchrun --nproc_per_node=2 main.py \\\n  --data_root ./data \\\n  --dataset cifar10 \\\n  --model resnet50 \\\n  --batch_size 256 \\\n  --resume ./runs/__tmp__/checkpoint.pth \\\n  --eval\n  \n# multi-gpu (for any pytorch version, but with a \"deprecated\" warning)\nOMP_NUM_THREADS=1 CUDA_VISIBLE_DEVICES=0,1 \\\npython -m torch.distributed.launch --nproc_per_node=2 --use_env main.py \\\n  --data_root ./data \\\n  --dataset cifar10 \\\n  --model resnet50 \\\n  --batch_size 256 \\\n  --resume ./runs/__tmp__/checkpoint.pth \\\n  --eval\n```\n\n### Using a config file (Recommended)\n\nYou can also write the arguments into a config file (.py) and use `--config` / `-c` to import it.\nSee [configs](configs).\n\n**Training**\n\n```bash\n# full command\npython main.py --config /path/to/config.py\n\n# short command\npython main.py -c /path/to/config.py\n\n# example\npython main.py -c configs/_demo_.py\n```\n\n**Evaluation**\n\n```bash\n# full command\npython main.py --config /path/to/config.py --resume /path/to/checkpoint.pth --eval\n\n# short command\npython main.py -c /path/to/config.py -r /path/to/checkpoint.pth --eval\n\n# example\npython main.py -c configs/_demo_.py -r ./runs/cifar10/vit_tiny_patch4_32/checkpoint.pth --eval\n```\n\nThe config arguments override or merge with the command-line arguments `args` pre-defined in [`main.py`](main.py).\n\n**Other examples**\n\n```bash\npython main.py -c configs/_demo_.py -co  # clear the output dir first\npython main.py -c configs/_demo_.py --batch_size 100 --print_freq 200 --note bs100\npython main.py -c configs/_demo_.py --save_interval 5555  # do not save\npython main.py -c configs/_demo_.py --dataset food --dummy  # use fake data\npython main.py -c configs/_demo_.py -d cifar100 -b 400 --note cifar100-bs400\ntorchrun --nproc_per_node=2 main.py -c configs/_demo_.py  # multi-gpu\n```\n\nCommand-line arguments after `--config xxx` / `-c xxx` override the config arguments if the name is duplicated.\n\nFor more details and advanced usage of config files,\nplease refer to [\"How to write and import your configs\"](configs/README.md).\n\n**Frequently-used command-line arguments**\n\n|      Command-Line Argument      |                                                                                                                                           Description                                                                                                                                           |  Default Value   |\n|:-------------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:----------------:|\n|          `--data_root`          |                                                                                                                            Root directory where datasets are stored.                                                                                                                            |     `./data`     |\n|      `--dataset`\u003cbr /\u003e`-d`      |                                                                                    Dataset name defined in [qtcls/datasets/\\_\\_init\\_\\_.py](qtcls/datasets/__init__.py), such as `cifar10` and `imagenet1k`.                                                                                    |        /         |\n|            `--dummy`            |                                                                            Use fake data of `--dataset` / `-d` instead of loading real data (for fast debugging when no data is available or data loading is slow).                                                                             |     `False`      |\n|          `--model_lib`          |                                                         Model library where models come from. The toolbox's basic (default) model library is extended from `torchvision` and `timm`, and the toolbox also supports the original `timm`.                                                         |    `default`     |\n|       `--model`\u003cbr /\u003e`-m`       |                                              Model name defined in [qtcls/models/\\_\\_init\\_\\_.py](qtcls/models/__init__.py), such as `resnet50` and `vit_b_16`. Currently supported model names are listed in \u003ca href=\"#model_zoo\"\u003eModel Zoo\u003c/a\u003e.                                               |        /         |\n|          `--criterion`          |                                                                                            Criterion name defined in [qtcls/criterions/\\_\\_init\\_\\_.py](qtcls/criterions/__init__.py), such as `ce`.                                                                                            |    `default`     |\n|          `--optimizer`          |                                                                                      Optimizer name defined in [qtcls/optimizers/\\_\\_init\\_\\_.py](qtcls/optimizers/__init__.py), such as `sgd` and `adam`.                                                                                      |     `adamw`      |\n|          `--scheduler`          |                                                                                          Scheduler name defined in [qtcls/schedulers/\\_\\_init\\_\\_.py](qtcls/schedulers/__init__.py), such as `cosine`.                                                                                          |     `cosine`     |\n|          `--evaluator`          |                                                           Evaluator name defined in [qtcls/evaluators/\\_\\_init\\_\\_.py](qtcls/evaluators/__init__.py). The `default` evaluator computes the accuracy, recall, precision, and f1_score.                                                           |    `default`     |\n|     `--pretrain`\u003cbr /\u003e`-p`      | Path to the pre-trained weights, which is of the higher priority than the path stored in [qtcls/models/\\_pretrain\\_.py](qtcls/models/_pretrain_.py). For long-term use of a pretrained weight path, it is preferable to write it in [qtcls/models/\\_pretrain\\_.py](qtcls/models/_pretrain_.py). |        /         |\n|         `--no_pretrain`         |                                                                                                                            Forcibly not use the pre-trained weights.                                                                                                                            |     `False`      |\n|      `--resume`\u003cbr /\u003e`-r`       |                                                                                                                                 Checkpoint path to resume from.                                                                                                                                 |        /         |\n|    `--output_dir`\u003cbr /\u003e`-o`     |                                                                                                                       Path to save checkpoints, logs, and other outputs.                                                                                                                        | `./runs/__tmp__` |\n|        `--save_interval`        |                                                                                                                                Interval for saving checkpoints.                                                                                                                                 |       `1`        |\n| `--clear_output_dir`\u003cbr /\u003e`-co` |                                                                                                                       Clear the output dir (`--output_dir` / `-o`) first.                                                                                                                       |     `False`      |\n|          `--comp_dirs`          |                                                                                       List of log/output dir paths to compare. The compared logs will be plotted with the current log in the same figure.                                                                                       |       `[]`       |\n|    `--batch_size`\u003cbr /\u003e`-b`     |                                                                                                                                                /                                                                                                                                                |      `256`       |\n|           `--epochs`            |                                                                                                                                                /                                                                                                                                                |      `300`       |\n|             `--lr`              |                                                                                                                                         Learning rate.                                                                                                                                          |      `1e-4`      |\n|             `--amp`             |                                                                                                              Enable automatic mixed precision training (faster, less GPU memory).                                                                                                               |     `False`      |\n|            `--eval`             |                                                                                                                                         Evaluate only.                                                                                                                                          |     `False`      |\n|            `--note`             |                                                                                                    Note. The note content prints after each epoch, in case you forget what you are running.                                                                                                     |        /         |\n|         `--print_freq`          |                                                                                                                            Print to the terminal every N iterations.                                                                                                                            |       `50`       |\n\n### How to prepare data\n\nCurrently, `mnist`, `fashion_mnist`, `cifar10`, `cifar100`, `stl10`, `svhn`, `pets`, `flowers`, `cars` and `food`\ndatasets will be automatically downloaded to the `--data_root` directory. For other datasets, please refer to\n[\"How to put your datasets\"](data/README.md).\n\n### How to customize\n\nThe toolbox is flexible enough to be extended. Please follow the instructions below:\n\n[How to write and import your configs](configs/README.md)\n\n[How to put your datasets](data/README.md)\n\n[How to register your datasets](qtcls/datasets/README.md)\n\n[How to register your models](qtcls/models/README.md)\n\n[How to register your criterions](qtcls/criterions/README.md)\n\n[How to register your optimizers](qtcls/optimizers/README.md)\n\n[How to register your schedulers](qtcls/schedulers/README.md)\n\n[How to register your evaluators](qtcls/evaluators/README.md)\n\n## \u003cspan id=\"dataset_zoo\"\u003eDataset Zoo\u003c/span\u003e\n\nCurrently supported argument `--dataset` / `-d`:\n\n`mnist`, `fashion_mnist`, `cifar10`, `cifar100`, `stl10`, `svhn`, `pets`, `flowers`, `cars`, `food`,\n`imagenet1k`, `imagenet21k (also called imagenet22k)`,\nand all datasets in `folder` format (consistent with `imagenet` storage format,\nsee [\"How to put your datasets - About folder format datasets\"](data/README.md) for details).\n\n## \u003cspan id=\"model_zoo\"\u003eModel Zoo\u003c/span\u003e\n\nThe toolbox's basic (default) model library is extended from `torchvision` and `timm`,\nand the toolbox also supports the original `timm`.\n\n### default\n\nSet the argument `--model_lib` to `default`.\n\nCurrently supported argument `--model` / `-m`:\n\n**AlexNet**  \n`alexnet`\n\n**CaiT**  \n`cait_xxs24_224`, `cait_xxs24_384`, `cait_xxs36_224`, `cait_xxs36_384`, `cait_xs24_384`, `cait_s24_224`, `cait_s24_384`,\n`cait_s36_384`, `cait_m36_384`, `cait_m48_448`\n\n**ConvNeXt**  \n`convnext_tiny`, `convnext_small`, `convnext_base`, `convnext_large`\n\n**DeiT**  \n`deit_tiny_patch16_224`, `deit_small_patch16_224`, `deit_base_patch16_224`, `deit_base_patch16_384`,\n`deit_tiny_distilled_patch16_224`, `deit_small_distilled_patch16_224`, `deit_base_distilled_patch16_224`,\n`deit_base_distilled_patch16_384`, `deit3_small_patch16_224`, `deit3_small_patch16_384`, `deit3_medium_patch16_224`,\n`deit3_base_patch16_224`, `deit3_base_patch16_384`, `deit3_large_patch16_224`, `deit3_large_patch16_384`,\n`deit3_huge_patch14_224`, `deit3_small_patch16_224_in21ft1k`, `deit3_small_patch16_384_in21ft1k`,\n`deit3_medium_patch16_224_in21ft1k`, `deit3_base_patch16_224_in21ft1k`, `deit3_base_patch16_384_in21ft1k`,\n`deit3_large_patch16_224_in21ft1k`, `deit3_large_patch16_384_in21ft1k`, `deit3_huge_patch14_224_in21ft1k`\n\n**DenseNet**  \n`densenet121`, `densenet169`, `densenet201`, `densenet161`\n\n**EfficientNet**  \n`efficientnet_b0`, `efficientnet_b1`, `efficientnet_b2`, `efficientnet_b3`, `efficientnet_b4`, `efficientnet_b5`,\n`efficientnet_b6`, `efficientnet_b7`\n\n**GoogLeNet**  \n`googlenet`\n\n**Inception**  \n`inception_v3`\n\n**LeViT**  \n`levit_128s`, `levit_128`, `levit_192`, `levit_256`, `levit_256d`, `levit_384`\n\n**MLP-Mixer**  \n`mixer_s32_224`, `mixer_s16_224`, `mixer_b32_224`, `mixer_b16_224`, `mixer_b16_224_in21k`, `mixer_l32_224`,\n`mixer_l16_224`, `mixer_l16_224_in21k`, `mixer_b16_224_miil_in21k`, `mixer_b16_224_miil`, `gmixer_12_224`,\n`gmixer_24_224`, `resmlp_12_224`, `resmlp_24_224`, `resmlp_36_224`, `resmlp_big_24_224`, `resmlp_12_distilled_224`,\n`resmlp_24_distilled_224`, `resmlp_36_distilled_224`, `resmlp_big_24_distilled_224`, `resmlp_big_24_224_in22ft1k`,\n`resmlp_12_224_dino`, `resmlp_24_224_dino`, `gmlp_ti16_224`, `gmlp_s16_224`, `gmlp_b16_224`\n\n**MNASNet**  \n`mnasnet0_5`, `mnasnet0_75`, `mnasnet1_0`, `mnasnet1_3`\n\n**MobileNet**  \n`mobilenet_v2`, `mobilenetv3`, `mobilenet_v3_large`, `mobilenet_v3_small`\n\n**PoolFormer**  \n`poolformer_s12`, `poolformer_s24`, `poolformer_s36`, `poolformer_m36`, `poolformer_m48`\n\n**PVT**  \n`pvt_tiny`, `pvt_small`, `pvt_medium`, `pvt_large`, `pvt_huge_v2`\n\n**RegNet**  \n`regnet_y_400mf`, `regnet_y_800mf`, `regnet_y_1_6gf`, `regnet_y_3_2gf`, `regnet_y_8gf`, `regnet_y_16gf`,\n`regnet_y_32gf`, `regnet_y_128gf`, `regnet_x_400mf`, `regnet_x_800mf`, `regnet_x_1_6gf`, `regnet_x_3_2gf`,\n`regnet_x_8gf`, `regnet_x_16gf`, `regnet_x_32gf`\n\n**ResNet**  \n`resnet18`, `resnet34`, `resnet50`, `resnet101`, `resnet152`, `resnext50_32x4d`, `resnext101_32x8d`, `wide_resnet50_2`,\n`wide_resnet101_2`\n\n**ShuffleNetV2**  \n`shufflenet_v2_x0_5`, `shufflenet_v2_x1_0`, `shufflenet_v2_x1_5`, `shufflenet_v2_x2_0`\n\n**SqueezeNet**  \n`squeezenet1_0`, `squeezenet1_1`\n\n**Swin Transformer**  \n`swin_tiny_patch4_window7_224`, `swin_small_patch4_window7_224`, `swin_base_patch4_window7_224`,\n`swin_base_patch4_window12_384`, `swin_large_patch4_window7_224`, `swin_large_patch4_window12_384`,\n`swin_base_patch4_window7_224_in22k`, `swin_base_patch4_window12_384_in22k`, `swin_large_patch4_window7_224_in22k`,\n`swin_large_patch4_window12_384_in22k`\n\n**Swin Transformer V2**  \n`swinv2_tiny_window8_256`, `swinv2_tiny_window16_256`, `swinv2_small_window8_256`, `swinv2_small_window16_256`,\n`swinv2_base_window8_256`, `swinv2_base_window16_256`, `swinv2_base_window12_192_22k`,\n`swinv2_base_window12to16_192to256_22kft1k`, `swinv2_base_window12to24_192to384_22kft1k`,\n`swinv2_large_window12_192_22k`, `swinv2_large_window12to16_192to256_22kft1k`,\n`swinv2_large_window12to24_192to384_22kft1k`\n\n**TNT**  \n`tnt_s_patch16_224`, `tnt_b_patch16_224`\n\n**Twins**  \n`twins_pcpvt_small`, `twins_pcpvt_base`, `twins_pcpvt_large`, `twins_svt_small`, `twins_svt_base`, `twins_svt_large`\n\n**VGG**  \n`vgg11`, `vgg11_bn`, `vgg13`, `vgg13_bn`, `vgg16`, `vgg16_bn`, `vgg19`, `vgg19_bn`\n\n**Vision Transformer (timm)**  \n`vit_tiny_patch4_32`, `vit_tiny_patch16_224`, `vit_tiny_patch16_384`, `vit_small_patch32_224`, `vit_small_patch32_384`,\n`vit_small_patch16_224`, `vit_small_patch16_384`, `vit_small_patch8_224`, `vit_base_patch32_224`,\n`vit_base_patch32_384`, `vit_base_patch16_224`, `vit_base_patch16_384`, `vit_base_patch8_224`, `vit_large_patch32_224`,\n`vit_large_patch32_384`, `vit_large_patch16_224`, `vit_large_patch16_384`, `vit_large_patch14_224`,\n`vit_huge_patch14_224`, `vit_giant_patch14_224`\n\n**Vision Transformer (torchvision)**  \n`vit_b_16`, `vit_b_32`, `vit_l_16`, `vit_l_32`\n\n### timm\n\nSet the argument `--model_lib` to `timm`.\n\nCurrently supported argument `--model` / `-m`:  \nAll supported. Please refer to `timm` for specific model names.\n\n## License\n\nQTClassification is released under the Apache 2.0 license. Please see the [LICENSE](LICENSE) file for more information.\n\nCopyright (c) QIU Tian. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use these files except in compliance with\nthe License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific\nlanguage governing permissions and limitations under the License.\n\n## Citation\n\nIf you find QTClassification Toolbox useful in your research, please consider citing:\n\n```bibtex\n@misc{qtcls,\n    title={QTClassification},\n    author={Qiu, Tian},\n    howpublished={\\url{https://github.com/horrible-dong/QTClassification}},\n    year={2023}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhorrible-dong%2Fqtclassification","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhorrible-dong%2Fqtclassification","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhorrible-dong%2Fqtclassification/lists"}