{"id":13443160,"url":"https://github.com/datvuthanh/HybridNets","last_synced_at":"2025-03-20T16:30:45.795Z","repository":{"id":37678139,"uuid":"441117333","full_name":"datvuthanh/HybridNets","owner":"datvuthanh","description":"HybridNets: End-to-End Perception Network","archived":false,"fork":false,"pushed_at":"2023-12-01T04:45:28.000Z","size":57014,"stargazers_count":592,"open_issues_count":36,"forks_count":121,"subscribers_count":16,"default_branch":"main","last_synced_at":"2024-10-28T06:57:40.591Z","etag":null,"topics":["autonomous-driving","bifpn","detection","end2end-network","hybridnets","multitask-learning","segmentation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datvuthanh.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}},"created_at":"2021-12-23T08:44:13.000Z","updated_at":"2024-10-24T13:35:35.000Z","dependencies_parsed_at":"2023-12-01T05:41:01.956Z","dependency_job_id":null,"html_url":"https://github.com/datvuthanh/HybridNets","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datvuthanh%2FHybridNets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datvuthanh%2FHybridNets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datvuthanh%2FHybridNets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datvuthanh%2FHybridNets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datvuthanh","download_url":"https://codeload.github.com/datvuthanh/HybridNets/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244649703,"owners_count":20487470,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["autonomous-driving","bifpn","detection","end2end-network","hybridnets","multitask-learning","segmentation"],"created_at":"2024-07-31T03:01:56.901Z","updated_at":"2025-03-20T16:30:45.787Z","avatar_url":"https://github.com/datvuthanh.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# HybridNets: End2End Perception Network\n\n\n\u003cdiv align=\"center\"\u003e\n \n![logo](images/hybridnets.jpg)  \n**HybridNets Network Architecture.**  \n\n[![Generic badge](https://img.shields.io/badge/License-MIT-\u003cCOLOR\u003e.svg?style=for-the-badge)](https://github.com/datvuthanh/HybridNets/blob/main/LICENSE) \n[![PyTorch - Version](https://img.shields.io/badge/PYTORCH-1.10+-red?style=for-the-badge\u0026logo=pytorch)](https://pytorch.org/get-started/locally/) \n[![Python - Version](https://img.shields.io/badge/PYTHON-3.7+-red?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://www.python.org/downloads/)\n\u003cbr\u003e\n\u003c!-- [![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url] --\u003e\n \n\u003c/div\u003e\n\n\u003e [**HybridNets: End-to-End Perception Network**](https://arxiv.org/abs/2203.09035)\n\u003e\n\u003e by Dat Vu, Bao Ngo, [Hung Phan](https://scholar.google.com/citations?user=V3paQH8AAAAJ\u0026hl=vi\u0026oi=ao)\u003csup\u003e :email:\u003c/sup\u003e     [*FPT University*](https://uni.fpt.edu.vn/en-US/Default.aspx)\n\u003e\n\u003e  (\u003csup\u003e:email:\u003c/sup\u003e) corresponding author.\n\u003e\n\u003e *arXiv technical report ([arXiv 2203.09035](https://arxiv.org/abs/2203.09035))*\n    \n[![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/hybridnets-end-to-end-perception-network-1/traffic-object-detection-on-bdd100k)](https://paperswithcode.com/sota/traffic-object-detection-on-bdd100k?p=hybridnets-end-to-end-perception-network-1)\n[![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/hybridnets-end-to-end-perception-network-1/lane-detection-on-bdd100k)](https://paperswithcode.com/sota/lane-detection-on-bdd100k?p=hybridnets-end-to-end-perception-network-1)\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#project-structure\"\u003eProject Structure\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#demo\"\u003eDemo\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#data-preparation\"\u003eData Preparation\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#training\"\u003eTraining\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#training-tips\"\u003eTraining Tips\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#results\"\u003eResults\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgements\"\u003eAcknowledgements\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#citation\"\u003eCitation\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n## About The Project\n\u003c!-- #### \u003cdiv align=center\u003e **HybridNets** = **real-time** :stopwatch: * **state-of-the-art** :1st_place_medal: * (traffic object detection + drivable area segmentation + lane line detection) :motorway: \u003c/div\u003e --\u003e\nHybridNets is an end2end perception network for multi-tasks. Our work focused on traffic object detection, drivable area segmentation and lane detection.  HybridNets can run real-time on embedded systems, and obtains SOTA Object Detection, Lane Detection on BDD100K Dataset.\n![intro](images/intro.jpg)  \n\n### Project Structure\n```bash\nHybridNets\n│   backbone.py                   # Model configuration\n|   export.py                     # UPDATED 10/2022: onnx weight with accompanying .npy anchors\n│   hubconf.py                    # Pytorch Hub entrypoint\n│   hybridnets_test.py            # Image inference\n│   hybridnets_test_videos.py     # Video inference\n│   train.py                      # Train script\n│   train_ddp.py                  # DistributedDataParallel training (Multi GPUs)\n│   val.py                        # Validate script\n│   val_ddp.py                    # DistributedDataParralel validating (Multi GPUs)\n│\n├───encoders                      # https://github.com/qubvel/segmentation_models.pytorch/tree/master/segmentation_models_pytorch/encoders\n│       ...\n│\n├───hybridnets\n│       autoanchor.py             # Generate new anchors by k-means\n│       dataset.py                # BDD100K dataset\n│       loss.py                   # Focal, tversky (dice)\n│       model.py                  # Model blocks\n│\n├───projects\n│       bdd100k.yml               # Project configuration\n│\n├───ros                           # C++ ROS Package for path planning\n│       ...\n│\n└───utils\n    |   constants.py\n    │   plot.py                   # Draw bounding box\n    │   smp_metrics.py            # https://github.com/qubvel/segmentation_models.pytorch/blob/master/segmentation_models_pytorch/metrics/functional.py\n    │   utils.py                  # Various helper functions (preprocess, postprocess, eval...)\n```\n\n## Getting Started [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1dpMrjgJs3qKxaKR833RJDyZTh2O1-Wyn?usp=sharing#forceEdit=true\u0026sandboxMode=true)\n### Installation\nThe project was developed with [**Python\u003e=3.7**](https://www.python.org/downloads/) and [**Pytorch\u003e=1.10**](https://pytorch.org/get-started/locally/).\n```bash\ngit clone https://github.com/datvuthanh/HybridNets\ncd HybridNets\npip install -r requirements.txt\n```\n \n### Demo\n```bash\n# Download end-to-end weights\ncurl --create-dirs -L -o weights/hybridnets.pth https://github.com/datvuthanh/HybridNets/releases/download/v1.0/hybridnets.pth\n\n# Image inference\npython hybridnets_test.py -w weights/hybridnets.pth --source demo/image --output demo_result --imshow False --imwrite True\n\n# Video inference\npython hybridnets_test_videos.py -w weights/hybridnets.pth --source demo/video --output demo_result\n\n# Result is saved in a new folder called demo_result\n```\n\n## Usage\n### Data Preparation\nRecommended dataset structure:\n```bash\nHybridNets\n└───datasets\n    ├───imgs\n    │   ├───train\n    │   └───val\n    ├───det_annot\n    │   ├───train\n    │   └───val\n    ├───da_seg_annot\n    │   ├───train\n    │   └───val\n    └───ll_seg_annot\n        ├───train\n        └───val\n```\nUpdate your dataset paths in `projects/your_project_name.yml`.\n\nFor BDD100K: \n- [imgs](https://bdd-data.berkeley.edu/)\n- [det_annot](https://drive.google.com/file/d/1Ge-R8NTxG1eqd4zbryFo-1Uonuh0Nxyl/view)\n- [da_seg_annot](https://drive.google.com/file/d/1xy_DhUZRHR8yrZG3OwTQAHhYTnXn7URv/view)\n- [ll_seg_annot](https://drive.google.com/file/d/1lDNTPIQj_YLNZVkksKM25CvCHuquJ8AP/view)\n\n### Training\n#### 1) Edit or create a new project configuration, using bdd100k.yml as a template. Augmentation params are here.\n```python\n# mean and std of dataset in RGB order\nmean: [0.485, 0.456, 0.406]\nstd: [0.229, 0.224, 0.225]\n\n# bdd100k anchors\nanchors_scales: '[2**0, 2**0.70, 2**1.32]'\nanchors_ratios: '[(0.62, 1.58), (1.0, 1.0), (1.58, 0.62)]'\n\n# BDD100K officially supports 10 classes\n# obj_list: ['person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', 'bicycle', 'traffic light', 'traffic sign']\nobj_list: ['car']\nobj_combine: ['car', 'bus', 'truck', 'train']  # if single class, combine these classes into 1 single class in obj_list\n                                               # leave as empty list ([]) to not combine classes\n\nseg_list: ['road',\n          'lane']\nseg_multilabel: false  # a pixel can belong to multiple labels (i.e. lane line + underlying road)\n\ndataset:\n  dataroot: path/to/imgs\n  labelroot: path/to/det_annot\n  segroot:\n  # must be in correct order with seg_list\n  - path/to/da_seg_annot\n  - path/to/ll_seg_annot\n  fliplr: 0.5\n  flipud: 0.0\n  hsv_h: 0.015\n  hsv_s: 0.7\n  hsv_v: 0.4\n...\n```\n\n#### 2) Train\n```bash\npython train.py -p bdd100k        # your_project_name\n                -c 3              # coefficient of effnet backbone, result from paper is 3\n            OR  -bb repvgg_b0     # change your backbone with timm\n                -n 4              # num_workers\n                -b 8              # batch_size per gpu\n                -w path/to/weight # use 'last' to resume training from previous session\n                --freeze_det      # freeze detection head, others: --freeze_backbone, --freeze_seg\n                --lr 1e-5         # learning rate\n                --optim adamw     # adamw | sgd\n                --num_epochs 200\n```\nPlease check `python train.py --help` for cheat codes.\n\n**~~IMPORTANT~~ (deprecated):** If you want to train on multiple gpus, use `train_ddp.py`. Tested on NVIDIA DGX with 8xA100 40GB.  \nWhy didn't we combine DDP into the already existing `train.py` script?\n1. Lots of if-else.\n2. Don't want to break functioning stuffs.\n3. Lazy. \n\n**Update 24/06/2022:** `train_ddp.py` broke because we have a lot of things changed. Therefore, we decided to write a merged `train.py` with DDP support for easier maintainance. In the meantime, please clone [this commit](https://github.com/datvuthanh/HybridNets/tree/ecc835ca1f68b17c9d1deb926f9e7bbe8455ccee) with a working `train_ddp.py` script if you really have to.\n\n#### 3) Evaluate\n```bash\npython val.py -w checkpoints/weight.pth\n```\nAgain, check `python val.py --help` for god mode.\n\n**Validation process got killed! What do I do?**\n=\u003e This is because we use a default confidence threshold of 0.001 to compare with other networks. So when calculating metrics, it has to handle a large amount of bounding boxes, leading to out-of-memory, and finally exploding the program before the next epoch.\n\nThat being said, there are multiple ways to circumvent this problem, choose the best that suit you:\n\n- Train on a high-RAM instance (RAM as in main memory, not VRAM in GPU). For your reference, we can only val the combined `car` class with 64GB RAM.\n- Train with `python train.py --cal_map False` to not calculate metrics when validating. This option will only print validation losses. When the losses seem to flatten and the weather is nice, rent a high-RAM instance to validate the best weight with `python val.py -w checkpoints/xxx_best.pth`. We actually did this to save on cost.\n- Reduce the confidence threshold with `python train.py --conf_thres 0.5` or `python val.py --conf_thres 0.5`, depending on your application and end goals. You don't have to get best recall unless you're either helping us by experimenting :smiling_face_with_three_hearts: or competing with us :angry:.\n\n#### 4) Export\n```bash\npython export.py -w checkpoints/weight.pth --width 640 --height 384\n```\nThis automatically creates an ONNX weight and an `anchor_{H}_{W}.npy` file to use in postprocessing. Refer to the ROS section for usage example.\n\n## Training Tips\n### Anchors :anchor:\nIf your dataset is intrinsically different from COCO or BDD100K, or the metrics of detection after training are not as high as expected, you could try enabling autoanchor in `project.yml`:\n```python\n...\nmodel:\n  image_size:\n  - 640\n  - 384\nneed_autoanchor: true  # set to true to run autoanchor\npin_memory: false\n...\n```\nThis automatically finds the best combination of anchor scales and anchor ratios for your dataset. Then you can manually edit them `project.yml` and disable autoanchor.\n \nIf you're feeling lucky, maybe mess around with base_anchor_scale in `backbone.py`:\n```python\nclass HybridNetsBackbone(nn.Module):\n  ...\n  self.pyramid_levels = [5, 5, 5, 5, 5, 5, 5, 5, 6]\n  self.anchor_scale = [1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,]\n  self.aspect_ratios = kwargs.get('ratios', [(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)])\n  ...\n```\nand `model.py`:\n```python\nclass Anchors(nn.Module):\n  ...\n  for scale, ratio in itertools.product(self.scales, self.ratios):\n    base_anchor_size = self.anchor_scale * stride * scale\n    anchor_size_x_2 = base_anchor_size * ratio[0] / 2.0\n    anchor_size_y_2 = base_anchor_size * ratio[1] / 2.0\n  ...\n```\nto get a grasp on how anchor boxes work.\n \nAnd because a picture is worth a thousand words, you can visualize your anchor boxes in [Anchor Computation Tool](https://github.com/Cli98/anchor_computation_tool).\n### Training stages\nWe experimented with training stages and found that this settings achieved the best results:\n \n1. `--freeze_seg True` ~ 200 epochs\n2. `--freeze_backbone True --freeze_det True` ~ 50 epochs\n3. Train end-to-end ~ 50 epochs\n\n The reason being detection head is harder to converge early on, so we basically skipped segmentation head to focus on detection first.\n \n## Results\n### Traffic Object Detection\n \n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eResult \u003c/th\u003e\u003cth\u003eVisualization\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\n\n|        Model       |  Recall (%)  |   mAP@0.5 (%)   |\n|:------------------:|:------------:|:---------------:|\n|     `MultiNet`     |     81.3     |       60.2      |\n|      `DLT-Net`     |     89.4     |       68.4      |\n|   `Faster R-CNN`   |     77.2     |       55.6      |\n|      `YOLOv5s`     |     86.8     |       77.2      |\n|       `YOLOP`      |     89.2     |       76.5      |\n|  **`HybridNets`**  |   **92.8**   |     **77.3**    |\n\n\u003c/td\u003e\u003ctd\u003e\n\n\u003cimg src=\"images/det1.jpg\" width=\"50%\" /\u003e\u003cimg src=\"images/det2.jpg\" width=\"50%\" /\u003e\n\n\u003c/td\u003e\u003c/tr\u003e \u003c/table\u003e\n \n\u003c!--\n|        Model       |  Recall (%)  |   mAP@0.5 (%)   |\n|:------------------:|:------------:|:---------------:|\n|     `MultiNet`     |     81.3     |       60.2      |\n|      `DLT-Net`     |     89.4     |       68.4      |\n|   `Faster R-CNN`   |     77.2     |       55.6      |\n|      `YOLOv5s`     |     86.8     |       77.2      |\n|       `YOLOP`      |     89.2     |       76.5      |\n|  **`HybridNets`**  |   **92.8**   |     **77.3**    |\n\n\u003cp align=\"middle\"\u003e\n \u003cimg src=\"images/det1.jpg\" width=\"49%\" /\u003e\n \u003cimg src=\"images/det2.jpg\" width=\"49%\" /\u003e \n\u003c/p\u003e\n\n--\u003e\n \n### Drivable Area Segmentation\n \n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eResult \u003c/th\u003e\u003cth\u003eVisualization\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\n\n|       Model      | Drivable mIoU (%) |\n|:----------------:|:-----------------:|\n|    `MultiNet`    |        71.6       |\n|     `DLT-Net`    |        71.3       |\n|     `PSPNet`     |        89.6       |\n|      `YOLOP`     |        91.5       |\n| **`HybridNets`** |      **90.5**     |\n\n\u003c/td\u003e\u003ctd\u003e\n\n\u003cimg src=\"images/road1.jpg\" width=\"50%\" /\u003e\u003cimg src=\"images/road2.jpg\" width=\"50%\" /\u003e\n\n\u003c/td\u003e\u003c/tr\u003e \u003c/table\u003e\n \n\u003c!--\n|       Model      | Drivable mIoU (%) |\n|:----------------:|:-----------------:|\n|    `MultiNet`    |        71.6       |\n|     `DLT-Net`    |        71.3       |\n|     `PSPNet`     |        89.6       |\n|      `YOLOP`     |        91.5       |\n| **`HybridNets`** |      **90.5**     |\n\u003cp align=\"middle\"\u003e\n \u003cimg src=\"images/road1.jpg\" width=\"49%\" /\u003e\n \u003cimg src=\"images/road2.jpg\" width=\"49%\" /\u003e \n\u003c/p\u003e\n--\u003e\n \n### Lane Line Detection\n \n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eResult \u003c/th\u003e\u003cth\u003eVisualization\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\n\n|      Model       | Accuracy (%) | Lane Line IoU (%) |\n|:----------------:|:------------:|:-----------------:|\n|      `Enet`      |     34.12    |       14.64       |\n|      `SCNN`      |     35.79    |       15.84       |\n|    `Enet-SAD`    |     36.56    |       16.02       |\n|      `YOLOP`     |     70.5     |        26.2       |\n| **`HybridNets`** |   **85.4**   |      **31.6**     |\n\n\u003c/td\u003e\u003ctd\u003e\n\n\u003cimg src=\"images/lane1.jpg\" width=\"50%\" /\u003e\u003cimg src=\"images/lane2.jpg\" width=\"50%\" /\u003e\n\n\u003c/td\u003e\u003c/tr\u003e \u003c/table\u003e\n \n\u003c!--\n|      Model       | Accuracy (%) | Lane Line IoU (%) |\n|:----------------:|:------------:|:-----------------:|\n|      `Enet`      |     34.12    |       14.64       |\n|      `SCNN`      |     35.79    |       15.84       |\n|    `Enet-SAD`    |     36.56    |       16.02       |\n|      `YOLOP`     |     70.5     |        26.2       |\n| **`HybridNets`** |   **85.4**   |      **31.6**     |\n \n\u003cp align=\"middle\"\u003e\n \u003cimg src=\"images/lane1.jpg\" width=\"49%\" /\u003e\n \u003cimg src=\"images/lane2.jpg\" width=\"49%\" /\u003e \n\u003c/p\u003e\n--\u003e\n\u003cdiv align=\"center\"\u003e\n \n ![](images/full_video.gif)\n \n [Original footage](https://www.youtube.com/watch?v=lx4yA1LEi9c) courtesy of [Hanoi Life](https://www.youtube.com/channel/UChT1Cpf_URepCpsdIqjsDHQ)\n \n \u003c/div\u003e\n \n## License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n \n## Acknowledgements\n\nOur work would not be complete without the wonderful work of the following authors:\n\n* [EfficientDet](https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch)\n* [YOLOv5](https://github.com/ultralytics/yolov5)\n* [YOLOP](https://github.com/hustvl/YOLOP)\n* [KMeans Anchors Ratios](https://github.com/mnslarcher/kmeans-anchors-ratios)\n* [Anchor Computation Tool](https://github.com/Cli98/anchor_computation_tool)\n\n## Citation\n\nIf you find our paper and code useful for your research, please consider giving a star :star:   and citation :pencil: :\n\n```BibTeX\n@misc{vu2022hybridnets,\n      title={HybridNets: End-to-End Perception Network}, \n      author={Dat Vu and Bao Ngo and Hung Phan},\n      year={2022},\n      eprint={2203.09035},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV}\n}\n```\n \n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/othneildrew/Best-README-Template.svg?style=for-the-badge\n[contributors-url]: https://github.com/datvuthanh/HybridNets/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/othneildrew/Best-README-Template.svg?style=for-the-badge\n[forks-url]: https://github.com/datvuthanh/HybridNets/network/members\n[stars-shield]: https://img.shields.io/github/stars/othneildrew/Best-README-Template.svg?style=for-the-badge\n[stars-url]: https://github.com/datvuthanh/HybridNets/stargazers\n[issues-shield]: https://img.shields.io/github/issues/othneildrew/Best-README-Template.svg?style=for-the-badge\n[issues-url]: https://github.com/datvuthanh/HybridNets/issues\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatvuthanh%2FHybridNets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatvuthanh%2FHybridNets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatvuthanh%2FHybridNets/lists"}