blob: 767000a083b512f775e3cc99e16e87e8ed08207e [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Classification using GoogleNet &mdash; incubator-singa 1.1.0 documentation</title>
<link rel="stylesheet" href="../../../../_static/css/theme.css" type="text/css" />
<link rel="top" title="incubator-singa 1.1.0 documentation" href="../../../../index.html"/>
<link rel="up" title="Model Zoo" href="../../index.html"/>
<link rel="next" title="Development Schedule" href="../../../../develop/schedule.html"/>
<link rel="prev" title="Train AlexNet over ImageNet" href="../alexnet/README.html"/>
<link href="../../../../_static/style.css" rel="stylesheet" type="text/css">
<script src="../../../../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../../../../index.html" class="icon icon-home"> incubator-singa
<img src="../../../../_static/singa.png" class="logo" />
</a>
<div class="version">
latest
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../../downloads.html">Download SINGA</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../index.html">Documentation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../../installation.html">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../software_stack.html">Software Stack</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../device.html">Device</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../tensor.html">Tensor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../layer.html">Layer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../net.html">FeedForward Net</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../initializer.html">Initializer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../loss.html">Loss</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../metric.html">Metric</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../optimizer.html">Optimizer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../data.html">Data</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../image_tool.html">Image Tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../snapshot.html">Snapshot</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../converter.html">Caffe Converter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../utils.html">Utils</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../../index.html">Model Zoo</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../../cifar10/README.html">Train CNN over Cifar-10</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../char-rnn/README.html">Train Char-RNN over plain text</a></li>
<li class="toctree-l3"><a class="reference internal" href="../alexnet/README.html">Train AlexNet over ImageNet</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="">Image Classification using GoogleNet</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#instructions">Instructions</a></li>
<li class="toctree-l4"><a class="reference internal" href="#details">Details</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">Development</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../develop/schedule.html">Development Schedule</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../develop/how-contribute.html">How to Contribute to SINGA</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../develop/contribute-code.html">How to Contribute Code</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../develop/contribute-docs.html">How to Contribute to Documentation</a></li>
</ul>
<p class="caption"><span class="caption-text">Community</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../community/source-repository.html">Source Repository</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../community/mail-lists.html">Project Mailing Lists</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../community/issue-tracking.html">Issue Tracking</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../community/team-list.html">The SINGA Team</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">incubator-singa</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../../index.html">Documentation</a> &raquo;</li>
<li><a href="../../index.html">Model Zoo</a> &raquo;</li>
<li>Image Classification using GoogleNet</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<hr class="docutils" />
<p>name: GoogleNet on ImageNet
SINGA version: 1.0.1
SINGA commit: 8c990f7da2de220e8a012c6a8ecc897dc7532744
parameter_url: https://s3-ap-southeast-1.amazonaws.com/dlfile/bvlc_googlenet.tar.gz
parameter_sha1: 0a88e8948b1abca3badfd8d090d6be03f8d7655d
license: unrestricted https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet</p>
<hr class="docutils" />
<div class="section" id="image-classification-using-googlenet">
<span id="image-classification-using-googlenet"></span><h1>Image Classification using GoogleNet<a class="headerlink" href="#image-classification-using-googlenet" title="Permalink to this headline"></a></h1>
<p>In this example, we convert GoogleNet trained on Caffe to SINGA for image classification.</p>
<div class="section" id="instructions">
<span id="instructions"></span><h2>Instructions<a class="headerlink" href="#instructions" title="Permalink to this headline"></a></h2>
<ul>
<li><p class="first">Download the parameter checkpoint file into this folder</p>
<div class="highlight-python"><div class="highlight"><pre> $ wget https://s3-ap-southeast-1.amazonaws.com/dlfile/bvlc_googlenet.tar.gz
$ tar xvf bvlc_googlenet.tar.gz
</pre></div>
</div>
</li>
<li><p class="first">Run the program</p>
<div class="highlight-python"><div class="highlight"><pre> # use cpu
$ python serve.py -C &amp;
# use gpu
$ python serve.py &amp;
</pre></div>
</div>
</li>
<li><p class="first">Submit images for classification</p>
<div class="highlight-python"><div class="highlight"><pre> $ 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
</pre></div>
</div>
</li>
</ul>
<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
</div>
<div class="section" id="details">
<span id="details"></span><h2>Details<a class="headerlink" href="#details" title="Permalink to this headline"></a></h2>
<p>We first extract the parameter values from <a class="reference external" href="http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel">Caffe&#8217;s checkpoint file</a> into a pickle version
After downloading the checkpoint file into <code class="docutils literal"><span class="pre">caffe_root/python</span></code> folder, run the following script</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c1"># to be executed within caffe_root/python folder</span>
<span class="kn">import</span> <span class="nn">caffe</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">cPickle</span> <span class="kn">as</span> <span class="nn">pickle</span>
<span class="n">model_def</span> <span class="o">=</span> <span class="s1">&#39;../models/bvlc_googlenet/deploy.prototxt&#39;</span>
<span class="n">weight</span> <span class="o">=</span> <span class="s1">&#39;bvlc_googlenet.caffemodel&#39;</span> <span class="c1"># must be downloaded at first</span>
<span class="n">net</span> <span class="o">=</span> <span class="n">caffe</span><span class="o">.</span><span class="n">Net</span><span class="p">(</span><span class="n">model_def</span><span class="p">,</span> <span class="n">weight</span><span class="p">,</span> <span class="n">caffe</span><span class="o">.</span><span class="n">TEST</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">layer_name</span> <span class="ow">in</span> <span class="n">net</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">weights</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">net</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="n">layer_name</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="n">bias</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">net</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="n">layer_name</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="n">params</span><span class="p">[</span><span class="n">layer_name</span><span class="o">+</span><span class="s1">&#39;_weight&#39;</span><span class="p">]</span><span class="o">=</span><span class="n">weights</span>
<span class="n">params</span><span class="p">[</span><span class="n">layer_name</span><span class="o">+</span><span class="s1">&#39;_bias&#39;</span><span class="p">]</span><span class="o">=</span><span class="n">bias</span>
<span class="k">print</span> <span class="n">layer_name</span><span class="p">,</span> <span class="n">weights</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">bias</span><span class="o">.</span><span class="n">shape</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;bvlc_googlenet.pickle&#39;</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">fd</span><span class="p">)</span>
</pre></div>
</div>
<p>Then we construct the GoogleNet using SINGA&#8217;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 <a class="reference external" href="http://joelouismarino.github.io/blog_posts/blog_googlenet_keras.html">this</a> for more detials.</p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../../../../develop/schedule.html" class="btn btn-neutral float-right" title="Development Schedule" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="../alexnet/README.html" class="btn btn-neutral" title="Train AlexNet over ImageNet" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2017 The Apache Software Foundation. All rights reserved. Apache Singa, Apache, the Apache feather logo, and the Apache Singa project logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners..
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../../',
VERSION:'1.1.0',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
<div class="rst-versions shift-up" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> incubator-singa </span>
v: latest
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Languages</dt>
<dd><a href="../../../../../en/index.html">English</a></dd>
<dd><a href="../../../../../zh/index.html">中文</a></dd>
</dl>
<dl>
<dt>Versions</dt>
<dd><a href="http://singa.apache.org/v0.3.0/">0.3</a></dd>
<dd><a href="http://singa.apache.org/v1.1.0/">1.1</a></dd>
</dl>
</div>
<a href="http://incubator.apache.org/"> <img src= "../../../../_static/apache.jpg"> </a>
</div>
<a href="https://github.com/apache/incubator-singa">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"
alt="Fork me on GitHub">
</a>
</body>
</html>