{"id":20948436,"url":"https://github.com/devbruce/yolov3-tf2","last_synced_at":"2026-04-27T00:31:01.097Z","repository":{"id":91859012,"uuid":"374917653","full_name":"devbruce/yolov3-tf2","owner":"devbruce","description":"YOLOv3 implementation with TensorFlow2","archived":false,"fork":false,"pushed_at":"2021-08-25T06:13:04.000Z","size":1422,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-02T06:12:57.222Z","etag":null,"topics":["coco","evaluation","object-detection","tensorflow2","tf2","yolo","yolov3","yolov3-tiny"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/devbruce.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}},"created_at":"2021-06-08T07:16:21.000Z","updated_at":"2023-06-19T18:05:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"3b2c8c97-54be-4b17-9b89-54a805e92022","html_url":"https://github.com/devbruce/yolov3-tf2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devbruce/yolov3-tf2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbruce%2Fyolov3-tf2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbruce%2Fyolov3-tf2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbruce%2Fyolov3-tf2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbruce%2Fyolov3-tf2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devbruce","download_url":"https://codeload.github.com/devbruce/yolov3-tf2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbruce%2Fyolov3-tf2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32318417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: 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":["coco","evaluation","object-detection","tensorflow2","tf2","yolo","yolov3","yolov3-tiny"],"created_at":"2024-11-19T00:18:53.994Z","updated_at":"2026-04-27T00:31:01.074Z","avatar_url":"https://github.com/devbruce.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YOLOv3 with TensorFlow2\n\n![tf-v2.5.0](https://img.shields.io/badge/TensorFlow-v2.5.0-orange)\n\n## Preview\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./preview/coco2017_val_550691_viz.jpg\" width=\"400\" height=\"250\" margin=\"5px\"\u003e\n    \u003cimg src=\"./preview/coco2017_val_555050_viz.jpg\" width=\"400\" height=\"250\" margin=\"5px\"\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\u003cbr\u003e\n\n## Performance\n\n- Inference Parameters: (`input_size`: 416, `conf_thr`: 0.05, `nms_iou_thr`: 0.45)\n\n### YOLOv3\n\n#### COCO Evaluation (with 2017 COCO Validation Dataset)\n\n```\n Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.366\n Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.640\n Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.380\n Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.185\n Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.403\n Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.544\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.290\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.425\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.439\n Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.238\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.477\n Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.625\n```\n\n#### Inference Speed\n\n- GPU(GeForce RTX 3090): About 15 ~ 16 FPS\n- CPU(AMD Ryzen 5 5600X 6-Core Processor): About 3 ~ 4 FPS\n\n\u003cbr\u003e\n\n### YOLOv3 Tiny\n\n#### COCO Evaluation (with 2017 COCO Validation Dataset)\n\n```\n Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.089\n Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.176\n Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.082\n Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.045\n Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.261\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.106\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.156\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.160\n Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.003\n Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.117\n Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.367\n```\n\n#### Inference Speed\n\n- GPU(GeForce RTX 3090): About 53 ~ 55 FPS\n- CPU(AMD Ryzen 5 5600X 6-Core Processor): About 19 ~ 20 FPS\n\n\u003cbr\u003e\u003cbr\u003e\n\n## Set Environment with Docker\n\n### Build Docker Image\n\n```bash\n$ docker build -t ${NAME}:${TAG} .\n```\n\n### Create Container\n\nCreate container with `docker create` or `docker run`\n\n\u003cbr\u003e\u003cbr\u003e\n\n## Initial Settings\n\nSet [`./configs/initial_settings.json`](./configs/initial_settings.json) (Default settings: COCO)  \nIf you want to only inference with uploaded pretrained coco weight file, keep default `classes`.\n\n```python\n{\n    \"project_name\": \"project_name\",  # Your project name\n    \"model\": \"yolo_v3\",              # [yolo_v3, yolo_v3_tiny]\n    \"classes\": {                     # Class index starts from 1 (Not 0)\n        \"1\": \"class 1\",\n        \"2\": \"class 2\",\n        ...\n    }\n}\n```\n\n\u003cbr\u003e\n\n### Set basic checkpoint files (COCO Pretrained Weight Files)\n\n- `./ckpts/yolo_v3_coco.h5` ([Google Drive Link](https://drive.google.com/file/d/1Fp4a42c2bOpDMK9FRgtMJEJ6IqgKp3TX/view?usp=sharing))  \n- `./ckpts/yolo_v3_tiny_coco.h5` ([Google Drive Link](https://drive.google.com/file/d/1Am96KN-dxZIQKp-t7Z-mquWpu4Ux4cus/view?usp=sharing))  \n\n\u003cbr\u003e\u003cbr\u003e\n\n## Inference\n\n\u003e Inference and Visualization Tutorial: [`./tutorial.ipynb`](./tutorial.ipynb)\n\n```python\nimport cv2\nfrom libs.inference import YoloInf\n\n\n# Load a image to inference\nimg_path = '...'\nimg_arr = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB)\n\n# Define YOLO Model to inference\nckpt_path = '...'\nyolo_inf = YoloInf(ckpt_path=ckpt_path)\n\n# Get inference result\npreds = yolo_inf.get(img_arr=img_arr, conf_thr=0.3)  # List of dicts\n```\n\n### Inference Output(`preds`) Format\n\n```python\n[\n    {\n        'bbox': [left:int, top:int, right:int, bottom:int]  # [x_min, y_min, x_max, y_max],\n        'confidence': confidence:float,\n        'class_index': class_index:int,\n        'class_name': class_name:str,\n    },\n    # ...\n]\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## Training Custom Dataset\n\n1. Set [`./configs/initial_settings.json`](./configs/initial_settings.json) (Compatible with COCO Format GT File)\n2. Save dataset as `Dataset Directory Structure` described below\n3. Run [`./train.py`](./train.py)\n\n\u003cbr\u003e\n\n### Training Script\n\n```bash\npython train.py\n```\n\n#### Options\n\n- `--epochs`: Number of training epochs (Default: `./configs/base.py`)\n- `--init_lr`: Initials (Default: `./configs/base.py`)\n- `--end_lr`: End learning rate (Default: `./configs/base.py`)\n- `--warmup_epochs`: Warm-up epochs (Default: `./configs/base.py`)\n- `--batch_size`: Number of batch size (Default: `./configs/base.py`)\n- `--transfer_coco`: Transfer pretrained coco weights (Default: `./configs/base.py`)\n- `--validation`: Number of training epochs (Default: `True`)\n\n\u003cbr\u003e\n\n### Dataset Directory Structure\n\n- Save dataset as `./datasets/${PROJECT_NAME}`  \n- Annotation json format: COCO (Refer to [coco-format](http://cocodataset.org/#format-data))\n\n\u003e `${PROJECT_NAME}` is from [`./configs/initial_settings.json`](./configs/initial_settings.json)\n\n```\n# ./datasets/\n${PROJECT_NAME}\n│\n│\n├── labels\n│   ├── train.json\n│   └── val.json\n│\n│\n└── imgs\n    │\n    ├── train\n    │      │\n    │      ├── 0001.png\n    │      ├── 0002.png\n    │      ├── 0003.png\n    │      ├── ...\n    │\n    │\n    └──── val\n           │\n           ├── 0001.png\n           ├── 0002.png\n           ├── 0003.png\n           ├── ...\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## COCO Evaluation\n\n### Evaluation Script\n\n```bash\npython eval_coco.py --ckpt=${CKPT_PATH} --img_prefix=${IMG_PREFIX} --coco_gt=${COCO_GT_PATH}\n```\n\n#### Options\n\n- `--ckpt`: Checkpoint file path\n- `--img_prefix`: Image directory path to evaluate\n- `--coco_gt`: COCO GT file path\n- `--conf_thr`: Inference confidence threshold (Default: 0.05)\n- `--img_exts`: Extensions of the image to evaluate. (Default=`['.png', '.jpg', '.jpeg']`)  \nIf you put another image extensions, separate elements by comma (`--img_exts=.jpeg,.PNG`)\n\n\u003cbr\u003e\u003cbr\u003e\n\n## Reference\n\n### Paper\n\n- YOLOv3: An Incremental Improvement ([arXiv Link](https://arxiv.org/abs/1804.02767))\n\n```\n@misc{redmon2018yolov3,\n      title={YOLOv3: An Incremental Improvement}, \n      author={Joseph Redmon and Ali Farhadi},\n      year={2018},\n      eprint={1804.02767},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV}\n}\n```\n\n\u003cbr\u003e\n\n### GitHub Repository\n\n- [pythonlessons / TensorFlow-2.x-YOLOv3](https://github.com/pythonlessons/TensorFlow-2.x-YOLOv3)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevbruce%2Fyolov3-tf2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevbruce%2Fyolov3-tf2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevbruce%2Fyolov3-tf2/lists"}