PyTorch_YOLOv3 icon indicating copy to clipboard operation
PyTorch_YOLOv3 copied to clipboard

What is the FPS(testing speed)?

Open sisrfeng opened this issue 5 years ago • 3 comments

Is darknet much faster than pytorch implementation?

While fps is 42 on the paper of gaussian yolov3(uses darknet), I get 10fps with pytorch_GaussianYOLOv3 https://github.com/motokimura/PyTorch_Gaussian_YOLOv3 (forked from this repo) using Tesla M60, image size=1600x1200. Testing on the 416x416 imgs, fps=21.

I save the resized image by addingcv2.imgwrite('myname',img)after img, info_img = preprocess(img, imgsize, jitter=0) # info = (h, w, nh, nw, dx, dy) in:

img = cv2.imread(image_path)
        #Preprocess image
img_raw = img.copy()[:, :, ::-1].transpose((2, 0, 1))
img, info_img = preprocess(img, imgsize, jitter=0)  # info = (h, w, nh, nw, dx, dy)
img = np.transpose(img / 255., (2, 0, 1))
img = torch.from_numpy(img).float().unsqueeze(0)

if gpu >= 0:
    # Send model to GPU
    img = Variable(img.type(torch.cuda.FloatTensor))
else:
    img = Variable(img.type(torch.FloatTensor))

sisrfeng avatar Mar 26 '20 04:03 sisrfeng

I did not put FPS performance results on README because the frame rate performance largely depends on :

  • Hardware (GPU, CPU)
  • Cuda and CuDNN versions
  • PyTorch and other package versions
  • preprocess and postprocess The papers usually don't disclose all the conditions on which their benchmark was done.

But as long as I see your code, preprocessing to re-size your large image and imwrite (if you do that every frame) should be slow. I recommend you to perform only the forward process on GPU and measure the inference speed firstly.

Thank you!

hirotomusiker avatar Mar 26 '20 12:03 hirotomusiker

Thanks a lot! If I feed 1600x1200 imgs to pytorch_GaussianYOLOv3 , I get 10 fps (the time includes preprossing) Then I re-size 1600x1200 imgs to 416x416 and imwrite. The original code after imwrite is commented:

img = np.transpose(img / 255., (2, 0, 1))
img = torch.from_numpy(img).float().unsqueeze(0)

if gpu >= 0:
    # Send model to GPU
    img = Variable(img.type(torch.cuda.FloatTensor))
else:
    img = Variable(img.type(torch.FloatTensor))

If I feed 416x416 imgs to pytorch_GaussianYOLOv3, I get 21 fps.

Which of these two types of FPS is usually mentioned on the papers?

sisrfeng avatar Mar 26 '20 13:03 sisrfeng

I'm not sure but in the following code they measure fps including pre-process. https://github.com/pjreddie/darknet/blob/master/src/demo.c

hirotomusiker avatar Mar 26 '20 15:03 hirotomusiker