Optical flow measures how pixels move between video frames. The key metric is End-Point Error (EPE). It shows the average distance between the predicted pixel movement and the true movement. A smaller EPE means the model tracks motion more accurately. This matters because good motion tracking helps in video analysis, robotics, and self-driving cars.
Optical flow concept in Computer Vision - Model Metrics & Evaluation
Optical flow is a regression task, not classification, so no confusion matrix applies. Instead, we use a visual comparison:
Frame 1 pixels: (x, y)
Frame 2 pixels: (x + u, y + v) where (u, v) is the flow vector
True flow vector: (u_true, v_true)
Predicted flow vector: (u_pred, v_pred)
End-Point Error (EPE) = sqrt((u_true - u_pred)**2 + (v_true - v_pred)**2)
Lower EPE means better prediction of pixel movement.
In optical flow, the tradeoff is between accuracy and smoothness of the flow field.
- High accuracy but low smoothness: The model predicts pixel movement very close to true values but may produce noisy or jagged flow, which can confuse downstream tasks.
- High smoothness but low accuracy: The flow looks smooth and clean but may miss small or fast movements, reducing usefulness.
Example: For a self-driving car, accurate detection of fast-moving objects is critical, so accuracy is prioritized. For video stabilization, smooth flow is more important.
Good: EPE close to 0 pixels (e.g., < 1 pixel) means the predicted motion is very close to the true motion.
Bad: EPE greater than 5 pixels means the predicted motion is often far from the true motion, causing errors in motion understanding.
Visual checks also help: good flow fields show smooth, consistent arrows matching object movement; bad flow fields look noisy or random.
- Ignoring occlusions: Pixels that disappear or appear between frames can cause wrong error calculations.
- Using only average EPE: It can hide large errors in small regions; median or percentile errors give more insight.
- Overfitting to training data: Model may predict well on known scenes but fail on new videos.
- Data leakage: Using future frames or ground truth flow in training can give unrealistically low errors.
Your optical flow model has an average EPE of 0.5 pixels on test videos but shows noisy flow arrows in fast-moving areas. Is it good?
Answer: The low EPE suggests good average accuracy, but noisy flow in fast areas means the model struggles with quick motion. It may need improvement in those regions for reliable use.
Practice
Solution
Step 1: Understand the meaning of optical flow
Optical flow describes how pixels move from one image frame to the next, showing motion.Step 2: Compare options to definition
Only The pattern of apparent motion of objects between two images correctly describes motion between images, while others describe unrelated image properties.Final Answer:
The pattern of apparent motion of objects between two images -> Option AQuick Check:
Optical flow = motion pattern [OK]
- Confusing optical flow with color or brightness
- Thinking optical flow detects object shapes
- Assuming optical flow works on single images
Solution
Step 1: Recall OpenCV functions for optical flow
Farneback method is implemented in OpenCV as cv2.calcOpticalFlowFarneback().Step 2: Eliminate unrelated functions
Other options relate to tracking points, contours, or thresholding, not Farneback optical flow.Final Answer:
cv2.calcOpticalFlowFarneback() -> Option DQuick Check:
Farneback method = calcOpticalFlowFarneback [OK]
- Confusing Farneback with Lucas-Kanade method
- Choosing functions unrelated to optical flow
- Mixing up function names with similar prefixes
flow?
import cv2
prev_img = cv2.imread('frame1.png', 0)
next_img = cv2.imread('frame2.png', 0)
flow = cv2.calcOpticalFlowFarneback(prev_img, next_img, None, 0.5, 3, 15, 3, 5, 1.2, 0)Solution
Step 1: Understand output of Farneback optical flow
The function returns a 3D array where each pixel has a 2D flow vector (x and y components).Step 2: Match output shape to options
This means the output shape is (height, width, 2), representing flow vectors per pixel.Final Answer:
A 3D array with shape (height, width, 2) -> Option AQuick Check:
Flow shape = (H, W, 2) [OK]
- Assuming output is 2D grayscale image
- Thinking output is a single scalar
- Confusing flow vector dimensions
flow = cv2.calcOpticalFlowFarneback(prev_img, next_img, 0, 0.5, 3, 15, 3, 5, 1.2, 0)What is the likely cause of the error?
Solution
Step 1: Check the third argument of calcOpticalFlowFarneback
The third argument is the output flow array or None to create it internally; passing 0 causes an error.Step 2: Verify correct usage
Passing None lets OpenCV allocate the output; 0 is invalid and causes a type error.Final Answer:
The third argument must be None, not 0 -> Option CQuick Check:
Third argument = None [OK]
- Passing 0 instead of None for output flow
- Using color images instead of grayscale
- Misunderstanding parameter order
Solution
Step 1: Understand parameters affecting optical flow accuracy
Smaller window size captures finer motion details; more pyramid levels help track fast motion at multiple scales.Step 2: Evaluate options for fast-moving object tracking
Use a smaller window size and increase pyramid levels correctly suggests smaller window and more pyramid levels to improve tracking accuracy.Final Answer:
Use a smaller window size and increase pyramid levels -> Option BQuick Check:
Smaller window + more pyramids = better fast motion tracking [OK]
- Using large windows that blur fast motion
- Ignoring pyramid levels for scale changes
- Preprocessing images incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
