Image Classification using GoogleNet

In this example, we convert GoogleNet trained on Caffe to SINGA for image classification. Tested on SINGA commit with the parameters.


  • Download the parameter checkpoint file into this folder

      $ wget
      $ tar xvf bvlc_googlenet.tar.gz
  • Run the program

      # use cpu
      $ python -C &
      # use gpu
      $ python &
  • Submit images for classification

      $ curl -i -F image=@image1.jpg http://localhost:9999/api
      $ curl -i -F image=@image2.jpg http://localhost:9999/api
      $ curl -i -F image=@image3.jpg http://localhost:9999/api

image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.


We first extract the parameter values from Caffe‘s checkpoint file into a pickle version After downloading the checkpoint file into caffe_root/python folder, run the following script

# to be executed within caffe_root/python folder
import caffe
import numpy as np
import cPickle as pickle

model_def = '../models/bvlc_googlenet/deploy.prototxt'
weight = 'bvlc_googlenet.caffemodel'  # must be downloaded at first
net = caffe.Net(model_def, weight, caffe.TEST)

params = {}
for layer_name in net.params.keys():
    print layer_name, weights.shape, bias.shape

with open('bvlc_googlenet.pickle', 'wb') as fd:
    pickle.dump(params, fd)

Then we construct the GoogleNet using SINGA‘s FeedForwardNet structure. Note that we added a EndPadding layer to resolve the issue from discrepancy of the rounding strategy of the pooling layer between Caffe (ceil) and cuDNN (floor). Only the MaxPooling layers outside inception blocks have this problem. Refer to this for more detials.