许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  【学习记录】DynaSLAM源码修改:替换Mask R-CNN为YOLOv5

【学习记录】DynaSLAM源码修改:替换Mask R-CNN为YOLOv5

阅读数 16
点赞 0
article_banner

   本代码已开源于https://gitee.com/zhang_zhi_he/dyna-slam-yolo-v5,上传版本为当初调试通过可运行的版本,如有问题欢迎指出。

这两天接了个小任务,需求是替换Dynaslam里面的动态物体识别模块,将MaskRCNN换为YoloV5,这里记录一下过程中遇见的问题。

一、运行Dynaslam

Dynaslam本身是一个基于ORBSLAM2的视觉SLAM框架,论文并没有仔细看过,简单来说就是在ORBSLAM的基础上,加了一动态物体的滤除,这里的滤除使用了两种策略:基于MaskRCNN和基于视觉几何。既然要替换使用的过滤网络,那么首先就是要跑起来这个Dyanslam,从代码来看,本身还是基于ORBSLAM的,但是加入了神经网络的模块,所以引入了很多Python相关的内容,这里配置主要参照下面的链接:
Dynaslam环境配置与代码替换

大多数的问题按照链接进行修改即可,这里补充一下几个链接里没有的问题:

scikit- image

这个库主要的问题是明明安装上了但是依然显示找不到库,这里网上查了很多办法,有说换版本的有说更新的,本人用的是下面的指令进行的更新,在两台电脑上都修改成功了。

pip install scikit-image --upgrade --user

运行带有mask版本的Dynaslam

在运行Dyanslam的过程中,如果最后两个参数进行了输入,则表明运行时使用了MaskRCNN进行动态物体的过滤,但是在运行时经常会显示不能初始化,这里经过代码的排查,并不是参数或者设备性能的问题,是Dynaslam特征点提取策略的问题。Dynaslam本身是基于ORBSLAM的,在ORBSLAM的初始化时,要求两张图至少要有500对匹配特征点才可以进行初始化,但是在Dynaslam中,由于对场景内的动态物体进行了过滤,导致在提取特征点时原本出现在动态物体上的特征点被遮挡了,所以达不到ORBSLAM初始化的点对数要求,解决方法有两种,一个是修改yaml文件,让提取ORB特征点的时候尽可能提取更多特征点,另一个方法是直接修改初始化的代码,降低点对数要求,两种方法其实都是要让Dynaslam成功初始化。

二、配置Yolov5环境

这一步没有太大的问题,用anaconda创建一个新环境然后配置就可以了,下载yolov5的源码然后用里面的requirement.txt进行配置即可,需要注意的是,很多的环境都需要挂代理去下载,不挂的话要么龟速要么就直接显示查询不到库文件,关于Ubuntu下面如何配置代理文件可以参考下面的链接:Ubuntu环境下配置clash代理

三、代码的魔改

将MaskRCNN替换,其实本来并不是一个很麻烦的内容,从Dynaslam代码来看,只要修改调用的Python文件就可以了,改之前我也是这么想的,但改的过程啥错误都出来了。

Yolov5封装

在改Dynaslam之前,首先要把Yolov5的代码进行封装,具体来说就是让原本predict.py里面通过主函数调用的方法,转换为通过对象进行的调用,这里主要是涉及一些Python基础语法的问题,并且原本通过命令行读取参数的部分现在也用不上了,需要删除一部分函数,最后为了与Dynaslam的接口相对应,需要将传递的参数进行更换,不再使用文件名进行读取,而是直接传递一个numpy的图像。这里放一下封装好的Yolov5,要改的只有一个predict.py,其余并没有什么变化,使用时初始化一个Mask对象并调用GetDynSeg函数传递一张图像即可。

import argparse
import os
import platform
import sys
from pathlib import Path

import numpy
import numpy as np
import torch

FILE = Path(__file__).resolve()
ROOT = FILE.parents[1]  # YOLOv5 root directory
if str(ROOT) not in sys.path:
    sys.path.append(str(ROOT))  # add ROOT to PATH
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # relative

from models.common import DetectMultiBackend
from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams
from utils.general import (LOGGER, Profile, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2,
                           increment_path, non_max_suppression, print_args, scale_boxes, scale_segments,
                           strip_optimizer, xyxy2xywh)
from utils.plots import Annotator, colors, save_one_box
from utils.segment.general import masks2segments, process_mask
from utils.torch_utils import select_device, smart_inference_mode
from utils.augmentations import (Albumentations, augment_hsv, classify_albumentations, classify_transforms, copy_paste,
                                 cutout, letterbox, mixup, random_perspective)

class Mask(object):
    def __init__(self):
        self.weights = ROOT / 'yolov5m-seg.pt'  # model.pt path(s)
        self.
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空