yhfeng1995 / yolact_stack

simple ros demo of calling remote yolact service

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

简介

ROS本地计算机对深度学习服务器上Yolact网络结构的远程服务请求的一个简单Demo

img

使用

依赖(ROS本地)

  • ROS kinetic + Ubuntu 16.04

  • rosbridge: 本地ROS计算机上安装

    sudo apt-get install ros-<rosdistro>-rosbridge-server
    

依赖(深度学习服务器)

运行

  1. [ROS本地] 启动rosbridge_server

    roslaunch rosbridge_server rosbridge_websocket.launch
    

    rosbridge_server不要放到launch文件中一起执行, 并保持rosbridge_server不能断连, 由于roslibpy的问题, rosbridge_server一旦断连再重连不能重新连接, 只能重启服务端的程序

  2. [服务器端] 将./yolact_remote/的脚本放到Yolact工程的根目录, 运行Demo:

    cd ${YOLACT_ROOT_PATH}
    python ros_server.py --host --port --img_height --img_width --srv_name --srv_type --model_pth --cuda_device
    
    • 请把host填写为ros master的IP;

    • port为rosbridge_server监听端口, 默认9090, 在启动rosbridge_server时可以修改

    • srv_namesrv_type填写和ROS本地节点程序一致.

  3. [ROS本地] 编译CoCoMaskAPI, semantic_msgsyolact_client, 启动及服务请求节点Demo:

    roslaunch yolact_client yolact_tum_demo.launch
    
    • yolact_tum_demo.launch预先设置好TUM数据集序列的路径, 以及coco.names的路径

    • 输入图像主题是/image;

      订阅图像主题是/image/compressed;

      实例分割数据结果主题是/result;

      可视化主题是/image_visual;

      服务名是/run_yolact

  4. [ROS本地] 查看实例分割的结果:

    rosrun image_view image_view image:=/image_visual
    

    画图直接放到订阅的回调函数里了, 不要的话launch文件里visual设为false就行, 或者函数里抽出来, 独立写成一个节点订阅/result主题

进一步

已知问题

  1. 速度看脸, 有线网稳定能保持在10Hz上, 无线网不太稳定的时候可能会卡, 最好用5GHz的Wifi

  2. 服务器端网络初始化后处理第一帧可能有一个1秒的卡顿, 网络初始化的问题, 先送了一个空白数组冲一下

  3. 由于roslibpy的问题, rosbridge_server一旦断连再重连不能重新连接, 只能重启服务端的程序. 所以在运行的时候要保持rosbridge_server的连接

其他网络

检测, 语义分割, 实例分割输出的数据结构并不一样. 我还没想到怎么做到统一起来, 目前只能在现有程序上修改

ROS本地

  • 主要需要修改调用服务的类型, 在semantic_msgs中已经有一些定义的消息和服务类型, 可以直接使用

服务器

  • 根据不同网络, 需要一个网络预加载的函数和一个单次推理函数, 然后按对应消息格式组装dict

参考

  1. COCO API
  2. Yolact
  3. roslibpy

About

simple ros demo of calling remote yolact service


Languages

Language:CMake 42.2%Language:C++ 41.1%Language:Python 16.7%