# YOLACT++盲人智能避障导航系统 **Repository Path**: ltz_779441120/YOLACTplus_Blind_Nav_System ## Basic Information - **Project Name**: YOLACT++盲人智能避障导航系统 - **Description**: 该厂库基于先进的 YOLACT++ 实例分割算法,旨在实现实时动态避障功能,为盲人提供可靠的导航帮助。通过该库,我们能够快速而准确地分割出可通行的路面,为用户提供安全的行进路径。我们采用了双向 A* 路径规划算法,确保了路径的高效性和可靠性。此外,我们提供了论文链接,对比了不同路径规划算法的性能,为您提供更多参考和了解 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-02-11 - **Last Updated**: 2025-02-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YOLACT++盲人智能避障导航系统 ## 介绍 该项目基于先进的 `YOLACT++`实例分割算法,旨在实现实时动态避障功能,为盲人提供可靠的导航帮助。通过该库,我们能够快速而准确地分割出可通行的路面,为用户提供安全的行进路径。我们采用了`双向 A*`路径规划算法,确保了路径的高效性和可靠性。此外,我们提供了论文 [Dynamic Obstacle Avoidance System Based on Rapid Instance Segmentation Network](https://ieeexplore.ieee.org/document/10304589),对比了不同路径规划算法的性能,为您提供更多参考和了解 ![Alt Text](https://gitee.com/zg_buctedu/YOLACTplus_Blind_Nav_System/raw/master/Demo_video/DynObsAvoid_3.gif) ![Alt Text](https://gitee.com/zg_buctedu/YOLACTplus_Blind_Nav_System/raw/master/Demo_video/DynObsAvoid_4.gif) ## 依赖环境说明 | 依赖 | 版本 | | --- | --- | | python |3.8| | torch | 1.12.0 | | torchvision | 0.13.0 | | opencv-python | 4.8.1.78 | | DCNv2-pytorch |1.11| | numpy |1.22.0| ## 路径规划 * 如下图所示,L表示路径长度,T表示计算时间,S表示准确性,在路径规划算法中,`Best-First`的计算时间最短,但错误率高,因为它是贪婪算法,只考虑当前最短步骤,有时无法到达终点。`a*`和`B- a*`算法获得了除`Best-First`外的最短路径,且成功率最高。由于速度更快,本项目选择了`B-a*`作为盲人动态避障的路径规划算法。 ![Alt Text](https://gitee.com/zg_buctedu/YOLACTplus_Blind_Nav_System/raw/master/Demo_video/metrics.png) * 以下是各路径规划算法的实时动态规划图,利用相同起点和终点进行比较。这些图可用于直观观察不同算法在路径长度及搜索方式上的差异。
## 使用说明 ### 项目结构 ```python ├── backbone.py YOLACT++骨干网选择 ├── data 数据集 ├── Demo_video ├── DynObsAvoid.py 分割可通行区域及实时避障主接口 ├── external │   └── DCNv2-pytorch_1.11 编译深度可变形卷积适用于YOLACT++ ├── layers ├── org_eval.py 未加入避障算法推理代码 ├── PathPlanning 包含5种基于搜索的启发式路径规划代码 ├── README.md ├── scripts ├── train.py 训练自己数据集的主接口 ├── utils └── yolact.py YOLACT++模型 ``` ### 数据集及其模型文件 我们提供本项目YOLACT++训练权重,训练类别包括`'person'`、`'ground'`和`'chair'`,(注:对于局部路径规划避障只要分割ground足够),可从以下来源获取模型权重。 | 模型 | 链接 | | ---------- | ----------| | 百度云| [weights](https://pan.baidu.com/s/1-TaoOB-uPKYYJPD2QR7YSA?pwd=zg11) (pwd:zg11) | ### 下载本地项目 ```python git clone https://gitee.com/zg_buctedu/YOLACTplus_Blind_Nav_System.git cd YOLACTplus_Blind_Nav_System ``` ### 编译[DCNv2](https://github.com/lucasjinreal/DCNv2_latest) ```python cd external/DCNv2-pytorch_1.11 python setup.py build develop ``` ### 训练自己的数据集 * 首先获取模型骨干网,新建`weights`文件夹,用于存放骨干网络权重,比如可选择[Resnet50-FPN](https://pan.baidu.com/s/1S8-oHxzsl3e5LcsoRmoy3A?pwd=b33m) (pwd:b33m),或者[Resnet101-FPN](https://pan.baidu.com/s/1E9IorIgM211NBifadGd4dw?pwd=4eg4) (pwd:4eg4),其次确保自己数据集按照标注`COCO`数据集格式存放在`data/`目录下,如本项目的[数据集](https://pan.baidu.com/s/1KTqJYcYzfYqBVTtx8KyA0A?pwd=11zg) (pwd:11zg),最后在`data/config.py`中的`dataset_base`下定义自己数据集,比如本项目的三个类别。 ```python mkdir weights dataset_base = Config({ 'name': 'Base Dataset', # Training images and annotations 'train_images': 'data/coco/train2017/', 'train_info': 'data/coco/annotations/instances_train2017.json', # Validation images and annotations. 'valid_images': 'data/coco/val2017/', 'valid_info': 'data/coco/annotations/instances_val2017.json', # Whether or not to load GT. If this is False, eval.py quantitative evaluation won't work. 'has_gt': True, # A list of names for each of you classes. 'class_names': ('person', 'ground', 'chair'), # COCO class ids aren't sequential, so this is a bandage fix. If your ids aren't sequential, # provide a map from category_id -> index in class_names + 1 (the +1 is there because it's 1-indexed). # If not specified, this just assumes category ids start at 1 and increase sequentially. 'label_map': {1: 1, 2: 2, 3: 3} }) ``` * 确保做了以上修改。即可运行以下命令训练自己的`yolact++`模型,模型权重文件保存在`weights/`下 ```python # 使用帮助选项查看所有可用命令行参数的描述 python train.py --help python train.py --config=yolact_base_config ``` ### 推理 * 图片 ```python # 在具体的一张图片上显示自己实例分割效果 python org_eval.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png # 在具体的一张图片上显示实例分割结果与路径规划的效果 python DynObsAvoid.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png # 保存实例分割与路径规划的效果图在具体的文件夹下 python DynObsAvoid.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png:save_folder/my_image.png # 处理具体的文件夹下的多张图片并保存实例分割及路径规划效果图 python DynObsAvoid.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --images=path/to/input/folder:path/to/output/folder ``` 通过以下命令查看`DynObsAvoid.py`中所有可用命令行参数的描述 ```python python DynObsAvoid.py --help ``` * 视频 ```python # 实时显示视频。 “--video_multiframe”将一次处理多个帧以提高性能。如果需要,可以使用“--display_fps”直接在帧上绘制 FPS。显示实例分割效果 python org_eval.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=my_video.mp4 # 显示实例分割及其路径规划效果 python DynObsAvoid.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=my_video.mp4 # 实时显示网络摄像头。 如果有多个摄像头,传递所需网络摄像头的索引而不是 0 python DynObsAvoid.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=0 # 处理视频并将其保存到另一个文件。现在它使用与上面相同的管道。 python DynObsAvoid.py --trained_model=weights/yolact_base_399_100000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=path/to/input/folder/input_video.mp4:path/to/output/folder/output_video.mp4 ``` ## 参考项目 * [Crystal_Particle_Diameter_Statistics](https://gitee.com/zg_buctedu/Crystal_Particle_Diameter_Statistics_UI) * [YOLO_sort](https://gitee.com/zg_buctedu/YOLO_sort) * [PathPlanning](https://github.com/zhm-real/PathPlanning) * [yolact++](https://github.com/dbolya/yolact)