SECOND 3D Detection from Voxels
SECOND speeds up LiDAR detection by voxelizing the point cloud and convolving only where points exist.
Why Does This Exist?
LiDAR gives exact 3D positions but as an unordered scatter of points. Dense 3D convolutions over the whole driving volume waste most work on empty air. Object detection in 3D needed the accuracy of voxels without paying for empty space, and VoxelNet proved voxels work but ran slowly because it convolved everywhere.
SECOND (Sparsely Embedded Convolutional Detection, 2018) keeps the voxel idea and replaces dense 3D convolution with sparse convolution that skips empty cells. This page covers the sparse voxel encoder and the 3D box head. Camera-only methods such as BEVFormer solve a different input problem and are linked separately.
Think of It Like This
Counting occupied seats in a stadium
You must count who sits where in a 50,000-seat stadium with only 2,000 people inside. Walking every row and checking every seat wastes the day. Instead you take the ticket stubs, visit only the sections with stubs, and record those seats. Empty sections cost you nothing.
SECOND works the same way. Voxels are seats, LiDAR points are stubs, and sparse convolution visits only occupied voxels. The analogy stops at learning: you still train the features, you do not just count.
How It Actually Works
A LiDAR sweep is a set of points with around 100,000 per frame. SECOND voxelizes with size m over a driving range of about m. A dense grid would hold cells, which is impossible, so it stores only the occupied voxels with near 5,000. Each voxel pools its few points into one feature vector.
Sparse middle extractor
Sparse convolution applies a kernel only at occupied positions and their occupied neighbors. Empty positions emit nothing and cost nothing. Three sparse stages downsample the height while a dense bird's-eye head predicts a 3D box plus class per anchor.
Worked example
Take a car voxel column at m, m with 8 points. Voxel indices are . The voxel feature is the mean of the 8 point offsets, for example . After sparse stages the head predicts center , size m, yaw rad, car score . Residuals under m mean the box already overlaps the car at IoU above .
Watch Out For
Voxel size set without checking small objects
A m voxel merges a pedestrian leg with the curb and the box drifts half a meter. The symptom is good car scores but missing pedestrians past m. Halve to m for street scenes, and accept the higher voxel count.
Empty-voxel padding blowing up memory
Padding every frame to a fixed voxels with most rows empty wastes GPU memory and slows the batch. The fix is to batch by actual occupancy and mask the loss on real voxels only.
The Quick Version
- SECOND voxelizes LiDAR and convolves only on occupied voxels, so empty air costs nothing.
- A m voxel keeps pedestrians separable while the sparse stages keep runtime low.
- The head predicts full 3D boxes with yaw, not 2D boxes lifted to 3D.
- Do not use it on images alone; it needs LiDAR points to fill voxels.
- When points vanish past range, scores collapse; that is a sensor limit, not a training bug.