问题描述:
yolo检测算法,在非ROS环境下前向传播时间0.019s左右,放在ros环境下就1.3s了。慢的难以忍受
分析原因:
因为前向传播在订阅的回调函数中实现,出现了进程问题,所以变慢了。需要重开进程
解决:
订阅函数保存全局图像,新开进程进行前向传播
关键语句:
(1)
import thread
def call_rosspin():
print ('running rosspin...')
rospy.spin()
thread.start_new_thread(call_rosspin, ())
(2)订阅函数写为保存全局图像
def img_L_sub(imgmsg):
global img_L
global flag_img_L
bridge = CvBridge()
img_L = bridge.imgmsg_to_cv2(imgmsg, "bgr8")
flag_img_L = True
print 'img_L recieved'
(3)实例程序
#!/usr/bin/env python
import numpy as np
import cv2
import os, sys
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import thread
from datetime import datetime
from yolo_ros.msg import TargetsInfo
#sys.path.insert(0, '../../python/')
caffe_root = '/home/alvin/Desktop/caffe-yolo/'
sys.path.insert(0, caffe_root + 'python')
import caffe
caffe.set_device(0)
caffe.set_mode_gpu()
mean = np.require([104, 117, 123], dtype=np.float32)[:, np.newaxis, np.newaxis] ##??[104, 117, 123] [ r g b]???
img_L = cv2.imread('Null')
flag_img_L = False
pb = 0.3
def img_L_sub(imgmsg):
global img_L
global flag_img_L
bridge = CvBridge()
img_L = bridge.imgmsg_to_cv2(imgmsg, "bgr8")
flag_img_L = True
print 'img_L recieved'
def call_rosspin():
print ('running rosspin...')
rospy.spin()
def nms(dets, th

本文主要探讨了ROS环境下YOLO检测算法前向传播速度变慢的问题,原因是前向传播在订阅回调函数中运行导致的进程问题。通过在主线程外新开进程来处理前向传播,成功解决了速度慢的问题。解决方案包括使用线程启动独立的`rosspin`运行,并在订阅函数中保存全局图像以供后续处理。
最低0.47元/天 解锁文章
4773

被折叠的 条评论
为什么被折叠?



