Ultra-Fast-Lane-Detection-v2 icon indicating copy to clipboard operation
Ultra-Fast-Lane-Detection-v2 copied to clipboard

单张图片测试和论文速度差很多

Open liluxing153 opened this issue 3 years ago • 1 comments

您好,我参考了demo文件,写了个利用您训练好的culane_res18.pth,进行一张张图片的检测,可是检测出的每张图片要30ms+, t1=time.time() #0.015 s img = cv2.imread(img_path) im0 = img.copy() img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_h, img_w = img.shape[0], img.shape[1] img = img_transforms(img) img = img[:, -cfg.train_height:, :]

    t2_3=time.time()  #0.005 s
    img = img.to('cuda:0')
    img = torch.unsqueeze(img, 0)
    with torch.no_grad():
        pred = net(img)
    
    t2_2=time.time()  #0.018 s
    coords = pred2coords(pred, cfg.row_anchor, cfg.col_anchor, original_image_width=img_w,
                            original_image_height=img_h)
    t2_1=time.time()

统计时间的片段代码如上。 mg_transforms这个函数要花费进15ms 网络回归花费5ms pred2coords函数花费18ms 。 您有时间,回复下吗? 大家怎么看

liluxing153 avatar Oct 21 '22 12:10 liluxing153

@liluxing153 一般来说,网络的推理速度指的是神经网络跑完一次forward的速度,也就是上面

with torch.no_grad():
    pred = net(img)

这一句的时间,按照你的速度应该也有200FPS,这个是比较通用的做法。

那为什么图像预处理或者后处理的时间不算呢?这主要是因为在真实的系统中,相机采集的数据是直接在内存中的,后端的网络输入是可以直接对接内存中的相机数据的,所以你在img_transforms中从硬盘读取的时间、转换成RGB的时间、归一化的时间、再把它挪到cuda内存上等等的时间都是不存在的。

那么后处理呢?其实你观察后处理的代码就可以发现核心的逻辑就是一个softmax再加上一个乘法求期望,这点计算量相比于神经网络的计算量九牛一毛,为什么还会比网络推理慢呢?这主要是由于为了方便用python的循环实现的,如果真正部署换成其他的方式,这点计算量是几乎没有延迟的。

综上,计算网络速度是看的网络推理速度,这也是一般的通用做法。

cfzd avatar Oct 24 '22 07:10 cfzd