{"id":20895614,"url":"https://github.com/yatenglg/ssd-pytorch","last_synced_at":"2025-04-05T06:08:05.798Z","repository":{"id":43537156,"uuid":"209227142","full_name":"yatengLG/SSD-Pytorch","owner":"yatengLG","description":"SSD目标检测算法(Single Shot MultiBox Detector)(简单,明了,易用,全中文注释,单机多卡训练,视频检测)( If you train the model on a single computer and mutil GPU, this program will be your best choice , easier to use and easier to understand )","archived":false,"fork":false,"pushed_at":"2023-12-20T01:34:17.000Z","size":74950,"stargazers_count":402,"open_issues_count":2,"forks_count":187,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-29T05:07:54.131Z","etag":null,"topics":["deep-learning","object-detection","pytorch","ssd"],"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/yatengLG.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":"2019-09-18T05:43:43.000Z","updated_at":"2025-03-17T16:44:21.000Z","dependencies_parsed_at":"2025-01-18T22:38:56.734Z","dependency_job_id":"73236319-bcf7-4645-a983-06443e21e822","html_url":"https://github.com/yatengLG/SSD-Pytorch","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/yatengLG%2FSSD-Pytorch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yatengLG%2FSSD-Pytorch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yatengLG%2FSSD-Pytorch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yatengLG%2FSSD-Pytorch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yatengLG","download_url":"https://codeload.github.com/yatengLG/SSD-Pytorch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247294539,"owners_count":20915340,"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":["deep-learning","object-detection","pytorch","ssd"],"created_at":"2024-11-18T10:29:36.979Z","updated_at":"2025-04-05T06:08:05.777Z","avatar_url":"https://github.com/yatengLG.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"GIthub使用指北:\n\n**1.想将项目拷贝到自己帐号下就fork一下.**\n\n**2.持续关注项目更新就star一下**\n\n**3.watch是设置接收邮件提醒的.**\n\n---\n\n# SSD-Pytorch \n\nSSD目标检测算法(Single Shot MultiBox Detector)(简单,明了,易用,中文注释)\n\n(If you train the model on a single computer and mutil GPU, this program will be your best choice , easier to use and easier to understand)\n\n模型.训练.检测等流程全部面向对象实现,简单易用.\n\n全中文备注,详细说明每一步步骤.\n\n欢迎\n[![](https://img.shields.io/github/stars/yatengLG/SSD-Pytorch?style=social)](https://github.com/yatengLG/SSD-Pytorch/star) \n\n[![](https://img.shields.io/github/forks/yatengLG/SSD-Pytorch?style=social)](https://github.com/yatengLG/SSD-Pytorch/fork)\n\n![image](Images/000133_det.jpg)\n\n***\n## 特点\n相较于其他SSD项目,本项目在模型实现上更为合理.多GPU调用方面更加简单灵活.\n\n将[基础网络,额外层]合并,利于替换基础网络,也便于改变网络连接情况,将[Conf分类网络和loc回归网络]单独出来作为整体,也便于修改增删,至此便是全部的模型构架,输出的是分类网络和回归网络的结果.这种架构使得模型的输出不论是在多GPU还是单GPU环境中输出保持了一致,在多GPU训练扩展时优势尤为显著,避免了很多扩展上的麻烦.\n\n并在模型中预留了检测图片以及检测视频的方法.在初始化模型,载入权重后,便可直接调用进行检测.避免了多次重复编写的以及调用的麻烦.\n\n将[后处理]单独作为一个结构,便于在测试以及检测过程中使用,既方便又便捷,也便于其他项目进行扩展使用.\n\n将[损失函数]以及训练过程写入[训练器]中,不论在结构合理性还是使用合理性方面都更为合适.\n\n[训练器]中集成了训练所需的全部操作,[损失函数],[优化器],[学习率衰减]等,并将由于本项目[数据载入器]分为训练以及测试俩种,故而也加入了训练器中.使得训练器一次配置,多次使用,通过预留的接口,在不失方便的同时保留了灵活性.设置好训练器参数后,只需传入 模型以及数据集 即可完成训练,并将训练过程实时的通过visdom可视化出来.\n\n[测试器]同[训练器]\n\n本项目各部分均可极少修改后用于其他目标检测项目.\n\n由于工作原因,后续会不定时更新,添加摄像头检测以及配置更多的基础网络\n***\n**本项目单机多卡,通过torch.nn.DataParallel实现,将单机环境统一包装.支持单机单卡,单机多卡,指定gpu训练及测试,但不支持多机多卡和cpu训练和测试.\n不限定检测时的设备(cpu,gpu均可).**\n\n```text\n本项目所有相关参数均已通过Configs文件进行了配置,且均有详细中文注释;如需指定,备份一份,重新修改即可.\n只需要在Configs 中修改_C.DEVICE.TRAIN_DEVICES gpu编号即可实现使用不同gpu进行训练及测试.\n或在trainer 中传入train_devices参数 进行gpu指定.\n\n对模型,训练,测试,检测,数据集,数据载入 等均进行了封装,在不降低灵活性的同时,使结构更为清晰明了,对模型的训练等操作也更为易用.\n\n模型方面,将[基础网络,额外层]合并为一体,将[分类网络和回归网络]合并为一体,损失函数\n数据集方面,只需修改Configs配置文件中的数据集根目录即可顺利训练自己的数据(目前只支持VOC格式)\n\n数据载入方面,Our_Dataloader 接近于一个无限数据载入,只需循环,即可从数据集中无限循环的取出数据.不占内存,不用计算,按需取出.\n\n另本项目训练器,测试器 等均有良好的适用性,在其他项目中可以直接使用.(训练器,测试器中,调用了数据载入器)\n\n代码中均有详细中文备注,较好理解\n\n```\n\n## 项目结构\n\n| 文件夹| 文件 |说明 |\n|:-------:|:-------:|:------:|\n| **Data** | 数据相关 |\n| | Dataloader| 数据加载器类'Our_Dataloader', 'Our_Dataloader_test'|\n| | Dataset_VOC|VOC格式数据集类|\n| | Transfroms|数据Transfroms|\n| | Transfroms_tuils|Transfroms子方法|\n| **Model**| 模型相关|\n| | base_models/VGG|现只有vgg模型,后期会更新其他模型|\n| | structs/Anchors|默认检测框生成器|\n| | structs/MutiBoxLoss|SSD损失函数|\n| | structs/PostProcess|后处理|\n| | structs/Predictor|分类及回归网络|\n| | evaler |验证器,用于在数据集上对模型进行验证(测试),计算ap,map |\n| | ssd_model|SSD模型类 |\n| | trainer|训练器,用于在数据集上训练模型 |\n| **Utils**|各种工具|\n| |boxs_op |各种框体操作,编码解码,IOU计算,框体格式转换等|\n| **Weights**| 模型权重存放处|\n| | pretrained|预训练模型权重存放处|\n| | trained |训练过程中默认模型存放处|\n| ---- | Configs.py|配置文件,包含了模型定义,数据以及训练过程,测试过程等的全部参数,建议备份一份再进行修改|\n| ---- | Demo_train.py| 模型训练的例子,训练过程中的模型会保存在Weights/Our/ |\n| ---- | Demo_eval.py| 模型测试的例子,计算模型ap,map |\n| ---- | Demo_detect_one_image.py|检测单张图片例子|\n| ---- | Demo_detect_video.py|视频检测例子,传入一个视频,进行检测|\n\n| 预训练模型权重| |下载后存放于Weight/pretrained/下 | |\n|:-------:|:-------:|:------:|:------:|\n|ssd300_vgg预训练模型|vgg_ssd300_voc0712.pkl|百度网盘链接: https://pan.baidu.com/s/1BxrH5oqmD7Nj3ORfSka00Q|提取码:k1b2\n|vgg预训练模型|vgg16_reducedfc.pth|百度网盘链接:https://pan.baidu.com/s/1BPqFeo0FtKZVrqM7Y-c6Vg|提取码:24se\n\n提供的SSD预训练模型，只是一个参考，请依据自身项目对Config参数进行设定。\n# Requirements\n\n\n1. pytorch\n2. opencv-python\n3. torchvision \u003e= 0.3.0\n4. [Vizer](https://github.com/lufficc/Vizer) (在代码实现上也借鉴了lufficc大神的一些思想)\n5. visdom\n\n\n# Demo例子\n本项目Demo均是完整的训练,测试,检测过程,可直接运行.\n## Train训练\n本项目采用visdom进行训练过程可视化.\n\nvisdom安装 及运行:\n```visdom安装\npip install visdom   安装\npython -m visdom.server     运行\n\n打开网页`127.0.0.1:8097` 进行训练过程可视化\n```\n**训练器支持单机单卡,单机多卡训练,不支持多机多卡以及cpu.**\n\n训练例子:\n```python\n    # 实例化模型. 模型的具体各种参数在Config文件中进行配置\n    net = SSD(cfg)\n    # 将模型移动到gpu上,cfg.DEVICE.MAINDEVICE定义了模型所使用的主GPU\n    # 模型的参数更新会在主GPU上进行.\n    net.to(cfg.DEVICE.MAINDEVICE)\n\n    # 初始化训练器,训练器参数已通过cfg进行配置;也可传入参数进行配置,但不建议\n    trainer = Trainer(cfg, max_iter=None, batch_size=None, \n                      train_devices=None, model_save_step=None, \n                      model_save_root=None, vis = None, vis_step=None)\n    # 训练器开始在 数据集上训练模型\n    trainer(net, train_dataset)\n```\n\n\n## Eval测试\n**对模型进行测试,测试器支持单机单卡,单机多卡测试,但不支持多机多卡,cpu.**\n \n测试例子:\n```python\n    net = SSD(cfg)\n    # 将模型移动到gpu上,cfg.DEVICE.MAINDEVICE定义了模型所使用的主GPU\n    net.to(cfg.DEVICE.MAINDEVICE)\n    # 模型从权重文件中加载权重\n    net.load_pretrained_weight('Weights/pretrained/vgg_ssd300_voc0712.pkl')\n    # 初始化验证器,验证器参数通过cfg进行配置;也可传入参数进行配置,但不建议\n    evaler = Evaler(cfg, eval_devices=None)\n    # 验证器开始在数据集上验证模型\n    ap, map = evaler(model=net,\n                     test_dataset=test_dataset)\n    print(ap)\n    print(map)\n```\n\n## Detect检测\n**检测过程本项目给出俩个例子,分别为单张图片检测与视频检测**\n\n单张图片检测,通过调用模型Detect_single_img方法实现.支持gpu与cpu,依模型运行环境而定.\n```python\n    # 实例化模型\n    net = SSD(cfg)\n    # 使用cpu或gpu\n    net.to('cuda')\n    # 模型从权重文件中加载权重\n    net.load_pretrained_weight('Weights/pretrained/vgg_ssd300_voc0712.pkl')\n    # 打开图片\n    image = Image.open(\"Images/000133.jpg\")\n    # 进行检测, 分别返回 绘制了检测框的图片数据/回归框/标签/分数.\n    drawn_image, boxes, labels, scores = net.Detect_single_img(image=image,score_threshold=0.5)\n    \n    plt.imshow(drawn_image)\n    plt.show()\n```\n\n视频检测\n```python\n    # 实例化模型\n    net = SSD(cfg)\n    # 使用cpu或gpu\n    net.to('cuda')\n    # 模型从权重文件中加载权重\n    net.load_pretrained_weight('Weights/pretrained/vgg_ssd300_voc0712.pkl')\n    \n    video_path = 'aaa.mp4'  # 现在忙于其他事,项目后期会上传视频检测样例\n    \n    # 进行检测,\n    # save_video_path=None,则不保存视频; save_video_path=bbb.mp4 将检测后视频保存为bbb.mp4\n    # show=True,实时显示检测结果\n    net.Detect_video(video_path=video_path, score_threshold=0.02, save_video_path=None, show=True)\n```\n目前完美支持ssd_300_vgg;ssd_512_vgg有基础网络,但没有添加对应的Config配置文件.\n后续会支持更多的网络以及其他功能,敬请期待.\n\n---\n\nsupport by **jetbrains**.\n\n\u003cimg width='300' alt='Jetbrains' src='https://github.com/yatengLG/SSD-Pytorch/blob/master/Images/jetbrains-variant-3.png'\u003e\n\nhttps://www.jetbrains.com/?from=SSD-Pytorch\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyatenglg%2Fssd-pytorch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyatenglg%2Fssd-pytorch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyatenglg%2Fssd-pytorch/lists"}