{ "info": { "author": "HrvvI", "author_email": "sbl1996@126.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython" ], "description": "\n# Overview\n[pytorch-hrvvi-ext](https://github.com/sbl1996/pytorch-hrvvi-ext) is my extension to PyTorch, which contains many \"out of the box\" tools to facilitate my everyday study. It is very easy to use them and integrate them to your projects.\nI will call it `hutil` below because of `import hutil`.\n\n# Install\n\n```bash\npip3 install -U --no-cache-dir --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple pytorch-hrvvi-ext\n```\n\n# Hightlights\n\n## Trainer\n`Trainer` is written on [ignite](https://github.com/pytorch/ignite), providing the following features:\n\n- Train your network in few lines without writing loops explicitly.\n- Automatic gpu support like Keras\n- Metric for both CV and NLP (Loss, Accuracy, Top-K Accuracy, mAP, BLEU)\n- Checkpoints of the whole trainer by epochs or metrics\n- Send metric history to WeChat\n\n## Datasets\n`hutil` contains many datasets wrapped by me providing `torchvison.datasets` style API. Some of them is much easier to train than VOC or COCO and more suitable for *BEGINNERS* in object detection. Now it contains the following datasets:\n\n- CaptchaDetectionOnline: generate captcha image and bounding boxes of chars online\n- SVHNDetection: [SVHN](http://ufldl.stanford.edu/housenumbers/) dataset for object detection\n- CocoDetection: unreleased dataset of torchvison with `hutil`'s transforms\n- VOCDetection: unreleased dataset of torchvison with `hutil`'s transforms\n\n## Transforms\nTransoforms in `hutil` transform inputs and targets of datasets simultaneously, which is more flexible than `torchvison.transforms` and makes it easier to do data augmentation for object detection with `torchvision.transforms` style API. The following transoforms is provided now:\n\n- Resize\n- CenterCrop\n- ToPercentCoords\n- Compose\n- InputTransform\n- TargetTransform\n\n## Others\n- train_test_split: Split a dataset to a train set and a test set with different (or same) transforms\n- Fullset: Transform your dataset to `hutil`' style dataset\n\n# Examples\n\n## CIFAR10\n\n```python\n\n# Data Preparation\n\ntrain_transforms = InputTransform(\n Compose([\n RandomCrop(32, padding=4),\n RandomHorizontalFlip(),\n ToTensor(),\n Normalize((0.4914, 0.4822, 0.4465), (0.247, 0.243, 0.261)),\n ])\n)\n\ntest_transform = InputTransform(\n Compose([\n ToTensor(),\n Normalize((0.4914, 0.4822, 0.4465), (0.247, 0.243, 0.261)),\n ])\n)\n\ndata_home = gpath(\"datasets/CIFAR10\")\nds = CIFAR10(data_home, train=True, download=True)\nds_train, ds_val = train_test_split(\n ds, test_ratio=0.04,\n transform=train_transforms,\n test_transform=test_transform,\n)\nds_test = CIFAR10(data_home, train=False, download=True)\n\n\n# Define network, loss and optimizer\n\nnet = ResNet(WideSEBasicBlock, [4,4,4], k=2)\nnet.apply(init_weights(nonlinearity='relu'))\ncriterion = nn.CrossEntropyLoss()\noptimizer = SGD(net.parameters(), lr=1e-1, momentum=0.9, dampening=0, weight_decay=5e-4, nesterov=True)\nlr_scheduler = MultiStepLR(optimizer, [40, 80, 110], gamma=0.2)\n\n\n# Define metrics\n\nmetrics = {\n 'loss': Loss(),\n 'acc': Accuracy(),\n}\n\n# Put it together with Trainer\n\ntrainer = Trainer(net, criterion, optimizer, lr_scheduler, metrics=metrics, save_path=gpath(\"models\"), name=\"CIFAR10-SE-WRN28-2\")\n\n# Show number of parameters\n\nsummary(net, (3,32,32))\n\n# Define batch size\n\ntrain_loader = DataLoader(ds_train, batch_size=32, shuffle=True, num_workers=1, pin_memory=True)\ntest_loader = DataLoader(ds_test, batch_size=128)\nval_loader = DataLoader(ds_val, batch_size=128)\n\n# Train and save good models by val loss (lower is better) after first 40 epochs\n\ntrainer.fit(train_loader, 100, val_loader=val_loader, save_by_metric='-val_loss', patience=40)\n```\n\n## CaptchaDetectionOnline\n```python\n\nletters = \"0123456789abcdefghijkmnopqrstuvwxyzABDEFGHJKMNRT\"\nNUM_CLASSES = len(letters) + 1\nWIDTH = 128\nHEIGHT = 48\nLOCATIONS = [\n (8, 3),\n (4, 2),\n]\nASPECT_RATIOS = [\n (1, 2, 1/2),\n (1, 2, 1/2),\n]\nASPECT_RATIOS = [torch.tensor(ars) for ars in ASPECT_RATIOS]\nNUM_FEATURE_MAPS = len(ASPECT_RATIOS)\nSCALES = compute_scales(NUM_FEATURE_MAPS, 0.2, 0.9)\nDEFAULT_BOXES = [\n compute_default_boxes(lx, ly, scale, ars)\n for (lx, ly), scale, ars in zip(LOCATIONS, SCALES, ASPECT_RATIOS)\n]\n\n\n# Define captcha dataset\n\nfonts = [\n gpath(\"fonts/msyh.ttf\"),\n gpath(\"fonts/sfsl0800.pfb.ttf\"),\n gpath(\"fonts/SimHei.ttf\"),\n gpath(\"fonts/Times New Roman.ttf\"),\n]\n\nfont_sizes = (28, 32, 36, 40, 44, 48)\nimage = ImageCaptcha(\n WIDTH, HEIGHT, fonts=fonts, font_sizes=font_sizes)\n\ntransform = Compose([\n ToPercentCoords(),\n ToTensor(),\n SSDTransform(SCALES, DEFAULT_BOXES, NUM_CLASSES),\n])\n\ntest_transform = Compose([\n ToTensor(),\n])\n\nds_train = CaptchaDetectionOnline(\n image, size=50000, letters=letters, rotate=20, transform=transform)\nds_val = CaptchaDetectionOnline(\n image, size=1000, letters=letters, rotate=20, transform=test_transform, online=False)\n\n\n# Define network, loss and optimizer\n\nout_channels = [\n (NUM_CLASSES + 4) * len(ars)\n for ars in ASPECT_RATIOS\n]\nnet = DSOD([3, 4, 4, 4], 36, out_channels=out_channels, reduction=1)\nnet.apply(init_weights(nonlinearity='relu'))\ncriterion = SSDLoss(NUM_CLASSES)\noptimizer = Adam(net.parameters(), lr=3e-4)\nlr_scheduler = MultiStepLR(optimizer, [40, 70, 100], gamma=0.1)\n\n\n# Define metrics for training and testing\n\nmetrics = {\n 'loss': TrainLoss(),\n}\ntest_metrics = {\n 'mAP': MeanAveragePrecision(\n SSDInference(\n width=WIDTH, height=HEIGHT,\n f_default_boxes=[ cuda(d) for d in DEFAULT_BOXES ],\n num_classes=NUM_CLASSES,\n )\n )\n}\n\n# Put it together with Trainer\n\ntrainer = Trainer(net, criterion, optimizer, lr_scheduler,\n metrics=metrics, evaluate_metrics=test_metrics,\n save_path=gpath(\"models\"), name=\"DSOD-CAPTCHA-48\")\n\n# Show numbers of parameters\n\nsummary(net, (3,HEIGHT, WIDTH))\n\n\n# Define batch size\n\ntrain_loader = DataLoader(\n ds_train, batch_size=32, shuffle=True, num_workers=1, pin_memory=True)\nval_loader = DataLoader(\n ds_val, batch_size=32, collate_fn=box_collate_fn)\n\n# Train and save by val mAP (higher is better) after first 10 epochs\n\ntrainer.fit(train_loader, 15, val_loader=val_loader, save_by_metric='val_mAP', patience=10)\n```\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sbl1996/pytorch-hrvvi-ext", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pytorch-hrvvi-ext", "package_url": "https://pypi.org/project/pytorch-hrvvi-ext/", "platform": "", "project_url": "https://pypi.org/project/pytorch-hrvvi-ext/", "project_urls": { "Homepage": "https://github.com/sbl1996/pytorch-hrvvi-ext" }, "release_url": "https://pypi.org/project/pytorch-hrvvi-ext/1.4.14/", "requires_dist": [ "torch", "bidict", "tqdm", "arrow", "itchat", "nltk", "toolz", "pytorch-ignite", "Pillow (>5.0.0)", "xmltodict", "torchvision", "googledrivedownloader", "pycocotools; extra == 'coco'" ], "requires_python": ">=3.6.0", "summary": "HrvvI's extension to PyTorch", "version": "1.4.14" }, "last_serial": 4890910, "releases": { "1.4.10": [ { "comment_text": "", "digests": { "md5": "7f88118a9226a39273b534818566bcdc", "sha256": "7c96b10471d083d74beca0bef761c5bf133d4bd3bc513681e53b5e5d55908518" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f88118a9226a39273b534818566bcdc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 43458, "upload_time": "2019-02-25T09:18:44", "url": "https://files.pythonhosted.org/packages/33/9c/266bde3fcdf11363a9e7958b9e82c1a67da9390b0336af17c1670527929a/pytorch_hrvvi_ext-1.4.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c38bb94961c484f0522c319b1996cf1b", "sha256": "0d034b05c6c4a077915f786d79ab616256432d4a2c4bb6f5cfd67cf460890bc0" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.10.tar.gz", "has_sig": false, "md5_digest": "c38bb94961c484f0522c319b1996cf1b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 30007, "upload_time": "2019-02-25T09:18:46", "url": "https://files.pythonhosted.org/packages/de/ad/fdc0bada14a24154a529361b6e62ca7cc5f0be8d45199dd5f939241d1f27/pytorch-hrvvi-ext-1.4.10.tar.gz" } ], "1.4.11": [ { "comment_text": "", "digests": { "md5": "f55d2b8f1898cd9178f9c74d871cd549", "sha256": "afc5072b7b16d441bf06e9509374f194fe54761acfa37e3c7e3e1c48ec780180" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f55d2b8f1898cd9178f9c74d871cd549", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 43486, "upload_time": "2019-02-25T09:29:06", "url": "https://files.pythonhosted.org/packages/cd/56/a435b6c0d4835b25e5fb562bdae2fa8b12b6cf1e3006b9a6e5274b015463/pytorch_hrvvi_ext-1.4.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38766e8f7149ef3850f2a6c39fcc82b9", "sha256": "5cfeb6b09179fd7bc393c20e1d9275ee8e9320e2b7ffa99a6a2ef5fcc06206ab" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.11.tar.gz", "has_sig": false, "md5_digest": "38766e8f7149ef3850f2a6c39fcc82b9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 30022, "upload_time": "2019-02-25T09:29:08", "url": "https://files.pythonhosted.org/packages/7b/c8/d478e19ada369b4bc53b2521d821d565160b6fecc54ab5490c77593f6b11/pytorch-hrvvi-ext-1.4.11.tar.gz" } ], "1.4.13": [ { "comment_text": "", "digests": { "md5": "7f7a288832ab44447f3b8931f0f361a3", "sha256": "dd0dd54b5bdbf21aab85978a76d10222a71447ffea2bb1e1639e7c46f9bcaf52" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.13-cp37-cp37m-macosx_10_7_x86_64.whl", "has_sig": false, "md5_digest": "7f7a288832ab44447f3b8931f0f361a3", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": ">=3.6.0", "size": 104076, "upload_time": "2019-03-03T13:05:51", "url": "https://files.pythonhosted.org/packages/ad/47/a1b0606e526baa24aa4b4203baccc676a2731189107fd9f5936af56d0d43/pytorch_hrvvi_ext-1.4.13-cp37-cp37m-macosx_10_7_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "13708dc72fd5ba494f68132d6b1e17df", "sha256": "6e27dbb129086d296bc38dd306fff0839bc99a72bdea139f2a63df41946dcf76" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.13.tar.gz", "has_sig": false, "md5_digest": "13708dc72fd5ba494f68132d6b1e17df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 31613, "upload_time": "2019-03-03T13:05:53", "url": "https://files.pythonhosted.org/packages/a4/dc/742c99cd68104778fa09ab10ab283d1c586089a6d63fa8cffc8e8fcb2c28/pytorch-hrvvi-ext-1.4.13.tar.gz" } ], "1.4.14": [ { "comment_text": "", "digests": { "md5": "10203c05adbb94a3e19a65c56aab518b", "sha256": "f19cd754e872b9e2629f52745d544bb05e9d3cffe043d13165c43c0055713e1a" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.14-cp37-cp37m-macosx_10_7_x86_64.whl", "has_sig": false, "md5_digest": "10203c05adbb94a3e19a65c56aab518b", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": ">=3.6.0", "size": 104075, "upload_time": "2019-03-03T13:26:06", "url": "https://files.pythonhosted.org/packages/d7/79/69b6fe09ca3ab7fc0d252214322d8f194630377559d7cd155d68325fb2e7/pytorch_hrvvi_ext-1.4.14-cp37-cp37m-macosx_10_7_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "6a0a6d971c7d3e97a17f649fe899d594", "sha256": "848c2ff56765cd27fac6fdccdf78278f20562cd34dea66326d610787a7fede5a" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.14.tar.gz", "has_sig": false, "md5_digest": "6a0a6d971c7d3e97a17f649fe899d594", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 31661, "upload_time": "2019-03-03T13:26:09", "url": "https://files.pythonhosted.org/packages/0d/fe/f69b0ab91acb3e88f078152ed11c6e2bcb2352d93d7f265d5d2e4df4f03a/pytorch-hrvvi-ext-1.4.14.tar.gz" } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "e0bb205b5076c0096d0e4d42a1179c96", "sha256": "2e3880e6217195b4369b068084b9b664471207ea458c14fc51a52cd2ec8efa3e" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0bb205b5076c0096d0e4d42a1179c96", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 39386, "upload_time": "2019-02-18T10:11:22", "url": "https://files.pythonhosted.org/packages/82/f3/96efbcfacb75f9fcbaba77268bcba634192f6ce7a055e47fee6357ea44f1/pytorch_hrvvi_ext-1.4.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e18ac2ca77090154f9c7b41a3f0b63df", "sha256": "882221281717d16c0e4d58aa7df040400333050c7f75d96cb27ee3fa3810101c" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.6.tar.gz", "has_sig": false, "md5_digest": "e18ac2ca77090154f9c7b41a3f0b63df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 28919, "upload_time": "2019-02-18T10:11:25", "url": "https://files.pythonhosted.org/packages/83/a3/dd696acb46caf4f64b144e0184972beabe114cadfe6157956aacb3c91003/pytorch-hrvvi-ext-1.4.6.tar.gz" } ], "1.4.7": [ { "comment_text": "", "digests": { "md5": "494ad24c16fc9ea5c8b27807333f3903", "sha256": "55f4556c593def5186d6a69a4f7f362d0f83dbb06bbd8051e6f4f7fc8f31a70b" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "494ad24c16fc9ea5c8b27807333f3903", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 39410, "upload_time": "2019-02-18T10:28:58", "url": "https://files.pythonhosted.org/packages/08/6b/863e49ed4420353259a0ea7080f915168c21a206bbd96e00ffaca294081f/pytorch_hrvvi_ext-1.4.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a5d5ebd2abd1c65b39f6b4c419afaf1", "sha256": "d6137a9416ac0ead6aae461234e3f091cee7f64a108c54db2ff0953d2c06b291" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.7.tar.gz", "has_sig": false, "md5_digest": "5a5d5ebd2abd1c65b39f6b4c419afaf1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 28945, "upload_time": "2019-02-18T10:29:00", "url": "https://files.pythonhosted.org/packages/0e/9c/a7977f79cdd9489660da79a9772c32a89e573f1e80be67c1d88c44f2129c/pytorch-hrvvi-ext-1.4.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "10203c05adbb94a3e19a65c56aab518b", "sha256": "f19cd754e872b9e2629f52745d544bb05e9d3cffe043d13165c43c0055713e1a" }, "downloads": -1, "filename": "pytorch_hrvvi_ext-1.4.14-cp37-cp37m-macosx_10_7_x86_64.whl", "has_sig": false, "md5_digest": "10203c05adbb94a3e19a65c56aab518b", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": ">=3.6.0", "size": 104075, "upload_time": "2019-03-03T13:26:06", "url": "https://files.pythonhosted.org/packages/d7/79/69b6fe09ca3ab7fc0d252214322d8f194630377559d7cd155d68325fb2e7/pytorch_hrvvi_ext-1.4.14-cp37-cp37m-macosx_10_7_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "6a0a6d971c7d3e97a17f649fe899d594", "sha256": "848c2ff56765cd27fac6fdccdf78278f20562cd34dea66326d610787a7fede5a" }, "downloads": -1, "filename": "pytorch-hrvvi-ext-1.4.14.tar.gz", "has_sig": false, "md5_digest": "6a0a6d971c7d3e97a17f649fe899d594", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 31661, "upload_time": "2019-03-03T13:26:09", "url": "https://files.pythonhosted.org/packages/0d/fe/f69b0ab91acb3e88f078152ed11c6e2bcb2352d93d7f265d5d2e4df4f03a/pytorch-hrvvi-ext-1.4.14.tar.gz" } ] }