{"id":13642983,"url":"https://github.com/RyanCCC/yolo-series","last_synced_at":"2025-04-20T21:32:29.346Z","repository":{"id":45208153,"uuid":"397598657","full_name":"RyanCCC/yolo-series","owner":"RyanCCC","description":"YOLO算法的实现","archived":false,"fork":false,"pushed_at":"2022-12-28T03:39:35.000Z","size":31025,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-22T07:51:48.519Z","etag":null,"topics":["computer-vision","deep-learning","object-detection","object-tracking","pytorch","tensorflow","yolo"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RyanCCC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-18T12:49:47.000Z","updated_at":"2024-01-17T08:58:43.000Z","dependencies_parsed_at":"2023-01-31T05:46:30.140Z","dependency_job_id":null,"html_url":"https://github.com/RyanCCC/yolo-series","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/RyanCCC%2Fyolo-series","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanCCC%2Fyolo-series/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanCCC%2Fyolo-series/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanCCC%2Fyolo-series/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RyanCCC","download_url":"https://codeload.github.com/RyanCCC/yolo-series/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223779723,"owners_count":17201287,"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":["computer-vision","deep-learning","object-detection","object-tracking","pytorch","tensorflow","yolo"],"created_at":"2024-08-02T01:01:39.012Z","updated_at":"2025-04-20T21:32:29.321Z","avatar_url":"https://github.com/RyanCCC.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YOLO目标检测算法\n\n本仓库主要实现`YOLO`目标检测算法，欢迎参与到本仓库的建设或者提issue。本仓库有两个分支，一个分支为`main`，主要是基于`Tensorflow`实现yolo算法，另一个分支是`pytorch`，主要是基于`pytorch`实现yolo算法。`main`分支当前算法实现基本情况如下：\n\n|    算法     |    实现框架    |               备注                |\n| :---------: | :------------: | :-------------------------------: |\n|   YOLOV4    | Tensorflow-2.4 | 已实现，并通过测试 |\n|   YOLOV5    | Tensorflow-2.4 | 已实现，并经过测试 |\n| YOLOV5-v6.1 | Tensorflow-2.4 | 已实现，并通过测试 |\n|    YOLOX    | Tensorflow-2.4 | 已实现，并通过测试 |\n|   YOLOV7    | Tensorflow-2.4 | 已实现，并通过测试 |\n\n本仓库主要是算法的训练和算法的验证，后续的工程化应用部署可以参考另一个仓库：[Deployment](https://github.com/RyanCCC/Deployment)。部署仓库包括模型的量化与压缩、`python`或者`C++`的部署代码以及`OpenCV`和`TensorRT`等推理，喜欢或者对您有用的话可以给个:star:或者一起参与建设仓库:hand:。\n\n## 项目结构\n\n``` python\n+---cfg: 存放配置文件。\n|---components： CNN组件，如batch_renorm、注意力机制\n|---tools:存放工具：包括生成训练文档、类别统计等。\n|---tracking：目标跟踪Deepsort算法\n|---doc：存放YOLO资料文档，包括backbone、后处理等算法文档\n|---evaluate：存放模型评估方法\n|---font：字体\n|---logs：存放训练日志的文档\n|---model：存放模型和权重\n|   +---yolo4_voc_weights.h5：VOC预训练权重\n|   \\---yolo4_weight.h5：COCO预训练权重\n|---result：推理结果保存的文件夹\n|---video：视频保存文件夹\n|---yolov4：yolov4算法实现\n|---yolov5：yolov5算法实现\n|---yolov7：yolov7算法实现\n|---yolox：yolox算法实现\n\\---datasets：数据集，以VOC数据集格式\n    +---Annotations：数据集标注\n    +---ImageSets\n    |   \\---Main：划分训练集、测试集、验证集的txt文档\n    \\---JPEGImages：图像\n```\n\n\n## 数据集制作\n\n可按照`VOC`格式的数据集进行制作，主要的文件结构如下所示：\n\n```\n+---Annotation： 数据标注,xml格式\n|---ImageSets：划分数据集\n|   +---Main：存放txt位置\n|---JPEGSImages:存放图像\n|---labels.names：类别标签文档\n```\n\n当然也可以根据实际情况自定义自己的数据集结构，训练的时候只需要修改路径即可。另外在`tools`文件夹下有一些关于数据集脚本：\n\n1. `splitDataset.py`：划分数据集，即产生`ImageSets/Main`下的txt文档\n2. `voc_annotation.py`：生成输入到网络的文档格式，如下所示：\n\n```\nyour/dataset/root/path/JPEGImages/wc_102.jpg 261,607,341,778,0\nyour/dataset/root/path/camera_20210817154550.jpg 94,149,165,251,11 22,164,97,249,11\nyour/dataset/root/path/pavilion_20210812155531.jpg 111,2,458,337,10\n```\n\n**注意两者之前生成顺序**：先划分数据集，生成`ImageSets/Main`下的txt文档，然后根据`ImageSets/Main`下的txt文档生成适用于文档格式的数据集。\n\n## 模型训练\n\n在模型开始训练之前，先在`cfg`文档下找到对应的算法配置文件进行修改，修改内容包括数据集路径、训练参数参数等。在配置文件修改完相关配置后，可在每个算法文件下的含有`train`命名的文件进一步检查其他训练参数，如`yolov5`下的`train_yolov5.py`文件里设置的训练参数。\n\n当检查所有参数都没有错误后，可执行训练：\n\n```sh\npython train.py --model YOLOV5\n```\n\n参数说明：\n- **model**：表示训练的算法，如`YOLOV5`、`YOLOX`等。\n\n\n## 模型推理\n\n模型推理查看`predict.py`。参数说明：\n- **yolo**：选择推理算法，如`YOLOV5`、`YOLOV5V61`等算法。\n- **show**：在进行文件夹推理的时候是否展示图像，此处不建议。\n- **save**：是否保存推理结果。\n- **save_dir**：保存推理结果的文件夹位置\n- **model**：具体算法模型，可以是算法的权重、ONNX模型。\n- **source**：待检测的对象，可以是单张图像，也可以是文件夹\n\n推理的示范：\n\n```sh\n# directory inference\npython predict.py --yolo yolox --model /your/model/path/voc.h5 --source ./samples/\n```\n\n```sh\n# image inference\npython ./predict.py --yolo YOLOV7-TINY --source ./samples/test.jpg --model ./model/VOC2007_yolov7_tiny_2022_10_28.h5 --save\n```\n\n## 模型验证\n\n### MAP计算\n\n1. **统计测试集的ground_True**\n\n```sh\npython ./evaluate/get_gt_txt.py --testset ./VOC2017/ImageSets/Main/test.txt --annotation ./VOC2007/Annotations/ --gt_folder ./result/gt_folder\n```\n\n参数说明：\n- **testset**：划分测试数据集保存的`txt`文档\n- **annotation**：标注文件保存的文件夹\n- **gt_folder**：保存文件夹路径\n\n\n2. **计算模型推理测试集的结果**\n\n```sh\npython ./evaluate/get_dr_txt.py --testset ./VOC2007/ImageSets/Main/test.txt --pr_folder ./result/pr_folder --minoverlap 0.5 --model_path ./model/voc_yolox.h5 --image_path ./VOC2007/JPEGImages/ --model YOLOX\n```\n\n参数说明：\n- **testset**：划分测试数据集保存的`txt`文档\n- **pr_folder**：推理结果保存的文件夹，保存文件格式：`txt`。\n- **model_path**：推理模型的权重\n- **image_path**：图像路径\n- **model**：使用的算法模型\n\n3. **计算map的性能指标**\n\n```sh\npython ./evaluate/get_map.py --GT_PATH ./result/evaluate --DR_PATH ./result/pr_folder/ --IMG_PATH ./VOC2007/JPEGImages/ --MINOVERLAP 0.5\n```\n\n参数说明：\n\n- **GT_PATH**：脚本`get_gt_txt.py`生成文件的保存路径\n- **DR_PATH**：脚本`get_dr_txt.py`生成文件的保存路径\n- **IMG_PATH**：测试集图像的路径\n- **MINOVERLAP**：map@**的值\n\n### FPS计算\n\n在`predict.py`使用`dir`参数进行推理即可获取模型推理的fps。\n\n### FLOPs计算\n\n**FLOPs**：注意`s`小写，是floating point operations的缩写（s表复数），意指浮点运算数，理解为计算量。可以用来衡量算法/模型的复杂度。**FLOPS**：注意全大写，是floating point operations per second的缩写，意指每秒浮点运算次数，理解为计算速度。是一个衡量硬件性能的指标。\n\n### PARAMS计算\n\n详情可参考[Object-Detection-Metrics](./doc/Object-Detection-Metrics.md)\n\n\n## 模型转换\n\n在生产环境中需要进行模型转换，此处主要是将模型转换成ONNX格式模型。后续如果需要再转换成其他格式的模型，如`TensorRT`、`TFLite`等都可通过ONNX转换成对应的格式的模型。模型转换成ONNX的性能，如精确度、速度等是否与原模型存在差异，在此没有做相应的测试:dizzy_face:，感兴趣的可以自行测评一下模型性能差异。\n\n模型导出脚本：`export.py`，相关参数说明如下：\n\n- **model**：模型的权重路径\n- **saved_pb**：是否保存`pb`格式模型，带上这个参数后需要指定`saved_pb_dir`参数，表示模型保存的路径。\n- **saved_pb_dir**：保存`pb`模型的路径。\n- **yolo**：选择需要导出的YOLO算法。\n- **save_onnx**：ONNX模型保存的路径。\n- **opset**：ONNX的算子类型，默认12\n\n注意：使用权重模型的时候要在`cfg`目录下对应的配置文件中核实类别文件和anchor文件是否配置正确。另外后续需要导出成TensorRT的Engine模型或者Openvino的模型可以自行定义。当前的参数已经足以使用，后续假设㓟更多参数需求会持续更新优化。\n\n使用例子：\n\n``` sh\npython ./export.py --model ./model/VOC.h5 --yolo yolox --save_onnx 'voc_yolox_l_13_640_v1.onnx' \n```\n\n更多的ONNX推理和算法部署可参考：[Deployment](https://github.com/RyanCCC/Deployment)。\n\n\n## 参考\n\n更多算法的内容可以参考`doc`文件下的文档。\n\n1. [Object-Detection-Metrics](./doc/Object-Detection-Metrics.md)\n2. [mAP计算代码](https://github.com/Cartucho/mAP)\n3. [YOLOV3-tf2](https://github.com/zzh8829/yolov3-tf2)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRyanCCC%2Fyolo-series","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRyanCCC%2Fyolo-series","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRyanCCC%2Fyolo-series/lists"}