GoogLeNet Models

Overview

GoogLeNet introduces a groundbreaking approach to efficiently utilizing computational resources, enabling the network to achieve greater depth and width without exceeding a fixed computational budget. This efficiency is the result of a thoughtfully designed architecture that incorporates multi-scale processing and draws inspiration from Hebbian theory. Comprising 22 layers, GoogLeNet is optimized to deliver high-quality performance in both classification and detection tasks.

Getting Started

Follow these steps to use and convert GoogLeNet models using PyTorch and TorchVision.

  1. Install Required Libraries:

    Ensure you have the necessary libraries installed:

    pip install torch torchvision
    
  2. Load and Convert GoogLeNet Model:

    Load a pretrained GoogLeNet model using PyTorch and TorchVision, create a dummy input tensor for tracing, trace the model to convert it to TorchScript, and finally save the traced model.

    import torch
    import torchvision
    
    model = torchvision.models.googlenet(pretrained=True)
    trace_data = torch.randn(1, 3, 224, 224)
    trace_model = torch.jit.trace(model.cpu().eval(), trace_data)
    torch.jit.save(trace_model, 'googlenet_float.pt')
    

How It Works ?

Before you begin, ensure that the NeuroPilot Converter Tool is installed.

Quant8 Conversion Process

  1. Generate Calibration Data:

    The following script creates a directory named data and generates 100 batches of random input data, each saved as a .npy file. This data is used for calibration during the quantization process.

    import os
    import numpy as np
    
    os.mkdir('data')
    for i in range(100):
        data = np.random.randn(1, 3, 224, 224).astype(np.float32)
        np.save('data/batch_{}.npy'.format(i), data)
    
  2. Convert to Quantized TFLite Format:

    Use the following command to convert the model to a quantized TFLite format using the generated calibration data:

    mtk_pytorch_converter                                 \
        --input_script_module_file=googlenet_float.pt    \
        --output_file=googlenet_ptq_quant.tflite         \
        --input_shapes=1,3,224,224                       \
        --quantize=True                                  \
        --input_value_ranges=-1,1                        \
        --calibration_data_dir=data/                     \
        --calibration_data_regexp=batch_.*\.npy
    

FP32 Conversion Process

To convert the model to a non-quantized (FP32) TFLite format, use the following command:

mtk_pytorch_converter                                 \
    --input_script_module_file=googlenet_float.pt     \
    --output_file=googlenet_float.tflite              \
    --input_shapes=1,3,224,224

Model Details

General Information

Property

Value

Category

Classification

Input Size

224x224

GFLOPS

1.50

#Params (M)

6.62

Training Framework

PyTorch

Inference Framework

TFLite

Quant8 Model package

Download

Float32 Model package

Download

Model Properties

Quant8

  • Format: TensorFlow Lite v3

  • Description: Exported by NeuroPilot converter v7.14.1+release

Inputs

Property

Value

Name

x.2

Tensor

int8[1,3,224,224]

Identifier

151

Quantization

Linear

Quantization Range

-1.0039 ≤ 0.0078 * q ≤ 0.9961

Outputs

Property

Value

Name

1162

Tensor

int8[1,1000]

Identifier

79

Quantization

Linear

Quantization Range

-2.7253 ≤ 0.0373 * (q + 55) ≤ 6.7947

Fp32

  • Format: TensorFlow Lite v3

  • Description: Exported by NeuroPilot converter v2.9.0

Inputs

Property

Value

Name

x.2

Tensor

float32[1,3,224,224]

Identifier

157

Outputs

Property

Value

Name

1162

Tensor

float32[1,1000]

Identifier

176

Performance Benchmarks

GoogLeNet-quant8

Run model (.tflite) 10 times

CPU (Thread:8)

GPU

ARMNN(GpuAcc)

ARMNN(CpuAcc)

Neuron Stable Delegate(APU)

APU(MDLA)

APU(VPU)

G350

N/A

N/A

N/A

N/A

N/A

N/A

N/A

G510

N/A

N/A

N/A

N/A

N/A

3.04 ms

N/A

G700

N/A

N/A

N/A

N/A

N/A

2.04 ms

N/A

G1200

N/A

N/A

N/A

N/A

N/A

2.39 ms

N/A

GoogLeNet-fp32

Run model (.tflite) 10 times

CPU (Thread:8)

GPU

ARMNN(GpuAcc)

ARMNN(CpuAcc)

Neuron Stable Delegate(APU)

APU(MDLA)

APU(VPU)

G350

193.555 ms (Thread:4)

157.701 ms

133.454 ms

111.099 ms

N/A

N/A

673.224 ms

G510

177.939 ms

52.755 ms

45.865 ms

39.105 ms

8.522 ms

8.4 ms

N/A

G700

35.967 ms

39.538 ms

34.542 ms

33.717 ms

6.224 ms

6.04 ms

N/A

G1200

31.778 ms

28.887 ms

24.254 ms

20.328 ms

7.072 ms

6.05 ms

N/A

  • Widespread: CPU only, light workload.

  • Performance: CPU and GPU, medium workload.

  • Ultimate: CPU, GPU, and APUs, heavy workload.

Resources

github