         cudaMemsetAsync(nmsScoresOutput, 0x00, param.batchSize * param.numOutputBoxes * sizeof(T), stream);
         cudaMemsetAsync(nmsBoxesOutput, 0x00, param.batchSize * param.numOutputBoxes * 4 * sizeof(T), stream);
         cudaMemsetAsync(nmsClassesOutput, 0x00, param.batchSize * param.numOutputBoxes * sizeof(int), stream);
+    }
+
+    // Empty Inputs
+    if (param.numScoreElements < 1)
+    {
+        return STATUS_SUCCESS;
     }
 
     // Counters Workspace

    const void* boxesInput, const void* anchorsInput, int* numDetectionsOutput, T* nmsScoresOutput,
    int* nmsClassesOutput, int* nmsIndicesOutput, void* nmsBoxesOutput, cudaStream_t stream)
{
    unsigned int tileSize = 1024;
    if (param.numSelectedBoxes <= 512)
    {
        tileSize = 512;

    cub::DoubleBuffer<T> scoresDB(topScoresData, sortedScoresData);
    cub::DoubleBuffer<int> indexDB(topIndexData, sortedIndexData);

    // Device Specific Properties
    int device;
    cudaGetDevice(&device);
    struct cudaDeviceProp properties;
    cudaGetDeviceProperties(&properties, device);
    if (properties.regsPerBlock >= 65536)
    {
        // Most Devices
        param.numSelectedBoxes = 4096;
    }
    else
    {
        // Jetson TX1/TX2
        param.numSelectedBoxes = 2048;
    }

    // Kernels
    status = EfficientNMSFilterLauncher<T>(param, (T*) scoresInput, topNumData, topIndexData, topAnchorsData,
        topOffsetsStartData, topOffsetsEndData, topScoresData, topClassData, stream);
