nvidia optical flow · • me-only mode –maxwell, pascal, volta • optimized for encoding –up...

33
Abhijit Patait, 3/18/2019 NVIDIA OPTICAL FLOW

Upload: others

Post on 11-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

Abhijit Patait, 3/18/2019

NVIDIA OPTICAL FLOW

Page 2: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

2

AGENDA

Optical Flow in Turing GPUs

NVIDIA Optical Flow SDK

Benchmarks

End-to-end applications

Roadmap

Page 3: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

3

BACKGROUND

Page 4: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

4

Page 5: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

5

Page 6: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

6

ESTIMATING PIXEL MOTION

➢ “Video” motion vectors

➢ Minimize encoding cost

➢ SAD, SATD, RDO, intra modes, partitions

➢ Optical flow vectors

➢ Visual motion

➢ Current and surrounding pixels/blocks

Page 7: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

7

ESTIMATING PIXEL MOTION USING NV GPUS

• ME-only mode – Maxwell, Pascal, Volta

• Optimized for encoding – up to 8×8 granularity motion vectors

• Video Codec SDK 7.0+

• Optical flow (OF) – Turing & beyond

• New hardware in NVENC

• Optical flow and stereo disparity

• Optical Flow SDK 1.0 (released Feb 2019)

Page 8: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

8

OPTICAL FLOW ENGINE

• Hardware

• Up to 150* fps at 4K

• 4 × 4 pixel granularity

• ¼ pixel resolution

• Accuracy comparable to best DL methods

• Advanced algorithms to find true flow vectors

• Software

• SDK (Windows, Linux, CUDA, DirectX)

Capabilities

*Dependent on device clock speed

Page 9: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

9

INTENSITY DIFFERENCES

136 118 26 31 39

110 115 33 40 30

98 102 78 67 45

48 57 23 221 112

39 86 99 155 200

70 62 14 16 20

58 59 17 20 15

49 56 40 33 23

24 29 12 112 62

20 43 55 78 111

Optical flow must be insensitive to intensity

Page 10: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

10

TURING OPTICAL FLOW VS MOTION VECTORS

Turing Optical Flow Pascal/Volta Motion Vectors

Granularity Up to 4x4 Up to 8x8

Algorithm used Visual motion optimization Encoding cost optimization

Quality Robust to intensity changes Sensitive to intensity changes

Accuracy Close to true motionLow average EPE (end-point error)

May deviate from true motionHigher EPE

Page 11: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

11

NVIDIA OPTICAL FLOW SDK

Page 12: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

12

NVIDIA OPTICAL FLOW SDK

➢ New Optical Flow C-API

➢ Scalable, accommodates needs of future hardware

➢ Linux, Windows 8.1, 10, server, …

➢ DirectX, CUDA interoperability

➢ OpenCV

➢ Public released – Feb 2019

➢ Legacy ME-only mode API continues to be supported

Page 13: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

13

OPTICAL FLOW API

Main Functionality (nvOpticalFlowCommon.h)

NV_OF_STATUS(NVOFAPI* PFNNVOFINIT) (NvOFHandle hOf, const

NV_OF_INIT_PARAMS *initParams);

NV_OF_STATUS(NVOFAPI* PFNNVOFEXECUTE) (NvOFHandle hOf, const

NV_OF_EXECUTE_INPUT_PARAMS *executeInParams,

NV_OF_EXECUTE_OUTPUT_PARAMS *executeOutParams);

typedef NV_OF_STATUS(NVOFAPI* PFNNVOFDESTROY) (NvOFHandle hOf);

Basic functionality

CUDA and DirectX buffer management

nvOpticalFlowCuda.h & nvOpticalFlowD3D11.h

Page 14: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

14

REUSABLE CLASSES

NvOF

Base class for all core functionality

NvOFCUDA

Input and output in CUDA buffers

NvOFD3D11

Input and output in DirectX buffers

Page 15: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

15

USE VIA OPENCV

Mat frameL = imread(pathL, IMREAD_GRAYSCALE);

Mat frameR = imread(pathR, IMREAD_GRAYSCALE);

GpuMat d_flowL(frameL), d_flowR(frameR), d_flow;

Mat flowx, flowy, flowxy;

int gpuId = 0;

int width = frameL.size().width, height = frameL.size().height;

Ptr<cuda::NvidiaOpticalFlow> OpticalFlow = cuda::NvidiaOpticalFlow::create(perfPreset,

width, height, gpuId);

OpticalFlow->calc(frameL, frameR, d_flow);

d_flow.download(flowxy);

Ptr<cuda::FarnebackOpticalFlow> OpticalFlow = cuda::FarnebackOpticalFlow::create();

OpticalFlow->calc(d_flowL, d_flowR, d_flow);

d_flow.download(flowxy);

Page 16: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

16

BENCHMARKS

Page 17: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

17

OPTICAL FLOW QUALITY

• Objective quality

• KITTI 2012/2015, Sintel, Middlebury

• Average end point error (EPE)

• Percentage of outliers – background, foreground and all

• Subjective quality

• Flow maps

• Frame-rate-up-conversion (video interpolation)

Evaluation Methodology

Page 18: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

18

OPTICAL FLOW QUALITYEPE – KITTI 2015

11.17

7.99

5.42

4.444.84

LEGACY ME-ONLY MODE

OF RAW OF POST-PROCESSED

PWC-DC FLOWNET2

Avg. EPE - Lower is better

DL-methods

• EPE = End-point error = Euclidian distance between OF vector & ground truth

• Non-occluded EPE

• Occluded EPE higher but same trend

• KITTI 2012 EPE = 2.31

• Sintel EPE = 8

Page 19: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

19

OPTICAL FLOW QUALITYOutliers – KITTI 2015

31.09%

21.33%

16.76%

21.21% 21.08%

43.01%

36.37%

27.57%

42.29%

23.57%

LEGACY ME-ONLY MODE

OF RAW OF POST-PROCESSED PWC-DC FLOWNET2

Outliers Percentage – Lower is better

Background Outliers %age Foreground Outliers %age

Outlier = Euclidian distance > 3 between OF vector and ground truth

DL-methods

Page 20: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

20

OPTICAL FLOW QUALITY

• NVIDIA frame-rate-up-conversion

• Video frame interpolation

• ME-only mode (8×8), optical flow (4×4), optical flow with post-processing (1×1)

• Subjective and objective quality comparison

• Results

• Raw optical flow (4x4) based video interpolation better than ME-only mode (8x8) interpolation

• Some video quality improvement with OF-post-processed (1x1) – content-dependent

Subjective Quality

Page 21: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

21

VIDEO FRAME INTERPOLATIONOriginal 30 fps video

Page 22: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

22

VIDEO FRAME INTERPOLATIONUpconverted 60 fps video

Page 23: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

23

PERFORMANCE

➢ 3 presets

➢ Fast/Medium – no CUDA processing

➢ Slow – pre/post-processing in CUDA

➢ Performance scales with resolution

➢ Cost calculation in CUDA (enable only if needed)

Fast

Medium

Slow

0

2

4

6

8

10

12

0 20 40 60 80 100 120 140

Ave

rage

EPE

Performance (fps) at 3840 x 2160

Optical Flow quality vs performance

Page 24: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

24

Page 25: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

25

END-TO-END APPLICATIONS

Page 26: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

26

END-TO-END USE-CASES

• Video comprehension/classification

• 2x better accuracy compared to no optical flow with UCF-101

• Makes OF-assisted-video-comprehension usable

• Optical-flow-assisted video inter/extrapolation

• Objective and subjective quality comparable to FlowNet2

• Turing enables real-time optical-flow-assisted video interpolation

Applications

Page 27: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

27

OPTICAL FLOW-ASSISTED VIDEO CLASSIFICATION

Page 28: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

28

VIDEO CLASSIFICATIONEnables world class classification accuracy with real time performance

Image only video classification has high

error rates

Optical flow significantly reduces error rates,

but DL based OFis unusably slow

Turing hardware :→ Optical Flow reduces

error rates by 2x→ 20+ streams 720p

inference

Page 29: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

30

TURING OPTICAL FLOWHigh quality video frame interpolation at 4K in real-time

Turing

FlowNet2

0 fps

10 fps

20 fps

30 fps

40 fps

50 fps

60 fps

70 fps

80 fps

25 dB 26 dB 27 dB 28 dB 29 dB 30 dB 31 dB 32 dB 33 dB 34 dB 35 dB

Pe

rfo

rman

ce

Interpolated frame PSNR

Video InterpolationPerformance vs quality – 2160p streams Video Interpolation

• 60 fps ➔ 120 fps at 4K in real-time

• 7x perf vs FlowNet2

• 1 dB better objective quality (PSNR) than FlowNet2-assisted interpolation

• Similar visual quality as FlowNet2-assisted interpolation

Page 30: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

31

ROADMAP

Page 31: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

32

ROADMAP

➢ Q3 2018

➢ Improved quality via post-processing

➢ 1x1 flow vectors

➢ Integration into DALI, Pytorch and other DL frameworks

Optical Flow SDK 1.1

Page 32: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)

33

RESOURCES

Optical Flow SDK: https://developer.nvidia.com/opticalflow-sdk

Support: [email protected]

Video & Optical Flow SDK forums: https://devtalk.nvidia.com/default/board/175/video-technologies/

Connect with Experts (CE9103): Wednesday, March 20, 2019, 3:00 pm

Page 33: NVIDIA OPTICAL FLOW · • ME-only mode –Maxwell, Pascal, Volta • Optimized for encoding –up to 8×8 granularity motion vectors • Video Codec SDK 7.0+ • Optical flow (OF)