# 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),对比了不同路径规划算法的性能,为您提供更多参考和了解


## 依赖环境说明
| 依赖 | 版本 |
| --- | --- |
| 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*`作为盲人动态避障的路径规划算法。

* 以下是各路径规划算法的实时动态规划图,利用相同起点和终点进行比较。这些图可用于直观观察不同算法在路径长度及搜索方式上的差异。
## 使用说明
### 项目结构
```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)