diff --git a/assets/js/netscope.js b/assets/js/netscope.js index 8b7693e..fd28aaf 100644 --- a/assets/js/netscope.js +++ b/assets/js/netscope.js @@ -1,6 +1,6 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + - function DOMEval( code, doc ) { + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { doc = doc || document; - var script = doc.createElement( "script" ); + var i, + script = doc.createElement( "script" ); script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } doc.head.appendChild( script ).parentNode.removeChild( script ); } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} /* global Symbol */ // Defining this global in .eslintrc.json would create a danger of using the global // unguarded in another place, it seems safer to define global only for this module @@ -89,7 +130,7 @@ var support = {}; var - version = "3.2.1", + version = "3.3.1", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -101,16 +142,7 @@ var // Support: Android <=4.0 only // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; jQuery.fn = jQuery.prototype = { @@ -210,7 +242,7 @@ jQuery.extend = jQuery.fn.extend = function() { } // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + if ( typeof target !== "object" && !isFunction( target ) ) { target = {}; } @@ -276,28 +308,6 @@ jQuery.extend( { noop: function() {}, - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - isPlainObject: function( obj ) { var proto, Ctor; @@ -331,29 +341,11 @@ jQuery.extend( { return true; }, - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - // Evaluates a script in a global context globalEval: function( code ) { DOMEval( code ); }, - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - each: function( obj, callback ) { var length, i = 0; @@ -474,37 +466,6 @@ jQuery.extend( { // A global GUID counter for objects guid: 1, - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support @@ -527,9 +488,9 @@ function isArrayLike( obj ) { // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); + type = toType( obj ); - if ( type === "function" || jQuery.isWindow( obj ) ) { + if ( isFunction( obj ) || isWindow( obj ) ) { return false; } @@ -2849,11 +2810,9 @@ var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>| -var risSimple = /^.[^:#\[\.,]*$/; - // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { + if ( isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { return !!qualifier.call( elem, i, elem ) !== not; } ); @@ -2873,16 +2832,8 @@ function winnow( elements, qualifier, not ) { } ); } - // Simple selector that can be filtered directly, removing non-Elements - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - // Complex selector, compare the two sets, removing non-Elements - qualifier = jQuery.filter( qualifier, elements ); - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; - } ); + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); } jQuery.filter = function( expr, elems, not ) { @@ -3003,7 +2954,7 @@ var rootjQuery, for ( match in context ) { // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { + if ( isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes @@ -3046,7 +2997,7 @@ var rootjQuery, // HANDLE: $(function) // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { + } else if ( isFunction( selector ) ) { return root.ready !== undefined ? root.ready( selector ) : @@ -3361,11 +3312,11 @@ jQuery.Callbacks = function( options ) { ( function add( args ) { jQuery.each( args, function( _, arg ) { - if ( jQuery.isFunction( arg ) ) { + if ( isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } - } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + } else if ( arg && arg.length && toType( arg ) !== "string" ) { // Inspect recursively add( arg ); @@ -3480,11 +3431,11 @@ function adoptValue( value, resolve, reject, noValue ) { try { // Check for promise aspect first to privilege synchronous behavior - if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + if ( value && isFunction( ( method = value.promise ) ) ) { method.call( value ).done( resolve ).fail( reject ); // Other thenables - } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + } else if ( value && isFunction( ( method = value.then ) ) ) { method.call( value, resolve, reject ); // Other non-thenables @@ -3542,14 +3493,14 @@ jQuery.extend( { jQuery.each( tuples, function( i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; // deferred.progress(function() { bind to newDefer or newDefer.notify }) // deferred.done(function() { bind to newDefer or newDefer.resolve }) // deferred.fail(function() { bind to newDefer or newDefer.reject }) deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { + if ( returned && isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) @@ -3603,7 +3554,7 @@ jQuery.extend( { returned.then; // Handle a returned thenable - if ( jQuery.isFunction( then ) ) { + if ( isFunction( then ) ) { // Special processors (notify) just wait for resolution if ( special ) { @@ -3699,7 +3650,7 @@ jQuery.extend( { resolve( 0, newDefer, - jQuery.isFunction( onProgress ) ? + isFunction( onProgress ) ? onProgress : Identity, newDefer.notifyWith @@ -3711,7 +3662,7 @@ jQuery.extend( { resolve( 0, newDefer, - jQuery.isFunction( onFulfilled ) ? + isFunction( onFulfilled ) ? onFulfilled : Identity ) @@ -3722,7 +3673,7 @@ jQuery.extend( { resolve( 0, newDefer, - jQuery.isFunction( onRejected ) ? + isFunction( onRejected ) ? onRejected : Thrower ) @@ -3762,8 +3713,15 @@ jQuery.extend( { // fulfilled_callbacks.disable tuples[ 3 - i ][ 2 ].disable, + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock ); } @@ -3833,7 +3791,7 @@ jQuery.extend( { // Use .then() to unwrap secondary thenables (cf. gh-3000) if ( master.state() === "pending" || - jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { return master.then(); } @@ -3961,7 +3919,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { bulk = key == null; // Sets many values - if ( jQuery.type( key ) === "object" ) { + if ( toType( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); @@ -3971,7 +3929,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { } else if ( value !== undefined ) { chainable = true; - if ( !jQuery.isFunction( value ) ) { + if ( !isFunction( value ) ) { raw = true; } @@ -4013,6 +3971,23 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { return len ? fn( elems[ 0 ], key ) : emptyGet; }; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} var acceptData = function( owner ) { // Accepts only: @@ -4075,14 +4050,14 @@ Data.prototype = { // Handle: [ owner, key, value ] args // Always use camelCase key (gh-2257) if ( typeof data === "string" ) { - cache[ jQuery.camelCase( data ) ] = value; + cache[ camelCase( data ) ] = value; // Handle: [ owner, { properties } ] args } else { // Copy the properties one-by-one to the cache object for ( prop in data ) { - cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + cache[ camelCase( prop ) ] = data[ prop ]; } } return cache; @@ -4092,7 +4067,7 @@ Data.prototype = { this.cache( owner ) : // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; }, access: function( owner, key, value ) { @@ -4140,9 +4115,9 @@ Data.prototype = { // If key is an array of keys... // We always set camelCase keys, so remove that. - key = key.map( jQuery.camelCase ); + key = key.map( camelCase ); } else { - key = jQuery.camelCase( key ); + key = camelCase( key ); // If a key with the spaces exists, use it. // Otherwise, create an array by matching non-whitespace @@ -4288,7 +4263,7 @@ jQuery.fn.extend( { if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice( 5 ) ); + name = camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } @@ -4535,8 +4510,7 @@ var swap = function( elem, options, callback, args ) { function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, - scale = 1, + var adjusted, scale, maxIterations = 20, currentValue = tween ? function() { @@ -4554,30 +4528,33 @@ function adjustCSS( elem, prop, valueParts, tween ) { if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; - // Make sure we update the tween properties later on - valueParts = valueParts || []; - // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; - do { + while ( maxIterations-- ) { - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - initialInUnit = initialInUnit / scale; + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; - // Update scale, tolerating zero or NaN from tween.cur() - // Break the loop if scale is unchanged or perfect, or if we've just had enough. - } while ( - scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations - ); + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; } if ( valueParts ) { @@ -4695,7 +4672,7 @@ var rcheckableType = ( /^(?:checkbox|radio)$/i ); var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); @@ -4777,7 +4754,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { if ( elem || elem === 0 ) { // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { + if ( toType( elem ) === "object" ) { // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit @@ -5287,7 +5264,7 @@ jQuery.event = { enumerable: true, configurable: true, - get: jQuery.isFunction( hook ) ? + get: isFunction( hook ) ? function() { if ( this.originalEvent ) { return hook( this.originalEvent ); @@ -5422,7 +5399,7 @@ jQuery.Event = function( src, props ) { } // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); + this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed this[ jQuery.expando ] = true; @@ -5621,14 +5598,13 @@ var /* eslint-enable */ - // Support: IE <=10 - 11, Edge 12 - 13 + // Support: IE <=10 - 11, Edge 12 - 13 only // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g; // Prefer a tbody over its parent table for containing new rows @@ -5636,7 +5612,7 @@ function manipulationTarget( elem, content ) { if ( nodeName( elem, "table" ) && nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - return jQuery( ">tbody", elem )[ 0 ] || elem; + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; } return elem; @@ -5648,10 +5624,8 @@ function disableScript( elem ) { return elem; } function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); } else { elem.removeAttribute( "type" ); } @@ -5717,15 +5691,15 @@ function domManip( collection, args, callback, ignored ) { l = collection.length, iNoClone = l - 1, value = args[ 0 ], - isFunction = jQuery.isFunction( value ); + valueIsFunction = isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || + if ( valueIsFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); - if ( isFunction ) { + if ( valueIsFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); @@ -5779,14 +5753,14 @@ function domManip( collection, args, callback, ignored ) { !dataPriv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - if ( node.src ) { + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); } } } @@ -6066,8 +6040,6 @@ jQuery.each( { return this.pushStack( ret ); }; } ); -var rmargin = ( /^margin/ ); - var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); var getStyles = function( elem ) { @@ -6084,6 +6056,8 @@ var getStyles = function( elem ) { return view.getComputedStyle( elem ); }; +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + ( function() { @@ -6097,25 +6071,33 @@ var getStyles = function( elem ) { return; } + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; div.style.cssText = - "box-sizing:border-box;" + - "position:relative;display:block;" + + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + - "top:1%;width:50%"; - div.innerHTML = ""; - documentElement.appendChild( container ); + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); var divStyle = window.getComputedStyle( div ); pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = divStyle.marginLeft === "2px"; - boxSizingReliableVal = divStyle.width === "4px"; + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - // Support: Android 4.0 - 4.3 only + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 // Some styles come back with percentage values, even though they shouldn't - div.style.marginRight = "50%"; - pixelMarginRightVal = divStyle.marginRight === "4px"; + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; documentElement.removeChild( container ); @@ -6124,7 +6106,12 @@ var getStyles = function( elem ) { div = null; } - var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -6139,26 +6126,26 @@ var getStyles = function( elem ) { div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; - container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + - "padding:0;margin-top:1px;position:absolute"; - container.appendChild( div ); - jQuery.extend( support, { - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, boxSizingReliable: function() { computeStyleTests(); return boxSizingReliableVal; }, - pixelMarginRight: function() { + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { computeStyleTests(); - return pixelMarginRightVal; + return pixelPositionVal; }, reliableMarginLeft: function() { computeStyleTests(); return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; } } ); } )(); @@ -6190,7 +6177,7 @@ function curCSS( elem, name, computed ) { // but width seems to be reliably pixels. // This is against the CSSOM draft spec: // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { // Remember the original values width = style.width; @@ -6295,87 +6282,120 @@ function setPositiveNumber( elem, value, subtract ) { value; } -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i, - val = 0; - - // If we already have the right measurement, avoid augmentation - if ( extra === ( isBorderBox ? "border" : "content" ) ) { - i = 4; +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; - // Otherwise initialize for horizontal or vertical properties - } else { - i = name === "width" ? 1 : 0; + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; } for ( ; i < 4; i += 2 ) { - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); } - if ( isBorderBox ) { + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" } else { - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } } - return val; + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; } -function getWidthOrHeight( elem, name, extra ) { +function getWidthOrHeight( elem, dimension, extra ) { // Start with computed style - var valueIsBorderBox, - styles = getStyles( elem ), - val = curCSS( elem, name, styles ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; - // Computed unit is not pixels. Stop here and return. + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. if ( rnumnonpx.test( val ) ) { - return val; + if ( !extra ) { + return val; + } + val = "auto"; } // Check for style in case a browser which returns unreliable values // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); - // Fall back to offsetWidth/Height when value is "auto" + // Fall back to offsetWidth/offsetHeight when value is "auto" // This happens for inline elements with no explicit setting (gh-3571) - if ( val === "auto" ) { - val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; } - // Normalize "", auto, and prepare for extra + // Normalize "" and auto val = parseFloat( val ) || 0; - // Use the active box-sizing model to add/subtract irrelevant styles + // Adjust for the element's box model return ( val + - augmentWidthOrHeight( + boxModelAdjustment( elem, - name, + dimension, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox, - styles + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val ) ) + "px"; } @@ -6416,9 +6436,7 @@ jQuery.extend( { // Add in properties whose names you wish to fix before // setting or getting the value - cssProps: { - "float": "cssFloat" - }, + cssProps: {}, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { @@ -6430,7 +6448,7 @@ jQuery.extend( { // Make sure that we're working with the right name var ret, type, hooks, - origName = jQuery.camelCase( name ), + origName = camelCase( name ), isCustomProp = rcustomProp.test( name ), style = elem.style; @@ -6498,7 +6516,7 @@ jQuery.extend( { css: function( elem, name, extra, styles ) { var val, num, hooks, - origName = jQuery.camelCase( name ), + origName = camelCase( name ), isCustomProp = rcustomProp.test( name ); // Make sure that we're working with the right name. We don't @@ -6536,8 +6554,8 @@ jQuery.extend( { } } ); -jQuery.each( [ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -6553,29 +6571,41 @@ jQuery.each( [ "height", "width" ], function( i, name ) { // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); + return getWidthOrHeight( elem, dimension, extra ); } ) : - getWidthOrHeight( elem, name, extra ); + getWidthOrHeight( elem, dimension, extra ); } }, set: function( elem, value, extra ) { var matches, - styles = extra && getStyles( elem ), - subtract = extra && augmentWidthOrHeight( + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( elem, - name, + dimension, extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + isBorderBox, styles ); + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + // Convert to pixels if value adjustment is needed if ( subtract && ( matches = rcssNum.exec( value ) ) && ( matches[ 3 ] || "px" ) !== "px" ) { - elem.style[ name ] = value; - value = jQuery.css( elem, name ); + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); } return setPositiveNumber( elem, value, subtract ); @@ -6619,7 +6649,7 @@ jQuery.each( { } }; - if ( !rmargin.test( prefix ) ) { + if ( prefix !== "margin" ) { jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; } } ); @@ -6790,7 +6820,7 @@ function createFxNow() { window.setTimeout( function() { fxNow = undefined; } ); - return ( fxNow = jQuery.now() ); + return ( fxNow = Date.now() ); } // Generate parameters to create a standard animation @@ -6894,9 +6924,10 @@ function defaultPrefilter( elem, props, opts ) { // Restrict "overflow" and "display" styles during box animations if ( isBox && elem.nodeType === 1 ) { - // Support: IE <=9 - 11, Edge 12 - 13 + // Support: IE <=9 - 11, Edge 12 - 15 // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; // Identify a display type, preferring old show/hide data over the CSS cascade @@ -7004,7 +7035,7 @@ function propFilter( props, specialEasing ) { // camelCase, specialEasing and expand cssHook pass for ( index in props ) { - name = jQuery.camelCase( index ); + name = camelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; if ( Array.isArray( value ) ) { @@ -7129,9 +7160,9 @@ function Animation( elem, properties, options ) { for ( ; index < length; index++ ) { result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); if ( result ) { - if ( jQuery.isFunction( result.stop ) ) { + if ( isFunction( result.stop ) ) { jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - jQuery.proxy( result.stop, result ); + result.stop.bind( result ); } return result; } @@ -7139,7 +7170,7 @@ function Animation( elem, properties, options ) { jQuery.map( props, createTween, animation ); - if ( jQuery.isFunction( animation.opts.start ) ) { + if ( isFunction( animation.opts.start ) ) { animation.opts.start.call( elem, animation ); } @@ -7172,7 +7203,7 @@ jQuery.Animation = jQuery.extend( Animation, { }, tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { + if ( isFunction( props ) ) { callback = props; props = [ "*" ]; } else { @@ -7204,9 +7235,9 @@ jQuery.Animation = jQuery.extend( Animation, { jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, + isFunction( speed ) && speed, duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + easing: fn && easing || easing && !isFunction( easing ) && easing }; // Go to the end state if fx are off @@ -7233,7 +7264,7 @@ jQuery.speed = function( speed, easing, fn ) { opt.old = opt.complete; opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { + if ( isFunction( opt.old ) ) { opt.old.call( this ); } @@ -7397,7 +7428,7 @@ jQuery.fx.tick = function() { i = 0, timers = jQuery.timers; - fxNow = jQuery.now(); + fxNow = Date.now(); for ( ; i < timers.length; i++ ) { timer = timers[ i ]; @@ -7750,7 +7781,7 @@ jQuery.each( [ // Strip and collapse whitespace according to HTML spec - // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace function stripAndCollapse( value ) { var tokens = value.match( rnothtmlwhite ) || []; return tokens.join( " " ); @@ -7761,20 +7792,30 @@ function getClass( elem ) { return elem.getAttribute && elem.getAttribute( "class" ) || ""; } +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + jQuery.fn.extend( { addClass: function( value ) { var classes, elem, cur, curValue, clazz, j, finalValue, i = 0; - if ( jQuery.isFunction( value ) ) { + if ( isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); } ); } - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; + classes = classesToArray( value ); + if ( classes.length ) { while ( ( elem = this[ i++ ] ) ) { curValue = getClass( elem ); cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); @@ -7803,7 +7844,7 @@ jQuery.fn.extend( { var classes, elem, cur, curValue, clazz, j, finalValue, i = 0; - if ( jQuery.isFunction( value ) ) { + if ( isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); } ); @@ -7813,9 +7854,9 @@ jQuery.fn.extend( { return this.attr( "class", "" ); } - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; + classes = classesToArray( value ); + if ( classes.length ) { while ( ( elem = this[ i++ ] ) ) { curValue = getClass( elem ); @@ -7845,13 +7886,14 @@ jQuery.fn.extend( { }, toggleClass: function( value, stateVal ) { - var type = typeof value; + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); - if ( typeof stateVal === "boolean" && type === "string" ) { + if ( typeof stateVal === "boolean" && isValidValue ) { return stateVal ? this.addClass( value ) : this.removeClass( value ); } - if ( jQuery.isFunction( value ) ) { + if ( isFunction( value ) ) { return this.each( function( i ) { jQuery( this ).toggleClass( value.call( this, i, getClass( this ), stateVal ), @@ -7863,12 +7905,12 @@ jQuery.fn.extend( { return this.each( function() { var className, i, self, classNames; - if ( type === "string" ) { + if ( isValidValue ) { // Toggle individual class names i = 0; self = jQuery( this ); - classNames = value.match( rnothtmlwhite ) || []; + classNames = classesToArray( value ); while ( ( className = classNames[ i++ ] ) ) { @@ -7927,7 +7969,7 @@ var rreturn = /\r/g; jQuery.fn.extend( { val: function( value ) { - var hooks, ret, isFunction, + var hooks, ret, valueIsFunction, elem = this[ 0 ]; if ( !arguments.length ) { @@ -7956,7 +7998,7 @@ jQuery.fn.extend( { return; } - isFunction = jQuery.isFunction( value ); + valueIsFunction = isFunction( value ); return this.each( function( i ) { var val; @@ -7965,7 +8007,7 @@ jQuery.fn.extend( { return; } - if ( isFunction ) { + if ( valueIsFunction ) { val = value.call( this, i, jQuery( this ).val() ); } else { val = value; @@ -8107,18 +8149,24 @@ jQuery.each( [ "radio", "checkbox" ], function() { // Return jQuery for attributes-only inclusion -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; jQuery.extend( jQuery.event, { trigger: function( event, data, elem, onlyHandlers ) { - var i, cur, tmp, bubbleType, ontype, handle, special, + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - cur = tmp = elem = elem || document; + cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { @@ -8170,7 +8218,7 @@ jQuery.extend( jQuery.event, { // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { @@ -8190,7 +8238,7 @@ jQuery.extend( jQuery.event, { // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - + lastElement = cur; event.type = i > 1 ? bubbleType : special.bindType || type; @@ -8222,7 +8270,7 @@ jQuery.extend( jQuery.event, { // Call a native DOM method on the target with the same name as the event. // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; @@ -8233,7 +8281,17 @@ jQuery.extend( jQuery.event, { // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + jQuery.event.triggered = undefined; if ( tmp ) { @@ -8279,31 +8337,6 @@ jQuery.fn.extend( { } ); -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -} ); - -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - - - - -support.focusin = "onfocusin" in window; - - // Support: Firefox <=44 // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 @@ -8347,7 +8380,7 @@ if ( !support.focusin ) { } var location = window.location; -var nonce = jQuery.now(); +var nonce = Date.now(); var rquery = ( /\?/ ); @@ -8405,7 +8438,7 @@ function buildParams( prefix, obj, traditional, add ) { } } ); - } else if ( !traditional && jQuery.type( obj ) === "object" ) { + } else if ( !traditional && toType( obj ) === "object" ) { // Serialize object item. for ( name in obj ) { @@ -8427,7 +8460,7 @@ jQuery.param = function( a, traditional ) { add = function( key, valueOrFunction ) { // If value is a function, invoke it and use its return value - var value = jQuery.isFunction( valueOrFunction ) ? + var value = isFunction( valueOrFunction ) ? valueOrFunction() : valueOrFunction; @@ -8545,7 +8578,7 @@ function addToPrefiltersOrTransports( structure ) { i = 0, dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - if ( jQuery.isFunction( func ) ) { + if ( isFunction( func ) ) { // For each dataType in the dataTypeExpression while ( ( dataType = dataTypes[ i++ ] ) ) { @@ -9017,7 +9050,7 @@ jQuery.extend( { if ( s.crossDomain == null ) { urlAnchor = document.createElement( "a" ); - // Support: IE <=8 - 11, Edge 12 - 13 + // Support: IE <=8 - 11, Edge 12 - 15 // IE throws exception on accessing the href property if url is malformed, // e.g. http://example.com:80x/ try { @@ -9075,8 +9108,8 @@ jQuery.extend( { // Remember the hash so we can put it back uncached = s.url.slice( cacheURL.length ); - // If data is available, append data to url - if ( s.data ) { + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; // #9682: remove data so that it's not used in an eventual retry @@ -9313,7 +9346,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { + if ( isFunction( data ) ) { type = type || callback; callback = data; data = undefined; @@ -9351,7 +9384,7 @@ jQuery.fn.extend( { var wrap; if ( this[ 0 ] ) { - if ( jQuery.isFunction( html ) ) { + if ( isFunction( html ) ) { html = html.call( this[ 0 ] ); } @@ -9377,7 +9410,7 @@ jQuery.fn.extend( { }, wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { + if ( isFunction( html ) ) { return this.each( function( i ) { jQuery( this ).wrapInner( html.call( this, i ) ); } ); @@ -9397,10 +9430,10 @@ jQuery.fn.extend( { }, wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); + var htmlIsFunction = isFunction( html ); return this.each( function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); } ); }, @@ -9492,7 +9525,8 @@ jQuery.ajaxTransport( function( options ) { return function() { if ( callback ) { callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; if ( type === "abort" ) { xhr.abort(); @@ -9532,7 +9566,7 @@ jQuery.ajaxTransport( function( options ) { // Listen to events xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); // Support: IE 9 only // Use onreadystatechange to replace onabort @@ -9686,7 +9720,7 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback; @@ -9737,7 +9771,7 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { } // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { + if ( responseContainer && isFunction( overwritten ) ) { overwritten( responseContainer[ 0 ] ); } @@ -9829,7 +9863,7 @@ jQuery.fn.load = function( url, params, callback ) { } // If it's a function - if ( jQuery.isFunction( params ) ) { + if ( isFunction( params ) ) { // We assume that it's the callback callback = params; @@ -9937,7 +9971,7 @@ jQuery.offset = { curLeft = parseFloat( curCSSLeft ) || 0; } - if ( jQuery.isFunction( options ) ) { + if ( isFunction( options ) ) { // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); @@ -9960,6 +9994,8 @@ jQuery.offset = { }; jQuery.fn.extend( { + + // offset() relates an element's border box to the document origin offset: function( options ) { // Preserve chaining for setter @@ -9971,7 +10007,7 @@ jQuery.fn.extend( { } ); } - var doc, docElem, rect, win, + var rect, win, elem = this[ 0 ]; if ( !elem ) { @@ -9986,50 +10022,52 @@ jQuery.fn.extend( { return { top: 0, left: 0 }; } + // Get document-relative position by adding viewport scroll to viewport-relative gBCR rect = elem.getBoundingClientRect(); - - doc = elem.ownerDocument; - docElem = doc.documentElement; - win = doc.defaultView; - + win = elem.ownerDocument.defaultView; return { - top: rect.top + win.pageYOffset - docElem.clientTop, - left: rect.left + win.pageXOffset - docElem.clientLeft + top: rect.top + win.pageYOffset, + left: rect.left + win.pageXOffset }; }, + // position() relates an element's margin box to its offset parent's padding box + // This corresponds to the behavior of CSS absolute positioning position: function() { if ( !this[ 0 ] ) { return; } - var offsetParent, offset, + var offsetParent, offset, doc, elem = this[ 0 ], parentOffset = { top: 0, left: 0 }; - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, - // because it is its only offset parent + // position:fixed elements are offset from the viewport, which itself always has zero offset if ( jQuery.css( elem, "position" ) === "fixed" ) { - // Assume getBoundingClientRect is there when computed position is fixed + // Assume position:fixed implies availability of getBoundingClientRect offset = elem.getBoundingClientRect(); } else { + offset = this.offset(); - // Get *real* offsetParent - offsetParent = this.offsetParent(); + // Account for the *real* offset parent, which can be the document or its root element + // when a statically positioned element is identified + doc = elem.ownerDocument; + offsetParent = elem.offsetParent || doc.documentElement; + while ( offsetParent && + ( offsetParent === doc.body || offsetParent === doc.documentElement ) && + jQuery.css( offsetParent, "position" ) === "static" ) { - // Get correct offsets - offset = this.offset(); - if ( !nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); + offsetParent = offsetParent.parentNode; } + if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { - // Add offsetParent borders - parentOffset = { - top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ), - left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) - }; + // Incorporate borders into its offset, since they are outside its content origin + parentOffset = jQuery( offsetParent ).offset(); + parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); + } } // Subtract parent offsets and element margins @@ -10071,7 +10109,7 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( // Coalesce documents and windows var win; - if ( jQuery.isWindow( elem ) ) { + if ( isWindow( elem ) ) { win = elem; } else if ( elem.nodeType === 9 ) { win = elem.defaultView; @@ -10129,7 +10167,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { return access( this, function( elem, type, value ) { var doc; - if ( jQuery.isWindow( elem ) ) { + if ( isWindow( elem ) ) { // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) return funcName.indexOf( "outer" ) === 0 ? @@ -10163,6 +10201,28 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { } ); +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + jQuery.fn.extend( { bind: function( types, data, fn ) { @@ -10184,6 +10244,37 @@ jQuery.fn.extend( { } } ); +// Bind a function to a context, optionally partially applying any +// arguments. +// jQuery.proxy is deprecated to promote standards (specifically Function#bind) +// However, it is not slated for removal any time soon +jQuery.proxy = function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; +}; + jQuery.holdReady = function( hold ) { if ( hold ) { jQuery.readyWait++; @@ -10194,6 +10285,26 @@ jQuery.holdReady = function( hold ) { jQuery.isArray = Array.isArray; jQuery.parseJSON = JSON.parse; jQuery.nodeName = nodeName; +jQuery.isFunction = isFunction; +jQuery.isWindow = isWindow; +jQuery.camelCase = camelCase; +jQuery.type = toType; + +jQuery.now = Date.now; + +jQuery.isNumeric = function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); +}; @@ -16166,6 +16277,7 @@ module.exports = Analyzer = class Analyzer { d.mem.activation = d.wOut * d.hOut * d.chOut * d.batchOut; break; case "convolution": + case "convolutiondepthwise": //dimensions params = n.attribs.convolution_param; kernel_w = (ref4 = params.kernel_w) != null ? ref4 : params.kernel_size; @@ -16184,10 +16296,15 @@ module.exports = Analyzer = class Analyzer { kernel = dilation * (kernel_h - 1) + 1; d.hOut = Math.floor((d.hIn + 2 * pad_h - kernel) / stride_h) + 1; d.chOut = numout; - //computation - d.comp.macc = (kernel_w * kernel_h) * (d.wOut * d.hOut) * d.chIn * d.chOut * d.batchOut / group; - //memory - d.mem.param = (kernel_w * kernel_h) * d.chIn * d.chOut / group + has_bias * d.chOut; + if (layertype === "convolution") { + //computation + d.comp.macc = (kernel_w * kernel_h) * (d.wOut * d.hOut) * d.chIn * d.chOut * d.batchOut / group; + //memory + d.mem.param = (kernel_w * kernel_h) * d.chIn * d.chOut / group + has_bias * d.chOut; // convolutiondepthwise + } else { + d.comp.macc = (kernel_w * kernel_h) * (d.wOut * d.hOut) * d.chIn * d.batchOut + (d.wOut * d.hOut) * d.chIn * d.chOut * d.batchOut / group; + d.mem.param = (kernel_w * kernel_h) * d.chIn + has_bias * d.chIn + d.chIn * d.chOut / group + has_bias * d.chOut; + } d.mem.activation = (d.wOut * d.hOut) * d.chOut * d.batchOut; // CACHE AND BANDWIDTH for Implementation Variants if (do_variants_analysis) { @@ -16474,8 +16591,9 @@ module.exports = Analyzer = class Analyzer { d.mem.activation = 0; } break; - // accuracy layers just pass through + // accuracy and shufflechannel layers just pass through case "accuracy": + case "shufflechannel": //dimensions //# assume pass-through d.wOut = d.wIn; @@ -16589,7 +16707,7 @@ module.exports = Analyzer = class Analyzer { d.comp.div = (num_region_proposals * (num_region_proposals - 1)) / 2; d.comp.macc = d.batchIn * (4 + 4) * 9 * (d.wIn * d.hIn) + 2 * d.comp.div; d.comp.add = d.batchIn * (8 + 2) * 9 * (d.wIn * d.hIn) + 6 * d.comp.div; - d.comp.comp = d.batchIn * (4 + 2) * 9 * (d.wIn * d.hIn) + Math.pow(9 * (d.wIn * d.hIn), 2) + 7 * d.comp.div; + d.comp.comp = d.batchIn * (4 + 2) * 9 * (d.wIn * d.hIn) + (9 * (d.wIn * d.hIn)) ** 2 + 7 * d.comp.div; d.comp.exp = d.batchIn * 2 * 9 * (d.wIn * d.hIn); //memory d.mem.activation = d.wOut * d.hOut * d.chOut * d.batchOut; @@ -16831,7 +16949,7 @@ generateNetwork = function(layers, header) { } return _.map(names, getSingleNode); }; - // Build the node LUT. +// Build the node LUT. for (j = 0, len = layers.length; j < len; j++) { layer = layers[j]; nodeTable[layer.name] = net.createNode(layer.name, layer.type, layer.attribs, {}); @@ -19002,7 +19120,7 @@ module.exports = Renderer = class Renderer { tbl.push(entry); } if (do_variants_analysis && worstcasepervariant) { - // worst case variant summary +// worst case variant summary for (l = 0, len2 = worstcasepervariant.length; l < len2; l++) { variant = worstcasepervariant[l]; for (key in variant) { @@ -19027,7 +19145,7 @@ module.exports = Renderer = class Renderer { exponents = [12, 9, 6, 3]; suffices = ["T", "G", "M", "k"]; decimals = Math.pow(10, decimals); - //debugger +//debugger for (i = j = 0, len = exponents.length; j < len; i = ++j) { exponent = exponents[i]; suffix = suffices[i]; @@ -19199,7 +19317,7 @@ module.exports = Renderer = class Renderer { areatbl = []; for (k = 0, len1 = detail.length; k < len1; k++) { entry = detail[k]; - if (!(entry.type === "Convolution" || entry.type === "Concat" || entry.type === "SoftmaxWithLoss" || entry.type === "innerproduct")) { + if (!(entry.type === "Convolution" || entry.type === "ConvolutionDepthwise" || entry.type === "Concat" || entry.type === "SoftmaxWithLoss" || entry.type === "innerproduct")) { continue; } // extract input dimension: diff --git a/index.html b/index.html index 560e878..1d0185e 100644 --- a/index.html +++ b/index.html @@ -4,9 +4,9 @@ - + Netscope CNN Analyzer - + diff --git a/package.json b/package.json new file mode 100644 index 0000000..6c35161 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "dependencies": { + "coffeeify": "^3.0.1", + "tableify": "^1.1.0", + "tablesorter": "2.26", + "watchify": "^3.11.0" + }, + "devDependencies": { + "coffeescript": "^2.3.1" + } +} diff --git a/presets/ResNeXt-101.prototxt b/presets/ResNeXt-101.prototxt new file mode 100644 index 0000000..d1e6dfd --- /dev/null +++ b/presets/ResNeXt-101.prototxt @@ -0,0 +1,4820 @@ +name: "ResNeXt-101" +layer { + name: "data" + type: "Input" + top: "data" + input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } } +} + +layer { + name: "bn_data" + type: "BatchNorm" + bottom: "data" + top: "data" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_bn_data" + bottom: "data" + top: "data" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "conv0" + type: "Convolution" + bottom: "data" + top: "conv0" + convolution_param { + num_output: 64 + kernel_size: 7 + stride: 2 + pad: 3 + bias_term: false + } +} + +layer { + name: "bn0" + type: "BatchNorm" + bottom: "conv0" + top: "conv0" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_bn0" + bottom: "conv0" + top: "conv0" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "relu0" + type: "ReLU" + bottom: "conv0" + top: "conv0" +} + +layer { + name: "pooling0" + type: "Pooling" + bottom: "conv0" + top: "pooling0" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + } +} + +layer { + name: "stage1_unit1_conv1" + type: "Convolution" + bottom: "pooling0" + top: "stage1_unit1_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn1" + type: "BatchNorm" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn1" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_relu1" + type: "ReLU" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" +} + +layer { + name: "stage1_unit1_conv2" + type: "Convolution" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn2" + type: "BatchNorm" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn2" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_relu2" + type: "ReLU" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" +} + +layer { + name: "stage1_unit1_conv3" + type: "Convolution" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn3" + type: "BatchNorm" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn3" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_sc" + type: "Convolution" + bottom: "pooling0" + top: "stage1_unit1_sc" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage1_unit1_sc" + top: "stage1_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_sc_bn" + bottom: "stage1_unit1_sc" + top: "stage1_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_plus" + type: "Eltwise" + bottom: "stage1_unit1_sc" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit1_relu" + type: "ReLU" + bottom: "stage1_unit1_plus" + top: "stage1_unit1_plus" +} + +layer { + name: "stage1_unit2_conv1" + type: "Convolution" + bottom: "stage1_unit1_plus" + top: "stage1_unit2_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn1" + type: "BatchNorm" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn1" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_relu1" + type: "ReLU" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" +} + +layer { + name: "stage1_unit2_conv2" + type: "Convolution" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn2" + type: "BatchNorm" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn2" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_relu2" + type: "ReLU" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" +} + +layer { + name: "stage1_unit2_conv3" + type: "Convolution" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn3" + type: "BatchNorm" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn3" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_plus" + type: "Eltwise" + bottom: "stage1_unit1_plus" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit2_relu" + type: "ReLU" + bottom: "stage1_unit2_plus" + top: "stage1_unit2_plus" +} + +layer { + name: "stage1_unit3_conv1" + type: "Convolution" + bottom: "stage1_unit2_plus" + top: "stage1_unit3_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn1" + type: "BatchNorm" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn1" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_relu1" + type: "ReLU" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" +} + +layer { + name: "stage1_unit3_conv2" + type: "Convolution" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn2" + type: "BatchNorm" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn2" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_relu2" + type: "ReLU" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" +} + +layer { + name: "stage1_unit3_conv3" + type: "Convolution" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn3" + type: "BatchNorm" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn3" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_plus" + type: "Eltwise" + bottom: "stage1_unit2_plus" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit3_relu" + type: "ReLU" + bottom: "stage1_unit3_plus" + top: "stage1_unit3_plus" +} + +layer { + name: "stage2_unit1_conv1" + type: "Convolution" + bottom: "stage1_unit3_plus" + top: "stage2_unit1_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn1" + type: "BatchNorm" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn1" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_relu1" + type: "ReLU" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" +} + +layer { + name: "stage2_unit1_conv2" + type: "Convolution" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn2" + type: "BatchNorm" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn2" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_relu2" + type: "ReLU" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" +} + +layer { + name: "stage2_unit1_conv3" + type: "Convolution" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn3" + type: "BatchNorm" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn3" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_sc" + type: "Convolution" + bottom: "stage1_unit3_plus" + top: "stage2_unit1_sc" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage2_unit1_sc" + top: "stage2_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_sc_bn" + bottom: "stage2_unit1_sc" + top: "stage2_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_plus" + type: "Eltwise" + bottom: "stage2_unit1_sc" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit1_relu" + type: "ReLU" + bottom: "stage2_unit1_plus" + top: "stage2_unit1_plus" +} + +layer { + name: "stage2_unit2_conv1" + type: "Convolution" + bottom: "stage2_unit1_plus" + top: "stage2_unit2_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn1" + type: "BatchNorm" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn1" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_relu1" + type: "ReLU" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" +} + +layer { + name: "stage2_unit2_conv2" + type: "Convolution" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn2" + type: "BatchNorm" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn2" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_relu2" + type: "ReLU" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" +} + +layer { + name: "stage2_unit2_conv3" + type: "Convolution" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn3" + type: "BatchNorm" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn3" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_plus" + type: "Eltwise" + bottom: "stage2_unit1_plus" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit2_relu" + type: "ReLU" + bottom: "stage2_unit2_plus" + top: "stage2_unit2_plus" +} + +layer { + name: "stage2_unit3_conv1" + type: "Convolution" + bottom: "stage2_unit2_plus" + top: "stage2_unit3_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn1" + type: "BatchNorm" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn1" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_relu1" + type: "ReLU" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" +} + +layer { + name: "stage2_unit3_conv2" + type: "Convolution" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn2" + type: "BatchNorm" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn2" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_relu2" + type: "ReLU" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" +} + +layer { + name: "stage2_unit3_conv3" + type: "Convolution" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn3" + type: "BatchNorm" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn3" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_plus" + type: "Eltwise" + bottom: "stage2_unit2_plus" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit3_relu" + type: "ReLU" + bottom: "stage2_unit3_plus" + top: "stage2_unit3_plus" +} + +layer { + name: "stage2_unit4_conv1" + type: "Convolution" + bottom: "stage2_unit3_plus" + top: "stage2_unit4_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn1" + type: "BatchNorm" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn1" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_relu1" + type: "ReLU" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" +} + +layer { + name: "stage2_unit4_conv2" + type: "Convolution" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn2" + type: "BatchNorm" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn2" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_relu2" + type: "ReLU" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" +} + +layer { + name: "stage2_unit4_conv3" + type: "Convolution" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn3" + type: "BatchNorm" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn3" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_plus" + type: "Eltwise" + bottom: "stage2_unit3_plus" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit4_relu" + type: "ReLU" + bottom: "stage2_unit4_plus" + top: "stage2_unit4_plus" +} + +layer { + name: "stage3_unit1_conv1" + type: "Convolution" + bottom: "stage2_unit4_plus" + top: "stage3_unit1_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn1" + type: "BatchNorm" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn1" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_relu1" + type: "ReLU" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" +} + +layer { + name: "stage3_unit1_conv2" + type: "Convolution" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn2" + type: "BatchNorm" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn2" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_relu2" + type: "ReLU" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" +} + +layer { + name: "stage3_unit1_conv3" + type: "Convolution" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn3" + type: "BatchNorm" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn3" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_sc" + type: "Convolution" + bottom: "stage2_unit4_plus" + top: "stage3_unit1_sc" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage3_unit1_sc" + top: "stage3_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_sc_bn" + bottom: "stage3_unit1_sc" + top: "stage3_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_plus" + type: "Eltwise" + bottom: "stage3_unit1_sc" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit1_relu" + type: "ReLU" + bottom: "stage3_unit1_plus" + top: "stage3_unit1_plus" +} + +layer { + name: "stage3_unit2_conv1" + type: "Convolution" + bottom: "stage3_unit1_plus" + top: "stage3_unit2_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn1" + type: "BatchNorm" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn1" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_relu1" + type: "ReLU" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" +} + +layer { + name: "stage3_unit2_conv2" + type: "Convolution" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn2" + type: "BatchNorm" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn2" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_relu2" + type: "ReLU" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" +} + +layer { + name: "stage3_unit2_conv3" + type: "Convolution" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn3" + type: "BatchNorm" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn3" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_plus" + type: "Eltwise" + bottom: "stage3_unit1_plus" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit2_relu" + type: "ReLU" + bottom: "stage3_unit2_plus" + top: "stage3_unit2_plus" +} + +layer { + name: "stage3_unit3_conv1" + type: "Convolution" + bottom: "stage3_unit2_plus" + top: "stage3_unit3_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn1" + type: "BatchNorm" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn1" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_relu1" + type: "ReLU" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" +} + +layer { + name: "stage3_unit3_conv2" + type: "Convolution" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn2" + type: "BatchNorm" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn2" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_relu2" + type: "ReLU" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" +} + +layer { + name: "stage3_unit3_conv3" + type: "Convolution" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn3" + type: "BatchNorm" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn3" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_plus" + type: "Eltwise" + bottom: "stage3_unit2_plus" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit3_relu" + type: "ReLU" + bottom: "stage3_unit3_plus" + top: "stage3_unit3_plus" +} + +layer { + name: "stage3_unit4_conv1" + type: "Convolution" + bottom: "stage3_unit3_plus" + top: "stage3_unit4_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn1" + type: "BatchNorm" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn1" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_relu1" + type: "ReLU" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" +} + +layer { + name: "stage3_unit4_conv2" + type: "Convolution" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn2" + type: "BatchNorm" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn2" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_relu2" + type: "ReLU" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" +} + +layer { + name: "stage3_unit4_conv3" + type: "Convolution" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn3" + type: "BatchNorm" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn3" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_plus" + type: "Eltwise" + bottom: "stage3_unit3_plus" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit4_relu" + type: "ReLU" + bottom: "stage3_unit4_plus" + top: "stage3_unit4_plus" +} + +layer { + name: "stage3_unit5_conv1" + type: "Convolution" + bottom: "stage3_unit4_plus" + top: "stage3_unit5_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn1" + type: "BatchNorm" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn1" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_relu1" + type: "ReLU" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" +} + +layer { + name: "stage3_unit5_conv2" + type: "Convolution" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn2" + type: "BatchNorm" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn2" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_relu2" + type: "ReLU" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" +} + +layer { + name: "stage3_unit5_conv3" + type: "Convolution" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn3" + type: "BatchNorm" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn3" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_plus" + type: "Eltwise" + bottom: "stage3_unit4_plus" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit5_relu" + type: "ReLU" + bottom: "stage3_unit5_plus" + top: "stage3_unit5_plus" +} + +layer { + name: "stage3_unit6_conv1" + type: "Convolution" + bottom: "stage3_unit5_plus" + top: "stage3_unit6_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn1" + type: "BatchNorm" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn1" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_relu1" + type: "ReLU" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" +} + +layer { + name: "stage3_unit6_conv2" + type: "Convolution" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn2" + type: "BatchNorm" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn2" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_relu2" + type: "ReLU" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" +} + +layer { + name: "stage3_unit6_conv3" + type: "Convolution" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn3" + type: "BatchNorm" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn3" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_plus" + type: "Eltwise" + bottom: "stage3_unit5_plus" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit6_relu" + type: "ReLU" + bottom: "stage3_unit6_plus" + top: "stage3_unit6_plus" +} + +layer { + name: "stage3_unit7_conv1" + type: "Convolution" + bottom: "stage3_unit6_plus" + top: "stage3_unit7_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit7_bn1" + type: "BatchNorm" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit7_bn1" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit7_relu1" + type: "ReLU" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv1" +} + +layer { + name: "stage3_unit7_conv2" + type: "Convolution" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit7_bn2" + type: "BatchNorm" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit7_bn2" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit7_relu2" + type: "ReLU" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv2" +} + +layer { + name: "stage3_unit7_conv3" + type: "Convolution" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit7_bn3" + type: "BatchNorm" + bottom: "stage3_unit7_conv3" + top: "stage3_unit7_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit7_bn3" + bottom: "stage3_unit7_conv3" + top: "stage3_unit7_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit7_plus" + type: "Eltwise" + bottom: "stage3_unit6_plus" + bottom: "stage3_unit7_conv3" + top: "stage3_unit7_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit7_relu" + type: "ReLU" + bottom: "stage3_unit7_plus" + top: "stage3_unit7_plus" +} + +layer { + name: "stage3_unit8_conv1" + type: "Convolution" + bottom: "stage3_unit7_plus" + top: "stage3_unit8_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit8_bn1" + type: "BatchNorm" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit8_bn1" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit8_relu1" + type: "ReLU" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv1" +} + +layer { + name: "stage3_unit8_conv2" + type: "Convolution" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit8_bn2" + type: "BatchNorm" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit8_bn2" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit8_relu2" + type: "ReLU" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv2" +} + +layer { + name: "stage3_unit8_conv3" + type: "Convolution" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit8_bn3" + type: "BatchNorm" + bottom: "stage3_unit8_conv3" + top: "stage3_unit8_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit8_bn3" + bottom: "stage3_unit8_conv3" + top: "stage3_unit8_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit8_plus" + type: "Eltwise" + bottom: "stage3_unit7_plus" + bottom: "stage3_unit8_conv3" + top: "stage3_unit8_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit8_relu" + type: "ReLU" + bottom: "stage3_unit8_plus" + top: "stage3_unit8_plus" +} + +layer { + name: "stage3_unit9_conv1" + type: "Convolution" + bottom: "stage3_unit8_plus" + top: "stage3_unit9_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit9_bn1" + type: "BatchNorm" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit9_bn1" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit9_relu1" + type: "ReLU" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv1" +} + +layer { + name: "stage3_unit9_conv2" + type: "Convolution" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit9_bn2" + type: "BatchNorm" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit9_bn2" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit9_relu2" + type: "ReLU" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv2" +} + +layer { + name: "stage3_unit9_conv3" + type: "Convolution" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit9_bn3" + type: "BatchNorm" + bottom: "stage3_unit9_conv3" + top: "stage3_unit9_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit9_bn3" + bottom: "stage3_unit9_conv3" + top: "stage3_unit9_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit9_plus" + type: "Eltwise" + bottom: "stage3_unit8_plus" + bottom: "stage3_unit9_conv3" + top: "stage3_unit9_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit9_relu" + type: "ReLU" + bottom: "stage3_unit9_plus" + top: "stage3_unit9_plus" +} + +layer { + name: "stage3_unit10_conv1" + type: "Convolution" + bottom: "stage3_unit9_plus" + top: "stage3_unit10_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit10_bn1" + type: "BatchNorm" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit10_bn1" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit10_relu1" + type: "ReLU" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv1" +} + +layer { + name: "stage3_unit10_conv2" + type: "Convolution" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit10_bn2" + type: "BatchNorm" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit10_bn2" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit10_relu2" + type: "ReLU" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv2" +} + +layer { + name: "stage3_unit10_conv3" + type: "Convolution" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit10_bn3" + type: "BatchNorm" + bottom: "stage3_unit10_conv3" + top: "stage3_unit10_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit10_bn3" + bottom: "stage3_unit10_conv3" + top: "stage3_unit10_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit10_plus" + type: "Eltwise" + bottom: "stage3_unit9_plus" + bottom: "stage3_unit10_conv3" + top: "stage3_unit10_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit10_relu" + type: "ReLU" + bottom: "stage3_unit10_plus" + top: "stage3_unit10_plus" +} + +layer { + name: "stage3_unit11_conv1" + type: "Convolution" + bottom: "stage3_unit10_plus" + top: "stage3_unit11_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit11_bn1" + type: "BatchNorm" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit11_bn1" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit11_relu1" + type: "ReLU" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv1" +} + +layer { + name: "stage3_unit11_conv2" + type: "Convolution" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit11_bn2" + type: "BatchNorm" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit11_bn2" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit11_relu2" + type: "ReLU" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv2" +} + +layer { + name: "stage3_unit11_conv3" + type: "Convolution" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit11_bn3" + type: "BatchNorm" + bottom: "stage3_unit11_conv3" + top: "stage3_unit11_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit11_bn3" + bottom: "stage3_unit11_conv3" + top: "stage3_unit11_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit11_plus" + type: "Eltwise" + bottom: "stage3_unit10_plus" + bottom: "stage3_unit11_conv3" + top: "stage3_unit11_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit11_relu" + type: "ReLU" + bottom: "stage3_unit11_plus" + top: "stage3_unit11_plus" +} + +layer { + name: "stage3_unit12_conv1" + type: "Convolution" + bottom: "stage3_unit11_plus" + top: "stage3_unit12_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit12_bn1" + type: "BatchNorm" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit12_bn1" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit12_relu1" + type: "ReLU" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv1" +} + +layer { + name: "stage3_unit12_conv2" + type: "Convolution" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit12_bn2" + type: "BatchNorm" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit12_bn2" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit12_relu2" + type: "ReLU" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv2" +} + +layer { + name: "stage3_unit12_conv3" + type: "Convolution" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit12_bn3" + type: "BatchNorm" + bottom: "stage3_unit12_conv3" + top: "stage3_unit12_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit12_bn3" + bottom: "stage3_unit12_conv3" + top: "stage3_unit12_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit12_plus" + type: "Eltwise" + bottom: "stage3_unit11_plus" + bottom: "stage3_unit12_conv3" + top: "stage3_unit12_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit12_relu" + type: "ReLU" + bottom: "stage3_unit12_plus" + top: "stage3_unit12_plus" +} + +layer { + name: "stage3_unit13_conv1" + type: "Convolution" + bottom: "stage3_unit12_plus" + top: "stage3_unit13_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit13_bn1" + type: "BatchNorm" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit13_bn1" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit13_relu1" + type: "ReLU" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv1" +} + +layer { + name: "stage3_unit13_conv2" + type: "Convolution" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit13_bn2" + type: "BatchNorm" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit13_bn2" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit13_relu2" + type: "ReLU" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv2" +} + +layer { + name: "stage3_unit13_conv3" + type: "Convolution" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit13_bn3" + type: "BatchNorm" + bottom: "stage3_unit13_conv3" + top: "stage3_unit13_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit13_bn3" + bottom: "stage3_unit13_conv3" + top: "stage3_unit13_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit13_plus" + type: "Eltwise" + bottom: "stage3_unit12_plus" + bottom: "stage3_unit13_conv3" + top: "stage3_unit13_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit13_relu" + type: "ReLU" + bottom: "stage3_unit13_plus" + top: "stage3_unit13_plus" +} + +layer { + name: "stage3_unit14_conv1" + type: "Convolution" + bottom: "stage3_unit13_plus" + top: "stage3_unit14_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit14_bn1" + type: "BatchNorm" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit14_bn1" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit14_relu1" + type: "ReLU" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv1" +} + +layer { + name: "stage3_unit14_conv2" + type: "Convolution" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit14_bn2" + type: "BatchNorm" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit14_bn2" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit14_relu2" + type: "ReLU" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv2" +} + +layer { + name: "stage3_unit14_conv3" + type: "Convolution" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit14_bn3" + type: "BatchNorm" + bottom: "stage3_unit14_conv3" + top: "stage3_unit14_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit14_bn3" + bottom: "stage3_unit14_conv3" + top: "stage3_unit14_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit14_plus" + type: "Eltwise" + bottom: "stage3_unit13_plus" + bottom: "stage3_unit14_conv3" + top: "stage3_unit14_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit14_relu" + type: "ReLU" + bottom: "stage3_unit14_plus" + top: "stage3_unit14_plus" +} + +layer { + name: "stage3_unit15_conv1" + type: "Convolution" + bottom: "stage3_unit14_plus" + top: "stage3_unit15_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit15_bn1" + type: "BatchNorm" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit15_bn1" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit15_relu1" + type: "ReLU" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv1" +} + +layer { + name: "stage3_unit15_conv2" + type: "Convolution" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit15_bn2" + type: "BatchNorm" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit15_bn2" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit15_relu2" + type: "ReLU" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv2" +} + +layer { + name: "stage3_unit15_conv3" + type: "Convolution" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit15_bn3" + type: "BatchNorm" + bottom: "stage3_unit15_conv3" + top: "stage3_unit15_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit15_bn3" + bottom: "stage3_unit15_conv3" + top: "stage3_unit15_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit15_plus" + type: "Eltwise" + bottom: "stage3_unit14_plus" + bottom: "stage3_unit15_conv3" + top: "stage3_unit15_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit15_relu" + type: "ReLU" + bottom: "stage3_unit15_plus" + top: "stage3_unit15_plus" +} + +layer { + name: "stage3_unit16_conv1" + type: "Convolution" + bottom: "stage3_unit15_plus" + top: "stage3_unit16_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit16_bn1" + type: "BatchNorm" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit16_bn1" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit16_relu1" + type: "ReLU" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv1" +} + +layer { + name: "stage3_unit16_conv2" + type: "Convolution" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit16_bn2" + type: "BatchNorm" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit16_bn2" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit16_relu2" + type: "ReLU" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv2" +} + +layer { + name: "stage3_unit16_conv3" + type: "Convolution" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit16_bn3" + type: "BatchNorm" + bottom: "stage3_unit16_conv3" + top: "stage3_unit16_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit16_bn3" + bottom: "stage3_unit16_conv3" + top: "stage3_unit16_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit16_plus" + type: "Eltwise" + bottom: "stage3_unit15_plus" + bottom: "stage3_unit16_conv3" + top: "stage3_unit16_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit16_relu" + type: "ReLU" + bottom: "stage3_unit16_plus" + top: "stage3_unit16_plus" +} + +layer { + name: "stage3_unit17_conv1" + type: "Convolution" + bottom: "stage3_unit16_plus" + top: "stage3_unit17_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit17_bn1" + type: "BatchNorm" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit17_bn1" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit17_relu1" + type: "ReLU" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv1" +} + +layer { + name: "stage3_unit17_conv2" + type: "Convolution" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit17_bn2" + type: "BatchNorm" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit17_bn2" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit17_relu2" + type: "ReLU" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv2" +} + +layer { + name: "stage3_unit17_conv3" + type: "Convolution" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit17_bn3" + type: "BatchNorm" + bottom: "stage3_unit17_conv3" + top: "stage3_unit17_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit17_bn3" + bottom: "stage3_unit17_conv3" + top: "stage3_unit17_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit17_plus" + type: "Eltwise" + bottom: "stage3_unit16_plus" + bottom: "stage3_unit17_conv3" + top: "stage3_unit17_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit17_relu" + type: "ReLU" + bottom: "stage3_unit17_plus" + top: "stage3_unit17_plus" +} + +layer { + name: "stage3_unit18_conv1" + type: "Convolution" + bottom: "stage3_unit17_plus" + top: "stage3_unit18_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit18_bn1" + type: "BatchNorm" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit18_bn1" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit18_relu1" + type: "ReLU" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv1" +} + +layer { + name: "stage3_unit18_conv2" + type: "Convolution" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit18_bn2" + type: "BatchNorm" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit18_bn2" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit18_relu2" + type: "ReLU" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv2" +} + +layer { + name: "stage3_unit18_conv3" + type: "Convolution" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit18_bn3" + type: "BatchNorm" + bottom: "stage3_unit18_conv3" + top: "stage3_unit18_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit18_bn3" + bottom: "stage3_unit18_conv3" + top: "stage3_unit18_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit18_plus" + type: "Eltwise" + bottom: "stage3_unit17_plus" + bottom: "stage3_unit18_conv3" + top: "stage3_unit18_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit18_relu" + type: "ReLU" + bottom: "stage3_unit18_plus" + top: "stage3_unit18_plus" +} + +layer { + name: "stage3_unit19_conv1" + type: "Convolution" + bottom: "stage3_unit18_plus" + top: "stage3_unit19_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit19_bn1" + type: "BatchNorm" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit19_bn1" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit19_relu1" + type: "ReLU" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv1" +} + +layer { + name: "stage3_unit19_conv2" + type: "Convolution" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit19_bn2" + type: "BatchNorm" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit19_bn2" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit19_relu2" + type: "ReLU" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv2" +} + +layer { + name: "stage3_unit19_conv3" + type: "Convolution" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit19_bn3" + type: "BatchNorm" + bottom: "stage3_unit19_conv3" + top: "stage3_unit19_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit19_bn3" + bottom: "stage3_unit19_conv3" + top: "stage3_unit19_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit19_plus" + type: "Eltwise" + bottom: "stage3_unit18_plus" + bottom: "stage3_unit19_conv3" + top: "stage3_unit19_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit19_relu" + type: "ReLU" + bottom: "stage3_unit19_plus" + top: "stage3_unit19_plus" +} + +layer { + name: "stage3_unit20_conv1" + type: "Convolution" + bottom: "stage3_unit19_plus" + top: "stage3_unit20_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit20_bn1" + type: "BatchNorm" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit20_bn1" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit20_relu1" + type: "ReLU" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv1" +} + +layer { + name: "stage3_unit20_conv2" + type: "Convolution" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit20_bn2" + type: "BatchNorm" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit20_bn2" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit20_relu2" + type: "ReLU" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv2" +} + +layer { + name: "stage3_unit20_conv3" + type: "Convolution" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit20_bn3" + type: "BatchNorm" + bottom: "stage3_unit20_conv3" + top: "stage3_unit20_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit20_bn3" + bottom: "stage3_unit20_conv3" + top: "stage3_unit20_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit20_plus" + type: "Eltwise" + bottom: "stage3_unit19_plus" + bottom: "stage3_unit20_conv3" + top: "stage3_unit20_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit20_relu" + type: "ReLU" + bottom: "stage3_unit20_plus" + top: "stage3_unit20_plus" +} + +layer { + name: "stage3_unit21_conv1" + type: "Convolution" + bottom: "stage3_unit20_plus" + top: "stage3_unit21_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit21_bn1" + type: "BatchNorm" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit21_bn1" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit21_relu1" + type: "ReLU" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv1" +} + +layer { + name: "stage3_unit21_conv2" + type: "Convolution" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit21_bn2" + type: "BatchNorm" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit21_bn2" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit21_relu2" + type: "ReLU" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv2" +} + +layer { + name: "stage3_unit21_conv3" + type: "Convolution" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit21_bn3" + type: "BatchNorm" + bottom: "stage3_unit21_conv3" + top: "stage3_unit21_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit21_bn3" + bottom: "stage3_unit21_conv3" + top: "stage3_unit21_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit21_plus" + type: "Eltwise" + bottom: "stage3_unit20_plus" + bottom: "stage3_unit21_conv3" + top: "stage3_unit21_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit21_relu" + type: "ReLU" + bottom: "stage3_unit21_plus" + top: "stage3_unit21_plus" +} + +layer { + name: "stage3_unit22_conv1" + type: "Convolution" + bottom: "stage3_unit21_plus" + top: "stage3_unit22_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit22_bn1" + type: "BatchNorm" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit22_bn1" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit22_relu1" + type: "ReLU" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv1" +} + +layer { + name: "stage3_unit22_conv2" + type: "Convolution" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit22_bn2" + type: "BatchNorm" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit22_bn2" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit22_relu2" + type: "ReLU" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv2" +} + +layer { + name: "stage3_unit22_conv3" + type: "Convolution" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit22_bn3" + type: "BatchNorm" + bottom: "stage3_unit22_conv3" + top: "stage3_unit22_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit22_bn3" + bottom: "stage3_unit22_conv3" + top: "stage3_unit22_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit22_plus" + type: "Eltwise" + bottom: "stage3_unit21_plus" + bottom: "stage3_unit22_conv3" + top: "stage3_unit22_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit22_relu" + type: "ReLU" + bottom: "stage3_unit22_plus" + top: "stage3_unit22_plus" +} + +layer { + name: "stage3_unit23_conv1" + type: "Convolution" + bottom: "stage3_unit22_plus" + top: "stage3_unit23_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit23_bn1" + type: "BatchNorm" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit23_bn1" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit23_relu1" + type: "ReLU" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv1" +} + +layer { + name: "stage3_unit23_conv2" + type: "Convolution" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit23_bn2" + type: "BatchNorm" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit23_bn2" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit23_relu2" + type: "ReLU" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv2" +} + +layer { + name: "stage3_unit23_conv3" + type: "Convolution" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit23_bn3" + type: "BatchNorm" + bottom: "stage3_unit23_conv3" + top: "stage3_unit23_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit23_bn3" + bottom: "stage3_unit23_conv3" + top: "stage3_unit23_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit23_plus" + type: "Eltwise" + bottom: "stage3_unit22_plus" + bottom: "stage3_unit23_conv3" + top: "stage3_unit23_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit23_relu" + type: "ReLU" + bottom: "stage3_unit23_plus" + top: "stage3_unit23_plus" +} + +layer { + name: "stage4_unit1_conv1" + type: "Convolution" + bottom: "stage3_unit23_plus" + top: "stage4_unit1_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn1" + type: "BatchNorm" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn1" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_relu1" + type: "ReLU" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" +} + +layer { + name: "stage4_unit1_conv2" + type: "Convolution" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn2" + type: "BatchNorm" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn2" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_relu2" + type: "ReLU" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" +} + +layer { + name: "stage4_unit1_conv3" + type: "Convolution" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn3" + type: "BatchNorm" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn3" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_sc" + type: "Convolution" + bottom: "stage3_unit23_plus" + top: "stage4_unit1_sc" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage4_unit1_sc" + top: "stage4_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_sc_bn" + bottom: "stage4_unit1_sc" + top: "stage4_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_plus" + type: "Eltwise" + bottom: "stage4_unit1_sc" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit1_relu" + type: "ReLU" + bottom: "stage4_unit1_plus" + top: "stage4_unit1_plus" +} + +layer { + name: "stage4_unit2_conv1" + type: "Convolution" + bottom: "stage4_unit1_plus" + top: "stage4_unit2_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn1" + type: "BatchNorm" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn1" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_relu1" + type: "ReLU" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" +} + +layer { + name: "stage4_unit2_conv2" + type: "Convolution" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn2" + type: "BatchNorm" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn2" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_relu2" + type: "ReLU" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" +} + +layer { + name: "stage4_unit2_conv3" + type: "Convolution" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn3" + type: "BatchNorm" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn3" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_plus" + type: "Eltwise" + bottom: "stage4_unit1_plus" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit2_relu" + type: "ReLU" + bottom: "stage4_unit2_plus" + top: "stage4_unit2_plus" +} + +layer { + name: "stage4_unit3_conv1" + type: "Convolution" + bottom: "stage4_unit2_plus" + top: "stage4_unit3_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn1" + type: "BatchNorm" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn1" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_relu1" + type: "ReLU" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" +} + +layer { + name: "stage4_unit3_conv2" + type: "Convolution" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn2" + type: "BatchNorm" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn2" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_relu2" + type: "ReLU" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" +} + +layer { + name: "stage4_unit3_conv3" + type: "Convolution" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn3" + type: "BatchNorm" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn3" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_plus" + type: "Eltwise" + bottom: "stage4_unit2_plus" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit3_relu" + type: "ReLU" + bottom: "stage4_unit3_plus" + top: "stage4_unit3_plus" +} + +layer { + name: "pool1" + type: "Pooling" + bottom: "stage4_unit3_plus" + top: "pool1" + pooling_param { + global_pooling : true + pool: AVE + } +} + +layer { + name: "fc1" + type: "InnerProduct" + bottom: "pool1" + top: "fc1" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 1000 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0 + } + } +} + +layer { + name: "prob" + type: "Softmax" + bottom: "fc1" + top: "prob" +} + diff --git a/presets/ResNeXt-152.prototxt b/presets/ResNeXt-152.prototxt new file mode 100644 index 0000000..796e5d6 --- /dev/null +++ b/presets/ResNeXt-152.prototxt @@ -0,0 +1,7166 @@ +name: "ResNeXt-152" +layer { + name: "data" + type: "Input" + top: "data" + input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } } +} + +layer { + name: "bn_data" + type: "BatchNorm" + bottom: "data" + top: "data" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_bn_data" + bottom: "data" + top: "data" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "conv0" + type: "Convolution" + bottom: "data" + top: "conv0" + convolution_param { + num_output: 64 + kernel_size: 7 + stride: 2 + pad: 3 + bias_term: false + } +} + +layer { + name: "bn0" + type: "BatchNorm" + bottom: "conv0" + top: "conv0" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_bn0" + bottom: "conv0" + top: "conv0" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "relu0" + type: "ReLU" + bottom: "conv0" + top: "conv0" +} + +layer { + name: "pooling0" + type: "Pooling" + bottom: "conv0" + top: "pooling0" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + } +} + +layer { + name: "stage1_unit1_conv1" + type: "Convolution" + bottom: "pooling0" + top: "stage1_unit1_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn1" + type: "BatchNorm" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn1" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_relu1" + type: "ReLU" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" +} + +layer { + name: "stage1_unit1_conv2" + type: "Convolution" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn2" + type: "BatchNorm" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn2" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_relu2" + type: "ReLU" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" +} + +layer { + name: "stage1_unit1_conv3" + type: "Convolution" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn3" + type: "BatchNorm" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn3" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_sc" + type: "Convolution" + bottom: "pooling0" + top: "stage1_unit1_sc" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage1_unit1_sc" + top: "stage1_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_sc_bn" + bottom: "stage1_unit1_sc" + top: "stage1_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_plus" + type: "Eltwise" + bottom: "stage1_unit1_sc" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit1_relu" + type: "ReLU" + bottom: "stage1_unit1_plus" + top: "stage1_unit1_plus" +} + +layer { + name: "stage1_unit2_conv1" + type: "Convolution" + bottom: "stage1_unit1_plus" + top: "stage1_unit2_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn1" + type: "BatchNorm" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn1" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_relu1" + type: "ReLU" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" +} + +layer { + name: "stage1_unit2_conv2" + type: "Convolution" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn2" + type: "BatchNorm" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn2" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_relu2" + type: "ReLU" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" +} + +layer { + name: "stage1_unit2_conv3" + type: "Convolution" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn3" + type: "BatchNorm" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn3" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_plus" + type: "Eltwise" + bottom: "stage1_unit1_plus" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit2_relu" + type: "ReLU" + bottom: "stage1_unit2_plus" + top: "stage1_unit2_plus" +} + +layer { + name: "stage1_unit3_conv1" + type: "Convolution" + bottom: "stage1_unit2_plus" + top: "stage1_unit3_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn1" + type: "BatchNorm" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn1" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_relu1" + type: "ReLU" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" +} + +layer { + name: "stage1_unit3_conv2" + type: "Convolution" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn2" + type: "BatchNorm" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn2" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_relu2" + type: "ReLU" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" +} + +layer { + name: "stage1_unit3_conv3" + type: "Convolution" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn3" + type: "BatchNorm" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn3" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_plus" + type: "Eltwise" + bottom: "stage1_unit2_plus" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit3_relu" + type: "ReLU" + bottom: "stage1_unit3_plus" + top: "stage1_unit3_plus" +} + +layer { + name: "stage2_unit1_conv1" + type: "Convolution" + bottom: "stage1_unit3_plus" + top: "stage2_unit1_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn1" + type: "BatchNorm" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn1" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_relu1" + type: "ReLU" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" +} + +layer { + name: "stage2_unit1_conv2" + type: "Convolution" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn2" + type: "BatchNorm" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn2" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_relu2" + type: "ReLU" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" +} + +layer { + name: "stage2_unit1_conv3" + type: "Convolution" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn3" + type: "BatchNorm" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn3" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_sc" + type: "Convolution" + bottom: "stage1_unit3_plus" + top: "stage2_unit1_sc" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage2_unit1_sc" + top: "stage2_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_sc_bn" + bottom: "stage2_unit1_sc" + top: "stage2_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_plus" + type: "Eltwise" + bottom: "stage2_unit1_sc" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit1_relu" + type: "ReLU" + bottom: "stage2_unit1_plus" + top: "stage2_unit1_plus" +} + +layer { + name: "stage2_unit2_conv1" + type: "Convolution" + bottom: "stage2_unit1_plus" + top: "stage2_unit2_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn1" + type: "BatchNorm" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn1" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_relu1" + type: "ReLU" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" +} + +layer { + name: "stage2_unit2_conv2" + type: "Convolution" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn2" + type: "BatchNorm" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn2" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_relu2" + type: "ReLU" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" +} + +layer { + name: "stage2_unit2_conv3" + type: "Convolution" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn3" + type: "BatchNorm" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn3" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_plus" + type: "Eltwise" + bottom: "stage2_unit1_plus" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit2_relu" + type: "ReLU" + bottom: "stage2_unit2_plus" + top: "stage2_unit2_plus" +} + +layer { + name: "stage2_unit3_conv1" + type: "Convolution" + bottom: "stage2_unit2_plus" + top: "stage2_unit3_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn1" + type: "BatchNorm" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn1" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_relu1" + type: "ReLU" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" +} + +layer { + name: "stage2_unit3_conv2" + type: "Convolution" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn2" + type: "BatchNorm" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn2" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_relu2" + type: "ReLU" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" +} + +layer { + name: "stage2_unit3_conv3" + type: "Convolution" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn3" + type: "BatchNorm" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn3" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_plus" + type: "Eltwise" + bottom: "stage2_unit2_plus" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit3_relu" + type: "ReLU" + bottom: "stage2_unit3_plus" + top: "stage2_unit3_plus" +} + +layer { + name: "stage2_unit4_conv1" + type: "Convolution" + bottom: "stage2_unit3_plus" + top: "stage2_unit4_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn1" + type: "BatchNorm" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn1" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_relu1" + type: "ReLU" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" +} + +layer { + name: "stage2_unit4_conv2" + type: "Convolution" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn2" + type: "BatchNorm" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn2" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_relu2" + type: "ReLU" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" +} + +layer { + name: "stage2_unit4_conv3" + type: "Convolution" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn3" + type: "BatchNorm" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn3" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_plus" + type: "Eltwise" + bottom: "stage2_unit3_plus" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit4_relu" + type: "ReLU" + bottom: "stage2_unit4_plus" + top: "stage2_unit4_plus" +} + +layer { + name: "stage2_unit5_conv1" + type: "Convolution" + bottom: "stage2_unit4_plus" + top: "stage2_unit5_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit5_bn1" + type: "BatchNorm" + bottom: "stage2_unit5_conv1" + top: "stage2_unit5_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit5_bn1" + bottom: "stage2_unit5_conv1" + top: "stage2_unit5_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit5_relu1" + type: "ReLU" + bottom: "stage2_unit5_conv1" + top: "stage2_unit5_conv1" +} + +layer { + name: "stage2_unit5_conv2" + type: "Convolution" + bottom: "stage2_unit5_conv1" + top: "stage2_unit5_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit5_bn2" + type: "BatchNorm" + bottom: "stage2_unit5_conv2" + top: "stage2_unit5_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit5_bn2" + bottom: "stage2_unit5_conv2" + top: "stage2_unit5_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit5_relu2" + type: "ReLU" + bottom: "stage2_unit5_conv2" + top: "stage2_unit5_conv2" +} + +layer { + name: "stage2_unit5_conv3" + type: "Convolution" + bottom: "stage2_unit5_conv2" + top: "stage2_unit5_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit5_bn3" + type: "BatchNorm" + bottom: "stage2_unit5_conv3" + top: "stage2_unit5_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit5_bn3" + bottom: "stage2_unit5_conv3" + top: "stage2_unit5_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit5_plus" + type: "Eltwise" + bottom: "stage2_unit4_plus" + bottom: "stage2_unit5_conv3" + top: "stage2_unit5_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit5_relu" + type: "ReLU" + bottom: "stage2_unit5_plus" + top: "stage2_unit5_plus" +} + +layer { + name: "stage2_unit6_conv1" + type: "Convolution" + bottom: "stage2_unit5_plus" + top: "stage2_unit6_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit6_bn1" + type: "BatchNorm" + bottom: "stage2_unit6_conv1" + top: "stage2_unit6_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit6_bn1" + bottom: "stage2_unit6_conv1" + top: "stage2_unit6_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit6_relu1" + type: "ReLU" + bottom: "stage2_unit6_conv1" + top: "stage2_unit6_conv1" +} + +layer { + name: "stage2_unit6_conv2" + type: "Convolution" + bottom: "stage2_unit6_conv1" + top: "stage2_unit6_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit6_bn2" + type: "BatchNorm" + bottom: "stage2_unit6_conv2" + top: "stage2_unit6_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit6_bn2" + bottom: "stage2_unit6_conv2" + top: "stage2_unit6_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit6_relu2" + type: "ReLU" + bottom: "stage2_unit6_conv2" + top: "stage2_unit6_conv2" +} + +layer { + name: "stage2_unit6_conv3" + type: "Convolution" + bottom: "stage2_unit6_conv2" + top: "stage2_unit6_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit6_bn3" + type: "BatchNorm" + bottom: "stage2_unit6_conv3" + top: "stage2_unit6_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit6_bn3" + bottom: "stage2_unit6_conv3" + top: "stage2_unit6_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit6_plus" + type: "Eltwise" + bottom: "stage2_unit5_plus" + bottom: "stage2_unit6_conv3" + top: "stage2_unit6_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit6_relu" + type: "ReLU" + bottom: "stage2_unit6_plus" + top: "stage2_unit6_plus" +} + +layer { + name: "stage2_unit7_conv1" + type: "Convolution" + bottom: "stage2_unit6_plus" + top: "stage2_unit7_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit7_bn1" + type: "BatchNorm" + bottom: "stage2_unit7_conv1" + top: "stage2_unit7_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit7_bn1" + bottom: "stage2_unit7_conv1" + top: "stage2_unit7_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit7_relu1" + type: "ReLU" + bottom: "stage2_unit7_conv1" + top: "stage2_unit7_conv1" +} + +layer { + name: "stage2_unit7_conv2" + type: "Convolution" + bottom: "stage2_unit7_conv1" + top: "stage2_unit7_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit7_bn2" + type: "BatchNorm" + bottom: "stage2_unit7_conv2" + top: "stage2_unit7_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit7_bn2" + bottom: "stage2_unit7_conv2" + top: "stage2_unit7_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit7_relu2" + type: "ReLU" + bottom: "stage2_unit7_conv2" + top: "stage2_unit7_conv2" +} + +layer { + name: "stage2_unit7_conv3" + type: "Convolution" + bottom: "stage2_unit7_conv2" + top: "stage2_unit7_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit7_bn3" + type: "BatchNorm" + bottom: "stage2_unit7_conv3" + top: "stage2_unit7_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit7_bn3" + bottom: "stage2_unit7_conv3" + top: "stage2_unit7_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit7_plus" + type: "Eltwise" + bottom: "stage2_unit6_plus" + bottom: "stage2_unit7_conv3" + top: "stage2_unit7_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit7_relu" + type: "ReLU" + bottom: "stage2_unit7_plus" + top: "stage2_unit7_plus" +} + +layer { + name: "stage2_unit8_conv1" + type: "Convolution" + bottom: "stage2_unit7_plus" + top: "stage2_unit8_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit8_bn1" + type: "BatchNorm" + bottom: "stage2_unit8_conv1" + top: "stage2_unit8_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit8_bn1" + bottom: "stage2_unit8_conv1" + top: "stage2_unit8_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit8_relu1" + type: "ReLU" + bottom: "stage2_unit8_conv1" + top: "stage2_unit8_conv1" +} + +layer { + name: "stage2_unit8_conv2" + type: "Convolution" + bottom: "stage2_unit8_conv1" + top: "stage2_unit8_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit8_bn2" + type: "BatchNorm" + bottom: "stage2_unit8_conv2" + top: "stage2_unit8_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit8_bn2" + bottom: "stage2_unit8_conv2" + top: "stage2_unit8_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit8_relu2" + type: "ReLU" + bottom: "stage2_unit8_conv2" + top: "stage2_unit8_conv2" +} + +layer { + name: "stage2_unit8_conv3" + type: "Convolution" + bottom: "stage2_unit8_conv2" + top: "stage2_unit8_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit8_bn3" + type: "BatchNorm" + bottom: "stage2_unit8_conv3" + top: "stage2_unit8_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit8_bn3" + bottom: "stage2_unit8_conv3" + top: "stage2_unit8_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit8_plus" + type: "Eltwise" + bottom: "stage2_unit7_plus" + bottom: "stage2_unit8_conv3" + top: "stage2_unit8_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit8_relu" + type: "ReLU" + bottom: "stage2_unit8_plus" + top: "stage2_unit8_plus" +} + +layer { + name: "stage3_unit1_conv1" + type: "Convolution" + bottom: "stage2_unit8_plus" + top: "stage3_unit1_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn1" + type: "BatchNorm" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn1" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_relu1" + type: "ReLU" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" +} + +layer { + name: "stage3_unit1_conv2" + type: "Convolution" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn2" + type: "BatchNorm" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn2" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_relu2" + type: "ReLU" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" +} + +layer { + name: "stage3_unit1_conv3" + type: "Convolution" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn3" + type: "BatchNorm" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn3" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_sc" + type: "Convolution" + bottom: "stage2_unit8_plus" + top: "stage3_unit1_sc" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage3_unit1_sc" + top: "stage3_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_sc_bn" + bottom: "stage3_unit1_sc" + top: "stage3_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_plus" + type: "Eltwise" + bottom: "stage3_unit1_sc" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit1_relu" + type: "ReLU" + bottom: "stage3_unit1_plus" + top: "stage3_unit1_plus" +} + +layer { + name: "stage3_unit2_conv1" + type: "Convolution" + bottom: "stage3_unit1_plus" + top: "stage3_unit2_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn1" + type: "BatchNorm" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn1" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_relu1" + type: "ReLU" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" +} + +layer { + name: "stage3_unit2_conv2" + type: "Convolution" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn2" + type: "BatchNorm" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn2" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_relu2" + type: "ReLU" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" +} + +layer { + name: "stage3_unit2_conv3" + type: "Convolution" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn3" + type: "BatchNorm" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn3" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_plus" + type: "Eltwise" + bottom: "stage3_unit1_plus" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit2_relu" + type: "ReLU" + bottom: "stage3_unit2_plus" + top: "stage3_unit2_plus" +} + +layer { + name: "stage3_unit3_conv1" + type: "Convolution" + bottom: "stage3_unit2_plus" + top: "stage3_unit3_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn1" + type: "BatchNorm" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn1" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_relu1" + type: "ReLU" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" +} + +layer { + name: "stage3_unit3_conv2" + type: "Convolution" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn2" + type: "BatchNorm" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn2" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_relu2" + type: "ReLU" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" +} + +layer { + name: "stage3_unit3_conv3" + type: "Convolution" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn3" + type: "BatchNorm" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn3" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_plus" + type: "Eltwise" + bottom: "stage3_unit2_plus" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit3_relu" + type: "ReLU" + bottom: "stage3_unit3_plus" + top: "stage3_unit3_plus" +} + +layer { + name: "stage3_unit4_conv1" + type: "Convolution" + bottom: "stage3_unit3_plus" + top: "stage3_unit4_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn1" + type: "BatchNorm" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn1" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_relu1" + type: "ReLU" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" +} + +layer { + name: "stage3_unit4_conv2" + type: "Convolution" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn2" + type: "BatchNorm" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn2" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_relu2" + type: "ReLU" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" +} + +layer { + name: "stage3_unit4_conv3" + type: "Convolution" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn3" + type: "BatchNorm" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn3" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_plus" + type: "Eltwise" + bottom: "stage3_unit3_plus" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit4_relu" + type: "ReLU" + bottom: "stage3_unit4_plus" + top: "stage3_unit4_plus" +} + +layer { + name: "stage3_unit5_conv1" + type: "Convolution" + bottom: "stage3_unit4_plus" + top: "stage3_unit5_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn1" + type: "BatchNorm" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn1" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_relu1" + type: "ReLU" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" +} + +layer { + name: "stage3_unit5_conv2" + type: "Convolution" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn2" + type: "BatchNorm" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn2" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_relu2" + type: "ReLU" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" +} + +layer { + name: "stage3_unit5_conv3" + type: "Convolution" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn3" + type: "BatchNorm" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn3" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_plus" + type: "Eltwise" + bottom: "stage3_unit4_plus" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit5_relu" + type: "ReLU" + bottom: "stage3_unit5_plus" + top: "stage3_unit5_plus" +} + +layer { + name: "stage3_unit6_conv1" + type: "Convolution" + bottom: "stage3_unit5_plus" + top: "stage3_unit6_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn1" + type: "BatchNorm" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn1" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_relu1" + type: "ReLU" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" +} + +layer { + name: "stage3_unit6_conv2" + type: "Convolution" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn2" + type: "BatchNorm" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn2" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_relu2" + type: "ReLU" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" +} + +layer { + name: "stage3_unit6_conv3" + type: "Convolution" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn3" + type: "BatchNorm" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn3" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_plus" + type: "Eltwise" + bottom: "stage3_unit5_plus" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit6_relu" + type: "ReLU" + bottom: "stage3_unit6_plus" + top: "stage3_unit6_plus" +} + +layer { + name: "stage3_unit7_conv1" + type: "Convolution" + bottom: "stage3_unit6_plus" + top: "stage3_unit7_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit7_bn1" + type: "BatchNorm" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit7_bn1" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit7_relu1" + type: "ReLU" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv1" +} + +layer { + name: "stage3_unit7_conv2" + type: "Convolution" + bottom: "stage3_unit7_conv1" + top: "stage3_unit7_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit7_bn2" + type: "BatchNorm" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit7_bn2" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit7_relu2" + type: "ReLU" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv2" +} + +layer { + name: "stage3_unit7_conv3" + type: "Convolution" + bottom: "stage3_unit7_conv2" + top: "stage3_unit7_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit7_bn3" + type: "BatchNorm" + bottom: "stage3_unit7_conv3" + top: "stage3_unit7_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit7_bn3" + bottom: "stage3_unit7_conv3" + top: "stage3_unit7_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit7_plus" + type: "Eltwise" + bottom: "stage3_unit6_plus" + bottom: "stage3_unit7_conv3" + top: "stage3_unit7_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit7_relu" + type: "ReLU" + bottom: "stage3_unit7_plus" + top: "stage3_unit7_plus" +} + +layer { + name: "stage3_unit8_conv1" + type: "Convolution" + bottom: "stage3_unit7_plus" + top: "stage3_unit8_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit8_bn1" + type: "BatchNorm" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit8_bn1" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit8_relu1" + type: "ReLU" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv1" +} + +layer { + name: "stage3_unit8_conv2" + type: "Convolution" + bottom: "stage3_unit8_conv1" + top: "stage3_unit8_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit8_bn2" + type: "BatchNorm" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit8_bn2" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit8_relu2" + type: "ReLU" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv2" +} + +layer { + name: "stage3_unit8_conv3" + type: "Convolution" + bottom: "stage3_unit8_conv2" + top: "stage3_unit8_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit8_bn3" + type: "BatchNorm" + bottom: "stage3_unit8_conv3" + top: "stage3_unit8_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit8_bn3" + bottom: "stage3_unit8_conv3" + top: "stage3_unit8_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit8_plus" + type: "Eltwise" + bottom: "stage3_unit7_plus" + bottom: "stage3_unit8_conv3" + top: "stage3_unit8_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit8_relu" + type: "ReLU" + bottom: "stage3_unit8_plus" + top: "stage3_unit8_plus" +} + +layer { + name: "stage3_unit9_conv1" + type: "Convolution" + bottom: "stage3_unit8_plus" + top: "stage3_unit9_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit9_bn1" + type: "BatchNorm" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit9_bn1" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit9_relu1" + type: "ReLU" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv1" +} + +layer { + name: "stage3_unit9_conv2" + type: "Convolution" + bottom: "stage3_unit9_conv1" + top: "stage3_unit9_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit9_bn2" + type: "BatchNorm" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit9_bn2" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit9_relu2" + type: "ReLU" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv2" +} + +layer { + name: "stage3_unit9_conv3" + type: "Convolution" + bottom: "stage3_unit9_conv2" + top: "stage3_unit9_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit9_bn3" + type: "BatchNorm" + bottom: "stage3_unit9_conv3" + top: "stage3_unit9_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit9_bn3" + bottom: "stage3_unit9_conv3" + top: "stage3_unit9_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit9_plus" + type: "Eltwise" + bottom: "stage3_unit8_plus" + bottom: "stage3_unit9_conv3" + top: "stage3_unit9_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit9_relu" + type: "ReLU" + bottom: "stage3_unit9_plus" + top: "stage3_unit9_plus" +} + +layer { + name: "stage3_unit10_conv1" + type: "Convolution" + bottom: "stage3_unit9_plus" + top: "stage3_unit10_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit10_bn1" + type: "BatchNorm" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit10_bn1" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit10_relu1" + type: "ReLU" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv1" +} + +layer { + name: "stage3_unit10_conv2" + type: "Convolution" + bottom: "stage3_unit10_conv1" + top: "stage3_unit10_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit10_bn2" + type: "BatchNorm" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit10_bn2" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit10_relu2" + type: "ReLU" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv2" +} + +layer { + name: "stage3_unit10_conv3" + type: "Convolution" + bottom: "stage3_unit10_conv2" + top: "stage3_unit10_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit10_bn3" + type: "BatchNorm" + bottom: "stage3_unit10_conv3" + top: "stage3_unit10_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit10_bn3" + bottom: "stage3_unit10_conv3" + top: "stage3_unit10_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit10_plus" + type: "Eltwise" + bottom: "stage3_unit9_plus" + bottom: "stage3_unit10_conv3" + top: "stage3_unit10_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit10_relu" + type: "ReLU" + bottom: "stage3_unit10_plus" + top: "stage3_unit10_plus" +} + +layer { + name: "stage3_unit11_conv1" + type: "Convolution" + bottom: "stage3_unit10_plus" + top: "stage3_unit11_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit11_bn1" + type: "BatchNorm" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit11_bn1" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit11_relu1" + type: "ReLU" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv1" +} + +layer { + name: "stage3_unit11_conv2" + type: "Convolution" + bottom: "stage3_unit11_conv1" + top: "stage3_unit11_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit11_bn2" + type: "BatchNorm" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit11_bn2" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit11_relu2" + type: "ReLU" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv2" +} + +layer { + name: "stage3_unit11_conv3" + type: "Convolution" + bottom: "stage3_unit11_conv2" + top: "stage3_unit11_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit11_bn3" + type: "BatchNorm" + bottom: "stage3_unit11_conv3" + top: "stage3_unit11_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit11_bn3" + bottom: "stage3_unit11_conv3" + top: "stage3_unit11_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit11_plus" + type: "Eltwise" + bottom: "stage3_unit10_plus" + bottom: "stage3_unit11_conv3" + top: "stage3_unit11_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit11_relu" + type: "ReLU" + bottom: "stage3_unit11_plus" + top: "stage3_unit11_plus" +} + +layer { + name: "stage3_unit12_conv1" + type: "Convolution" + bottom: "stage3_unit11_plus" + top: "stage3_unit12_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit12_bn1" + type: "BatchNorm" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit12_bn1" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit12_relu1" + type: "ReLU" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv1" +} + +layer { + name: "stage3_unit12_conv2" + type: "Convolution" + bottom: "stage3_unit12_conv1" + top: "stage3_unit12_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit12_bn2" + type: "BatchNorm" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit12_bn2" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit12_relu2" + type: "ReLU" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv2" +} + +layer { + name: "stage3_unit12_conv3" + type: "Convolution" + bottom: "stage3_unit12_conv2" + top: "stage3_unit12_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit12_bn3" + type: "BatchNorm" + bottom: "stage3_unit12_conv3" + top: "stage3_unit12_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit12_bn3" + bottom: "stage3_unit12_conv3" + top: "stage3_unit12_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit12_plus" + type: "Eltwise" + bottom: "stage3_unit11_plus" + bottom: "stage3_unit12_conv3" + top: "stage3_unit12_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit12_relu" + type: "ReLU" + bottom: "stage3_unit12_plus" + top: "stage3_unit12_plus" +} + +layer { + name: "stage3_unit13_conv1" + type: "Convolution" + bottom: "stage3_unit12_plus" + top: "stage3_unit13_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit13_bn1" + type: "BatchNorm" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit13_bn1" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit13_relu1" + type: "ReLU" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv1" +} + +layer { + name: "stage3_unit13_conv2" + type: "Convolution" + bottom: "stage3_unit13_conv1" + top: "stage3_unit13_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit13_bn2" + type: "BatchNorm" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit13_bn2" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit13_relu2" + type: "ReLU" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv2" +} + +layer { + name: "stage3_unit13_conv3" + type: "Convolution" + bottom: "stage3_unit13_conv2" + top: "stage3_unit13_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit13_bn3" + type: "BatchNorm" + bottom: "stage3_unit13_conv3" + top: "stage3_unit13_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit13_bn3" + bottom: "stage3_unit13_conv3" + top: "stage3_unit13_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit13_plus" + type: "Eltwise" + bottom: "stage3_unit12_plus" + bottom: "stage3_unit13_conv3" + top: "stage3_unit13_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit13_relu" + type: "ReLU" + bottom: "stage3_unit13_plus" + top: "stage3_unit13_plus" +} + +layer { + name: "stage3_unit14_conv1" + type: "Convolution" + bottom: "stage3_unit13_plus" + top: "stage3_unit14_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit14_bn1" + type: "BatchNorm" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit14_bn1" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit14_relu1" + type: "ReLU" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv1" +} + +layer { + name: "stage3_unit14_conv2" + type: "Convolution" + bottom: "stage3_unit14_conv1" + top: "stage3_unit14_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit14_bn2" + type: "BatchNorm" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit14_bn2" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit14_relu2" + type: "ReLU" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv2" +} + +layer { + name: "stage3_unit14_conv3" + type: "Convolution" + bottom: "stage3_unit14_conv2" + top: "stage3_unit14_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit14_bn3" + type: "BatchNorm" + bottom: "stage3_unit14_conv3" + top: "stage3_unit14_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit14_bn3" + bottom: "stage3_unit14_conv3" + top: "stage3_unit14_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit14_plus" + type: "Eltwise" + bottom: "stage3_unit13_plus" + bottom: "stage3_unit14_conv3" + top: "stage3_unit14_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit14_relu" + type: "ReLU" + bottom: "stage3_unit14_plus" + top: "stage3_unit14_plus" +} + +layer { + name: "stage3_unit15_conv1" + type: "Convolution" + bottom: "stage3_unit14_plus" + top: "stage3_unit15_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit15_bn1" + type: "BatchNorm" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit15_bn1" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit15_relu1" + type: "ReLU" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv1" +} + +layer { + name: "stage3_unit15_conv2" + type: "Convolution" + bottom: "stage3_unit15_conv1" + top: "stage3_unit15_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit15_bn2" + type: "BatchNorm" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit15_bn2" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit15_relu2" + type: "ReLU" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv2" +} + +layer { + name: "stage3_unit15_conv3" + type: "Convolution" + bottom: "stage3_unit15_conv2" + top: "stage3_unit15_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit15_bn3" + type: "BatchNorm" + bottom: "stage3_unit15_conv3" + top: "stage3_unit15_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit15_bn3" + bottom: "stage3_unit15_conv3" + top: "stage3_unit15_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit15_plus" + type: "Eltwise" + bottom: "stage3_unit14_plus" + bottom: "stage3_unit15_conv3" + top: "stage3_unit15_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit15_relu" + type: "ReLU" + bottom: "stage3_unit15_plus" + top: "stage3_unit15_plus" +} + +layer { + name: "stage3_unit16_conv1" + type: "Convolution" + bottom: "stage3_unit15_plus" + top: "stage3_unit16_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit16_bn1" + type: "BatchNorm" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit16_bn1" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit16_relu1" + type: "ReLU" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv1" +} + +layer { + name: "stage3_unit16_conv2" + type: "Convolution" + bottom: "stage3_unit16_conv1" + top: "stage3_unit16_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit16_bn2" + type: "BatchNorm" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit16_bn2" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit16_relu2" + type: "ReLU" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv2" +} + +layer { + name: "stage3_unit16_conv3" + type: "Convolution" + bottom: "stage3_unit16_conv2" + top: "stage3_unit16_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit16_bn3" + type: "BatchNorm" + bottom: "stage3_unit16_conv3" + top: "stage3_unit16_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit16_bn3" + bottom: "stage3_unit16_conv3" + top: "stage3_unit16_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit16_plus" + type: "Eltwise" + bottom: "stage3_unit15_plus" + bottom: "stage3_unit16_conv3" + top: "stage3_unit16_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit16_relu" + type: "ReLU" + bottom: "stage3_unit16_plus" + top: "stage3_unit16_plus" +} + +layer { + name: "stage3_unit17_conv1" + type: "Convolution" + bottom: "stage3_unit16_plus" + top: "stage3_unit17_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit17_bn1" + type: "BatchNorm" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit17_bn1" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit17_relu1" + type: "ReLU" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv1" +} + +layer { + name: "stage3_unit17_conv2" + type: "Convolution" + bottom: "stage3_unit17_conv1" + top: "stage3_unit17_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit17_bn2" + type: "BatchNorm" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit17_bn2" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit17_relu2" + type: "ReLU" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv2" +} + +layer { + name: "stage3_unit17_conv3" + type: "Convolution" + bottom: "stage3_unit17_conv2" + top: "stage3_unit17_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit17_bn3" + type: "BatchNorm" + bottom: "stage3_unit17_conv3" + top: "stage3_unit17_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit17_bn3" + bottom: "stage3_unit17_conv3" + top: "stage3_unit17_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit17_plus" + type: "Eltwise" + bottom: "stage3_unit16_plus" + bottom: "stage3_unit17_conv3" + top: "stage3_unit17_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit17_relu" + type: "ReLU" + bottom: "stage3_unit17_plus" + top: "stage3_unit17_plus" +} + +layer { + name: "stage3_unit18_conv1" + type: "Convolution" + bottom: "stage3_unit17_plus" + top: "stage3_unit18_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit18_bn1" + type: "BatchNorm" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit18_bn1" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit18_relu1" + type: "ReLU" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv1" +} + +layer { + name: "stage3_unit18_conv2" + type: "Convolution" + bottom: "stage3_unit18_conv1" + top: "stage3_unit18_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit18_bn2" + type: "BatchNorm" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit18_bn2" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit18_relu2" + type: "ReLU" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv2" +} + +layer { + name: "stage3_unit18_conv3" + type: "Convolution" + bottom: "stage3_unit18_conv2" + top: "stage3_unit18_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit18_bn3" + type: "BatchNorm" + bottom: "stage3_unit18_conv3" + top: "stage3_unit18_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit18_bn3" + bottom: "stage3_unit18_conv3" + top: "stage3_unit18_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit18_plus" + type: "Eltwise" + bottom: "stage3_unit17_plus" + bottom: "stage3_unit18_conv3" + top: "stage3_unit18_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit18_relu" + type: "ReLU" + bottom: "stage3_unit18_plus" + top: "stage3_unit18_plus" +} + +layer { + name: "stage3_unit19_conv1" + type: "Convolution" + bottom: "stage3_unit18_plus" + top: "stage3_unit19_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit19_bn1" + type: "BatchNorm" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit19_bn1" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit19_relu1" + type: "ReLU" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv1" +} + +layer { + name: "stage3_unit19_conv2" + type: "Convolution" + bottom: "stage3_unit19_conv1" + top: "stage3_unit19_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit19_bn2" + type: "BatchNorm" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit19_bn2" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit19_relu2" + type: "ReLU" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv2" +} + +layer { + name: "stage3_unit19_conv3" + type: "Convolution" + bottom: "stage3_unit19_conv2" + top: "stage3_unit19_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit19_bn3" + type: "BatchNorm" + bottom: "stage3_unit19_conv3" + top: "stage3_unit19_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit19_bn3" + bottom: "stage3_unit19_conv3" + top: "stage3_unit19_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit19_plus" + type: "Eltwise" + bottom: "stage3_unit18_plus" + bottom: "stage3_unit19_conv3" + top: "stage3_unit19_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit19_relu" + type: "ReLU" + bottom: "stage3_unit19_plus" + top: "stage3_unit19_plus" +} + +layer { + name: "stage3_unit20_conv1" + type: "Convolution" + bottom: "stage3_unit19_plus" + top: "stage3_unit20_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit20_bn1" + type: "BatchNorm" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit20_bn1" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit20_relu1" + type: "ReLU" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv1" +} + +layer { + name: "stage3_unit20_conv2" + type: "Convolution" + bottom: "stage3_unit20_conv1" + top: "stage3_unit20_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit20_bn2" + type: "BatchNorm" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit20_bn2" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit20_relu2" + type: "ReLU" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv2" +} + +layer { + name: "stage3_unit20_conv3" + type: "Convolution" + bottom: "stage3_unit20_conv2" + top: "stage3_unit20_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit20_bn3" + type: "BatchNorm" + bottom: "stage3_unit20_conv3" + top: "stage3_unit20_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit20_bn3" + bottom: "stage3_unit20_conv3" + top: "stage3_unit20_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit20_plus" + type: "Eltwise" + bottom: "stage3_unit19_plus" + bottom: "stage3_unit20_conv3" + top: "stage3_unit20_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit20_relu" + type: "ReLU" + bottom: "stage3_unit20_plus" + top: "stage3_unit20_plus" +} + +layer { + name: "stage3_unit21_conv1" + type: "Convolution" + bottom: "stage3_unit20_plus" + top: "stage3_unit21_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit21_bn1" + type: "BatchNorm" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit21_bn1" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit21_relu1" + type: "ReLU" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv1" +} + +layer { + name: "stage3_unit21_conv2" + type: "Convolution" + bottom: "stage3_unit21_conv1" + top: "stage3_unit21_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit21_bn2" + type: "BatchNorm" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit21_bn2" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit21_relu2" + type: "ReLU" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv2" +} + +layer { + name: "stage3_unit21_conv3" + type: "Convolution" + bottom: "stage3_unit21_conv2" + top: "stage3_unit21_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit21_bn3" + type: "BatchNorm" + bottom: "stage3_unit21_conv3" + top: "stage3_unit21_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit21_bn3" + bottom: "stage3_unit21_conv3" + top: "stage3_unit21_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit21_plus" + type: "Eltwise" + bottom: "stage3_unit20_plus" + bottom: "stage3_unit21_conv3" + top: "stage3_unit21_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit21_relu" + type: "ReLU" + bottom: "stage3_unit21_plus" + top: "stage3_unit21_plus" +} + +layer { + name: "stage3_unit22_conv1" + type: "Convolution" + bottom: "stage3_unit21_plus" + top: "stage3_unit22_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit22_bn1" + type: "BatchNorm" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit22_bn1" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit22_relu1" + type: "ReLU" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv1" +} + +layer { + name: "stage3_unit22_conv2" + type: "Convolution" + bottom: "stage3_unit22_conv1" + top: "stage3_unit22_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit22_bn2" + type: "BatchNorm" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit22_bn2" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit22_relu2" + type: "ReLU" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv2" +} + +layer { + name: "stage3_unit22_conv3" + type: "Convolution" + bottom: "stage3_unit22_conv2" + top: "stage3_unit22_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit22_bn3" + type: "BatchNorm" + bottom: "stage3_unit22_conv3" + top: "stage3_unit22_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit22_bn3" + bottom: "stage3_unit22_conv3" + top: "stage3_unit22_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit22_plus" + type: "Eltwise" + bottom: "stage3_unit21_plus" + bottom: "stage3_unit22_conv3" + top: "stage3_unit22_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit22_relu" + type: "ReLU" + bottom: "stage3_unit22_plus" + top: "stage3_unit22_plus" +} + +layer { + name: "stage3_unit23_conv1" + type: "Convolution" + bottom: "stage3_unit22_plus" + top: "stage3_unit23_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit23_bn1" + type: "BatchNorm" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit23_bn1" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit23_relu1" + type: "ReLU" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv1" +} + +layer { + name: "stage3_unit23_conv2" + type: "Convolution" + bottom: "stage3_unit23_conv1" + top: "stage3_unit23_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit23_bn2" + type: "BatchNorm" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit23_bn2" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit23_relu2" + type: "ReLU" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv2" +} + +layer { + name: "stage3_unit23_conv3" + type: "Convolution" + bottom: "stage3_unit23_conv2" + top: "stage3_unit23_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit23_bn3" + type: "BatchNorm" + bottom: "stage3_unit23_conv3" + top: "stage3_unit23_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit23_bn3" + bottom: "stage3_unit23_conv3" + top: "stage3_unit23_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit23_plus" + type: "Eltwise" + bottom: "stage3_unit22_plus" + bottom: "stage3_unit23_conv3" + top: "stage3_unit23_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit23_relu" + type: "ReLU" + bottom: "stage3_unit23_plus" + top: "stage3_unit23_plus" +} + +layer { + name: "stage3_unit24_conv1" + type: "Convolution" + bottom: "stage3_unit23_plus" + top: "stage3_unit24_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit24_bn1" + type: "BatchNorm" + bottom: "stage3_unit24_conv1" + top: "stage3_unit24_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit24_bn1" + bottom: "stage3_unit24_conv1" + top: "stage3_unit24_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit24_relu1" + type: "ReLU" + bottom: "stage3_unit24_conv1" + top: "stage3_unit24_conv1" +} + +layer { + name: "stage3_unit24_conv2" + type: "Convolution" + bottom: "stage3_unit24_conv1" + top: "stage3_unit24_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit24_bn2" + type: "BatchNorm" + bottom: "stage3_unit24_conv2" + top: "stage3_unit24_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit24_bn2" + bottom: "stage3_unit24_conv2" + top: "stage3_unit24_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit24_relu2" + type: "ReLU" + bottom: "stage3_unit24_conv2" + top: "stage3_unit24_conv2" +} + +layer { + name: "stage3_unit24_conv3" + type: "Convolution" + bottom: "stage3_unit24_conv2" + top: "stage3_unit24_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit24_bn3" + type: "BatchNorm" + bottom: "stage3_unit24_conv3" + top: "stage3_unit24_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit24_bn3" + bottom: "stage3_unit24_conv3" + top: "stage3_unit24_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit24_plus" + type: "Eltwise" + bottom: "stage3_unit23_plus" + bottom: "stage3_unit24_conv3" + top: "stage3_unit24_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit24_relu" + type: "ReLU" + bottom: "stage3_unit24_plus" + top: "stage3_unit24_plus" +} + +layer { + name: "stage3_unit25_conv1" + type: "Convolution" + bottom: "stage3_unit24_plus" + top: "stage3_unit25_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit25_bn1" + type: "BatchNorm" + bottom: "stage3_unit25_conv1" + top: "stage3_unit25_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit25_bn1" + bottom: "stage3_unit25_conv1" + top: "stage3_unit25_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit25_relu1" + type: "ReLU" + bottom: "stage3_unit25_conv1" + top: "stage3_unit25_conv1" +} + +layer { + name: "stage3_unit25_conv2" + type: "Convolution" + bottom: "stage3_unit25_conv1" + top: "stage3_unit25_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit25_bn2" + type: "BatchNorm" + bottom: "stage3_unit25_conv2" + top: "stage3_unit25_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit25_bn2" + bottom: "stage3_unit25_conv2" + top: "stage3_unit25_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit25_relu2" + type: "ReLU" + bottom: "stage3_unit25_conv2" + top: "stage3_unit25_conv2" +} + +layer { + name: "stage3_unit25_conv3" + type: "Convolution" + bottom: "stage3_unit25_conv2" + top: "stage3_unit25_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit25_bn3" + type: "BatchNorm" + bottom: "stage3_unit25_conv3" + top: "stage3_unit25_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit25_bn3" + bottom: "stage3_unit25_conv3" + top: "stage3_unit25_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit25_plus" + type: "Eltwise" + bottom: "stage3_unit24_plus" + bottom: "stage3_unit25_conv3" + top: "stage3_unit25_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit25_relu" + type: "ReLU" + bottom: "stage3_unit25_plus" + top: "stage3_unit25_plus" +} + +layer { + name: "stage3_unit26_conv1" + type: "Convolution" + bottom: "stage3_unit25_plus" + top: "stage3_unit26_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit26_bn1" + type: "BatchNorm" + bottom: "stage3_unit26_conv1" + top: "stage3_unit26_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit26_bn1" + bottom: "stage3_unit26_conv1" + top: "stage3_unit26_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit26_relu1" + type: "ReLU" + bottom: "stage3_unit26_conv1" + top: "stage3_unit26_conv1" +} + +layer { + name: "stage3_unit26_conv2" + type: "Convolution" + bottom: "stage3_unit26_conv1" + top: "stage3_unit26_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit26_bn2" + type: "BatchNorm" + bottom: "stage3_unit26_conv2" + top: "stage3_unit26_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit26_bn2" + bottom: "stage3_unit26_conv2" + top: "stage3_unit26_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit26_relu2" + type: "ReLU" + bottom: "stage3_unit26_conv2" + top: "stage3_unit26_conv2" +} + +layer { + name: "stage3_unit26_conv3" + type: "Convolution" + bottom: "stage3_unit26_conv2" + top: "stage3_unit26_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit26_bn3" + type: "BatchNorm" + bottom: "stage3_unit26_conv3" + top: "stage3_unit26_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit26_bn3" + bottom: "stage3_unit26_conv3" + top: "stage3_unit26_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit26_plus" + type: "Eltwise" + bottom: "stage3_unit25_plus" + bottom: "stage3_unit26_conv3" + top: "stage3_unit26_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit26_relu" + type: "ReLU" + bottom: "stage3_unit26_plus" + top: "stage3_unit26_plus" +} + +layer { + name: "stage3_unit27_conv1" + type: "Convolution" + bottom: "stage3_unit26_plus" + top: "stage3_unit27_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit27_bn1" + type: "BatchNorm" + bottom: "stage3_unit27_conv1" + top: "stage3_unit27_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit27_bn1" + bottom: "stage3_unit27_conv1" + top: "stage3_unit27_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit27_relu1" + type: "ReLU" + bottom: "stage3_unit27_conv1" + top: "stage3_unit27_conv1" +} + +layer { + name: "stage3_unit27_conv2" + type: "Convolution" + bottom: "stage3_unit27_conv1" + top: "stage3_unit27_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit27_bn2" + type: "BatchNorm" + bottom: "stage3_unit27_conv2" + top: "stage3_unit27_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit27_bn2" + bottom: "stage3_unit27_conv2" + top: "stage3_unit27_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit27_relu2" + type: "ReLU" + bottom: "stage3_unit27_conv2" + top: "stage3_unit27_conv2" +} + +layer { + name: "stage3_unit27_conv3" + type: "Convolution" + bottom: "stage3_unit27_conv2" + top: "stage3_unit27_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit27_bn3" + type: "BatchNorm" + bottom: "stage3_unit27_conv3" + top: "stage3_unit27_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit27_bn3" + bottom: "stage3_unit27_conv3" + top: "stage3_unit27_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit27_plus" + type: "Eltwise" + bottom: "stage3_unit26_plus" + bottom: "stage3_unit27_conv3" + top: "stage3_unit27_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit27_relu" + type: "ReLU" + bottom: "stage3_unit27_plus" + top: "stage3_unit27_plus" +} + +layer { + name: "stage3_unit28_conv1" + type: "Convolution" + bottom: "stage3_unit27_plus" + top: "stage3_unit28_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit28_bn1" + type: "BatchNorm" + bottom: "stage3_unit28_conv1" + top: "stage3_unit28_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit28_bn1" + bottom: "stage3_unit28_conv1" + top: "stage3_unit28_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit28_relu1" + type: "ReLU" + bottom: "stage3_unit28_conv1" + top: "stage3_unit28_conv1" +} + +layer { + name: "stage3_unit28_conv2" + type: "Convolution" + bottom: "stage3_unit28_conv1" + top: "stage3_unit28_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit28_bn2" + type: "BatchNorm" + bottom: "stage3_unit28_conv2" + top: "stage3_unit28_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit28_bn2" + bottom: "stage3_unit28_conv2" + top: "stage3_unit28_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit28_relu2" + type: "ReLU" + bottom: "stage3_unit28_conv2" + top: "stage3_unit28_conv2" +} + +layer { + name: "stage3_unit28_conv3" + type: "Convolution" + bottom: "stage3_unit28_conv2" + top: "stage3_unit28_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit28_bn3" + type: "BatchNorm" + bottom: "stage3_unit28_conv3" + top: "stage3_unit28_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit28_bn3" + bottom: "stage3_unit28_conv3" + top: "stage3_unit28_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit28_plus" + type: "Eltwise" + bottom: "stage3_unit27_plus" + bottom: "stage3_unit28_conv3" + top: "stage3_unit28_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit28_relu" + type: "ReLU" + bottom: "stage3_unit28_plus" + top: "stage3_unit28_plus" +} + +layer { + name: "stage3_unit29_conv1" + type: "Convolution" + bottom: "stage3_unit28_plus" + top: "stage3_unit29_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit29_bn1" + type: "BatchNorm" + bottom: "stage3_unit29_conv1" + top: "stage3_unit29_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit29_bn1" + bottom: "stage3_unit29_conv1" + top: "stage3_unit29_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit29_relu1" + type: "ReLU" + bottom: "stage3_unit29_conv1" + top: "stage3_unit29_conv1" +} + +layer { + name: "stage3_unit29_conv2" + type: "Convolution" + bottom: "stage3_unit29_conv1" + top: "stage3_unit29_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit29_bn2" + type: "BatchNorm" + bottom: "stage3_unit29_conv2" + top: "stage3_unit29_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit29_bn2" + bottom: "stage3_unit29_conv2" + top: "stage3_unit29_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit29_relu2" + type: "ReLU" + bottom: "stage3_unit29_conv2" + top: "stage3_unit29_conv2" +} + +layer { + name: "stage3_unit29_conv3" + type: "Convolution" + bottom: "stage3_unit29_conv2" + top: "stage3_unit29_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit29_bn3" + type: "BatchNorm" + bottom: "stage3_unit29_conv3" + top: "stage3_unit29_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit29_bn3" + bottom: "stage3_unit29_conv3" + top: "stage3_unit29_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit29_plus" + type: "Eltwise" + bottom: "stage3_unit28_plus" + bottom: "stage3_unit29_conv3" + top: "stage3_unit29_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit29_relu" + type: "ReLU" + bottom: "stage3_unit29_plus" + top: "stage3_unit29_plus" +} + +layer { + name: "stage3_unit30_conv1" + type: "Convolution" + bottom: "stage3_unit29_plus" + top: "stage3_unit30_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit30_bn1" + type: "BatchNorm" + bottom: "stage3_unit30_conv1" + top: "stage3_unit30_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit30_bn1" + bottom: "stage3_unit30_conv1" + top: "stage3_unit30_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit30_relu1" + type: "ReLU" + bottom: "stage3_unit30_conv1" + top: "stage3_unit30_conv1" +} + +layer { + name: "stage3_unit30_conv2" + type: "Convolution" + bottom: "stage3_unit30_conv1" + top: "stage3_unit30_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit30_bn2" + type: "BatchNorm" + bottom: "stage3_unit30_conv2" + top: "stage3_unit30_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit30_bn2" + bottom: "stage3_unit30_conv2" + top: "stage3_unit30_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit30_relu2" + type: "ReLU" + bottom: "stage3_unit30_conv2" + top: "stage3_unit30_conv2" +} + +layer { + name: "stage3_unit30_conv3" + type: "Convolution" + bottom: "stage3_unit30_conv2" + top: "stage3_unit30_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit30_bn3" + type: "BatchNorm" + bottom: "stage3_unit30_conv3" + top: "stage3_unit30_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit30_bn3" + bottom: "stage3_unit30_conv3" + top: "stage3_unit30_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit30_plus" + type: "Eltwise" + bottom: "stage3_unit29_plus" + bottom: "stage3_unit30_conv3" + top: "stage3_unit30_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit30_relu" + type: "ReLU" + bottom: "stage3_unit30_plus" + top: "stage3_unit30_plus" +} + +layer { + name: "stage3_unit31_conv1" + type: "Convolution" + bottom: "stage3_unit30_plus" + top: "stage3_unit31_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit31_bn1" + type: "BatchNorm" + bottom: "stage3_unit31_conv1" + top: "stage3_unit31_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit31_bn1" + bottom: "stage3_unit31_conv1" + top: "stage3_unit31_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit31_relu1" + type: "ReLU" + bottom: "stage3_unit31_conv1" + top: "stage3_unit31_conv1" +} + +layer { + name: "stage3_unit31_conv2" + type: "Convolution" + bottom: "stage3_unit31_conv1" + top: "stage3_unit31_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit31_bn2" + type: "BatchNorm" + bottom: "stage3_unit31_conv2" + top: "stage3_unit31_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit31_bn2" + bottom: "stage3_unit31_conv2" + top: "stage3_unit31_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit31_relu2" + type: "ReLU" + bottom: "stage3_unit31_conv2" + top: "stage3_unit31_conv2" +} + +layer { + name: "stage3_unit31_conv3" + type: "Convolution" + bottom: "stage3_unit31_conv2" + top: "stage3_unit31_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit31_bn3" + type: "BatchNorm" + bottom: "stage3_unit31_conv3" + top: "stage3_unit31_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit31_bn3" + bottom: "stage3_unit31_conv3" + top: "stage3_unit31_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit31_plus" + type: "Eltwise" + bottom: "stage3_unit30_plus" + bottom: "stage3_unit31_conv3" + top: "stage3_unit31_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit31_relu" + type: "ReLU" + bottom: "stage3_unit31_plus" + top: "stage3_unit31_plus" +} + +layer { + name: "stage3_unit32_conv1" + type: "Convolution" + bottom: "stage3_unit31_plus" + top: "stage3_unit32_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit32_bn1" + type: "BatchNorm" + bottom: "stage3_unit32_conv1" + top: "stage3_unit32_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit32_bn1" + bottom: "stage3_unit32_conv1" + top: "stage3_unit32_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit32_relu1" + type: "ReLU" + bottom: "stage3_unit32_conv1" + top: "stage3_unit32_conv1" +} + +layer { + name: "stage3_unit32_conv2" + type: "Convolution" + bottom: "stage3_unit32_conv1" + top: "stage3_unit32_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit32_bn2" + type: "BatchNorm" + bottom: "stage3_unit32_conv2" + top: "stage3_unit32_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit32_bn2" + bottom: "stage3_unit32_conv2" + top: "stage3_unit32_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit32_relu2" + type: "ReLU" + bottom: "stage3_unit32_conv2" + top: "stage3_unit32_conv2" +} + +layer { + name: "stage3_unit32_conv3" + type: "Convolution" + bottom: "stage3_unit32_conv2" + top: "stage3_unit32_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit32_bn3" + type: "BatchNorm" + bottom: "stage3_unit32_conv3" + top: "stage3_unit32_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit32_bn3" + bottom: "stage3_unit32_conv3" + top: "stage3_unit32_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit32_plus" + type: "Eltwise" + bottom: "stage3_unit31_plus" + bottom: "stage3_unit32_conv3" + top: "stage3_unit32_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit32_relu" + type: "ReLU" + bottom: "stage3_unit32_plus" + top: "stage3_unit32_plus" +} + +layer { + name: "stage3_unit33_conv1" + type: "Convolution" + bottom: "stage3_unit32_plus" + top: "stage3_unit33_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit33_bn1" + type: "BatchNorm" + bottom: "stage3_unit33_conv1" + top: "stage3_unit33_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit33_bn1" + bottom: "stage3_unit33_conv1" + top: "stage3_unit33_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit33_relu1" + type: "ReLU" + bottom: "stage3_unit33_conv1" + top: "stage3_unit33_conv1" +} + +layer { + name: "stage3_unit33_conv2" + type: "Convolution" + bottom: "stage3_unit33_conv1" + top: "stage3_unit33_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit33_bn2" + type: "BatchNorm" + bottom: "stage3_unit33_conv2" + top: "stage3_unit33_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit33_bn2" + bottom: "stage3_unit33_conv2" + top: "stage3_unit33_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit33_relu2" + type: "ReLU" + bottom: "stage3_unit33_conv2" + top: "stage3_unit33_conv2" +} + +layer { + name: "stage3_unit33_conv3" + type: "Convolution" + bottom: "stage3_unit33_conv2" + top: "stage3_unit33_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit33_bn3" + type: "BatchNorm" + bottom: "stage3_unit33_conv3" + top: "stage3_unit33_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit33_bn3" + bottom: "stage3_unit33_conv3" + top: "stage3_unit33_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit33_plus" + type: "Eltwise" + bottom: "stage3_unit32_plus" + bottom: "stage3_unit33_conv3" + top: "stage3_unit33_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit33_relu" + type: "ReLU" + bottom: "stage3_unit33_plus" + top: "stage3_unit33_plus" +} + +layer { + name: "stage3_unit34_conv1" + type: "Convolution" + bottom: "stage3_unit33_plus" + top: "stage3_unit34_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit34_bn1" + type: "BatchNorm" + bottom: "stage3_unit34_conv1" + top: "stage3_unit34_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit34_bn1" + bottom: "stage3_unit34_conv1" + top: "stage3_unit34_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit34_relu1" + type: "ReLU" + bottom: "stage3_unit34_conv1" + top: "stage3_unit34_conv1" +} + +layer { + name: "stage3_unit34_conv2" + type: "Convolution" + bottom: "stage3_unit34_conv1" + top: "stage3_unit34_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit34_bn2" + type: "BatchNorm" + bottom: "stage3_unit34_conv2" + top: "stage3_unit34_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit34_bn2" + bottom: "stage3_unit34_conv2" + top: "stage3_unit34_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit34_relu2" + type: "ReLU" + bottom: "stage3_unit34_conv2" + top: "stage3_unit34_conv2" +} + +layer { + name: "stage3_unit34_conv3" + type: "Convolution" + bottom: "stage3_unit34_conv2" + top: "stage3_unit34_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit34_bn3" + type: "BatchNorm" + bottom: "stage3_unit34_conv3" + top: "stage3_unit34_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit34_bn3" + bottom: "stage3_unit34_conv3" + top: "stage3_unit34_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit34_plus" + type: "Eltwise" + bottom: "stage3_unit33_plus" + bottom: "stage3_unit34_conv3" + top: "stage3_unit34_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit34_relu" + type: "ReLU" + bottom: "stage3_unit34_plus" + top: "stage3_unit34_plus" +} + +layer { + name: "stage3_unit35_conv1" + type: "Convolution" + bottom: "stage3_unit34_plus" + top: "stage3_unit35_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit35_bn1" + type: "BatchNorm" + bottom: "stage3_unit35_conv1" + top: "stage3_unit35_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit35_bn1" + bottom: "stage3_unit35_conv1" + top: "stage3_unit35_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit35_relu1" + type: "ReLU" + bottom: "stage3_unit35_conv1" + top: "stage3_unit35_conv1" +} + +layer { + name: "stage3_unit35_conv2" + type: "Convolution" + bottom: "stage3_unit35_conv1" + top: "stage3_unit35_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit35_bn2" + type: "BatchNorm" + bottom: "stage3_unit35_conv2" + top: "stage3_unit35_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit35_bn2" + bottom: "stage3_unit35_conv2" + top: "stage3_unit35_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit35_relu2" + type: "ReLU" + bottom: "stage3_unit35_conv2" + top: "stage3_unit35_conv2" +} + +layer { + name: "stage3_unit35_conv3" + type: "Convolution" + bottom: "stage3_unit35_conv2" + top: "stage3_unit35_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit35_bn3" + type: "BatchNorm" + bottom: "stage3_unit35_conv3" + top: "stage3_unit35_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit35_bn3" + bottom: "stage3_unit35_conv3" + top: "stage3_unit35_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit35_plus" + type: "Eltwise" + bottom: "stage3_unit34_plus" + bottom: "stage3_unit35_conv3" + top: "stage3_unit35_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit35_relu" + type: "ReLU" + bottom: "stage3_unit35_plus" + top: "stage3_unit35_plus" +} + +layer { + name: "stage3_unit36_conv1" + type: "Convolution" + bottom: "stage3_unit35_plus" + top: "stage3_unit36_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit36_bn1" + type: "BatchNorm" + bottom: "stage3_unit36_conv1" + top: "stage3_unit36_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit36_bn1" + bottom: "stage3_unit36_conv1" + top: "stage3_unit36_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit36_relu1" + type: "ReLU" + bottom: "stage3_unit36_conv1" + top: "stage3_unit36_conv1" +} + +layer { + name: "stage3_unit36_conv2" + type: "Convolution" + bottom: "stage3_unit36_conv1" + top: "stage3_unit36_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit36_bn2" + type: "BatchNorm" + bottom: "stage3_unit36_conv2" + top: "stage3_unit36_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit36_bn2" + bottom: "stage3_unit36_conv2" + top: "stage3_unit36_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit36_relu2" + type: "ReLU" + bottom: "stage3_unit36_conv2" + top: "stage3_unit36_conv2" +} + +layer { + name: "stage3_unit36_conv3" + type: "Convolution" + bottom: "stage3_unit36_conv2" + top: "stage3_unit36_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit36_bn3" + type: "BatchNorm" + bottom: "stage3_unit36_conv3" + top: "stage3_unit36_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit36_bn3" + bottom: "stage3_unit36_conv3" + top: "stage3_unit36_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit36_plus" + type: "Eltwise" + bottom: "stage3_unit35_plus" + bottom: "stage3_unit36_conv3" + top: "stage3_unit36_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit36_relu" + type: "ReLU" + bottom: "stage3_unit36_plus" + top: "stage3_unit36_plus" +} + +layer { + name: "stage4_unit1_conv1" + type: "Convolution" + bottom: "stage3_unit36_plus" + top: "stage4_unit1_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn1" + type: "BatchNorm" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn1" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_relu1" + type: "ReLU" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" +} + +layer { + name: "stage4_unit1_conv2" + type: "Convolution" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn2" + type: "BatchNorm" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn2" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_relu2" + type: "ReLU" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" +} + +layer { + name: "stage4_unit1_conv3" + type: "Convolution" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn3" + type: "BatchNorm" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn3" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_sc" + type: "Convolution" + bottom: "stage3_unit36_plus" + top: "stage4_unit1_sc" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage4_unit1_sc" + top: "stage4_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_sc_bn" + bottom: "stage4_unit1_sc" + top: "stage4_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_plus" + type: "Eltwise" + bottom: "stage4_unit1_sc" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit1_relu" + type: "ReLU" + bottom: "stage4_unit1_plus" + top: "stage4_unit1_plus" +} + +layer { + name: "stage4_unit2_conv1" + type: "Convolution" + bottom: "stage4_unit1_plus" + top: "stage4_unit2_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn1" + type: "BatchNorm" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn1" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_relu1" + type: "ReLU" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" +} + +layer { + name: "stage4_unit2_conv2" + type: "Convolution" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn2" + type: "BatchNorm" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn2" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_relu2" + type: "ReLU" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" +} + +layer { + name: "stage4_unit2_conv3" + type: "Convolution" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn3" + type: "BatchNorm" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn3" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_plus" + type: "Eltwise" + bottom: "stage4_unit1_plus" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit2_relu" + type: "ReLU" + bottom: "stage4_unit2_plus" + top: "stage4_unit2_plus" +} + +layer { + name: "stage4_unit3_conv1" + type: "Convolution" + bottom: "stage4_unit2_plus" + top: "stage4_unit3_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn1" + type: "BatchNorm" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn1" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_relu1" + type: "ReLU" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" +} + +layer { + name: "stage4_unit3_conv2" + type: "Convolution" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn2" + type: "BatchNorm" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn2" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_relu2" + type: "ReLU" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" +} + +layer { + name: "stage4_unit3_conv3" + type: "Convolution" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn3" + type: "BatchNorm" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn3" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_plus" + type: "Eltwise" + bottom: "stage4_unit2_plus" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit3_relu" + type: "ReLU" + bottom: "stage4_unit3_plus" + top: "stage4_unit3_plus" +} + +layer { + name: "pool1" + type: "Pooling" + bottom: "stage4_unit3_plus" + top: "pool1" + pooling_param { + global_pooling : true + pool: AVE + } +} + +layer { + name: "fc1" + type: "InnerProduct" + bottom: "pool1" + top: "fc1" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 1000 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0 + } + } +} + +layer { + name: "prob" + type: "Softmax" + bottom: "fc1" + top: "prob" +} + diff --git a/presets/ResNeXt-50.prototxt b/presets/ResNeXt-50.prototxt new file mode 100644 index 0000000..61dfaf5 --- /dev/null +++ b/presets/ResNeXt-50.prototxt @@ -0,0 +1,2474 @@ +name: "ResNeXt-50" +layer { + name: "data" + type: "Input" + top: "data" + input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } } +} + +layer { + name: "bn_data" + type: "BatchNorm" + bottom: "data" + top: "data" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_bn_data" + bottom: "data" + top: "data" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "conv0" + type: "Convolution" + bottom: "data" + top: "conv0" + convolution_param { + num_output: 64 + kernel_size: 7 + stride: 2 + pad: 3 + bias_term: false + } +} + +layer { + name: "bn0" + type: "BatchNorm" + bottom: "conv0" + top: "conv0" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_bn0" + bottom: "conv0" + top: "conv0" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "relu0" + type: "ReLU" + bottom: "conv0" + top: "conv0" +} + +layer { + name: "pooling0" + type: "Pooling" + bottom: "conv0" + top: "pooling0" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + } +} + +layer { + name: "stage1_unit1_conv1" + type: "Convolution" + bottom: "pooling0" + top: "stage1_unit1_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn1" + type: "BatchNorm" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn1" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_relu1" + type: "ReLU" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv1" +} + +layer { + name: "stage1_unit1_conv2" + type: "Convolution" + bottom: "stage1_unit1_conv1" + top: "stage1_unit1_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn2" + type: "BatchNorm" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn2" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_relu2" + type: "ReLU" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv2" +} + +layer { + name: "stage1_unit1_conv3" + type: "Convolution" + bottom: "stage1_unit1_conv2" + top: "stage1_unit1_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_bn3" + type: "BatchNorm" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_bn3" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_sc" + type: "Convolution" + bottom: "pooling0" + top: "stage1_unit1_sc" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage1_unit1_sc" + top: "stage1_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit1_sc_bn" + bottom: "stage1_unit1_sc" + top: "stage1_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit1_plus" + type: "Eltwise" + bottom: "stage1_unit1_sc" + bottom: "stage1_unit1_conv3" + top: "stage1_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit1_relu" + type: "ReLU" + bottom: "stage1_unit1_plus" + top: "stage1_unit1_plus" +} + +layer { + name: "stage1_unit2_conv1" + type: "Convolution" + bottom: "stage1_unit1_plus" + top: "stage1_unit2_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn1" + type: "BatchNorm" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn1" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_relu1" + type: "ReLU" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv1" +} + +layer { + name: "stage1_unit2_conv2" + type: "Convolution" + bottom: "stage1_unit2_conv1" + top: "stage1_unit2_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn2" + type: "BatchNorm" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn2" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_relu2" + type: "ReLU" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv2" +} + +layer { + name: "stage1_unit2_conv3" + type: "Convolution" + bottom: "stage1_unit2_conv2" + top: "stage1_unit2_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit2_bn3" + type: "BatchNorm" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit2_bn3" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit2_plus" + type: "Eltwise" + bottom: "stage1_unit1_plus" + bottom: "stage1_unit2_conv3" + top: "stage1_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit2_relu" + type: "ReLU" + bottom: "stage1_unit2_plus" + top: "stage1_unit2_plus" +} + +layer { + name: "stage1_unit3_conv1" + type: "Convolution" + bottom: "stage1_unit2_plus" + top: "stage1_unit3_conv1" + convolution_param { + num_output: 128 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn1" + type: "BatchNorm" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn1" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_relu1" + type: "ReLU" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv1" +} + +layer { + name: "stage1_unit3_conv2" + type: "Convolution" + bottom: "stage1_unit3_conv1" + top: "stage1_unit3_conv2" + convolution_param { + num_output: 128 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn2" + type: "BatchNorm" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn2" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_relu2" + type: "ReLU" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv2" +} + +layer { + name: "stage1_unit3_conv3" + type: "Convolution" + bottom: "stage1_unit3_conv2" + top: "stage1_unit3_conv3" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage1_unit3_bn3" + type: "BatchNorm" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage1_unit3_bn3" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage1_unit3_plus" + type: "Eltwise" + bottom: "stage1_unit2_plus" + bottom: "stage1_unit3_conv3" + top: "stage1_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage1_unit3_relu" + type: "ReLU" + bottom: "stage1_unit3_plus" + top: "stage1_unit3_plus" +} + +layer { + name: "stage2_unit1_conv1" + type: "Convolution" + bottom: "stage1_unit3_plus" + top: "stage2_unit1_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn1" + type: "BatchNorm" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn1" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_relu1" + type: "ReLU" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv1" +} + +layer { + name: "stage2_unit1_conv2" + type: "Convolution" + bottom: "stage2_unit1_conv1" + top: "stage2_unit1_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn2" + type: "BatchNorm" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn2" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_relu2" + type: "ReLU" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv2" +} + +layer { + name: "stage2_unit1_conv3" + type: "Convolution" + bottom: "stage2_unit1_conv2" + top: "stage2_unit1_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_bn3" + type: "BatchNorm" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_bn3" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_sc" + type: "Convolution" + bottom: "stage1_unit3_plus" + top: "stage2_unit1_sc" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage2_unit1_sc" + top: "stage2_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit1_sc_bn" + bottom: "stage2_unit1_sc" + top: "stage2_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit1_plus" + type: "Eltwise" + bottom: "stage2_unit1_sc" + bottom: "stage2_unit1_conv3" + top: "stage2_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit1_relu" + type: "ReLU" + bottom: "stage2_unit1_plus" + top: "stage2_unit1_plus" +} + +layer { + name: "stage2_unit2_conv1" + type: "Convolution" + bottom: "stage2_unit1_plus" + top: "stage2_unit2_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn1" + type: "BatchNorm" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn1" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_relu1" + type: "ReLU" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv1" +} + +layer { + name: "stage2_unit2_conv2" + type: "Convolution" + bottom: "stage2_unit2_conv1" + top: "stage2_unit2_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn2" + type: "BatchNorm" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn2" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_relu2" + type: "ReLU" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv2" +} + +layer { + name: "stage2_unit2_conv3" + type: "Convolution" + bottom: "stage2_unit2_conv2" + top: "stage2_unit2_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit2_bn3" + type: "BatchNorm" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit2_bn3" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit2_plus" + type: "Eltwise" + bottom: "stage2_unit1_plus" + bottom: "stage2_unit2_conv3" + top: "stage2_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit2_relu" + type: "ReLU" + bottom: "stage2_unit2_plus" + top: "stage2_unit2_plus" +} + +layer { + name: "stage2_unit3_conv1" + type: "Convolution" + bottom: "stage2_unit2_plus" + top: "stage2_unit3_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn1" + type: "BatchNorm" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn1" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_relu1" + type: "ReLU" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv1" +} + +layer { + name: "stage2_unit3_conv2" + type: "Convolution" + bottom: "stage2_unit3_conv1" + top: "stage2_unit3_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn2" + type: "BatchNorm" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn2" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_relu2" + type: "ReLU" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv2" +} + +layer { + name: "stage2_unit3_conv3" + type: "Convolution" + bottom: "stage2_unit3_conv2" + top: "stage2_unit3_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit3_bn3" + type: "BatchNorm" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit3_bn3" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit3_plus" + type: "Eltwise" + bottom: "stage2_unit2_plus" + bottom: "stage2_unit3_conv3" + top: "stage2_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit3_relu" + type: "ReLU" + bottom: "stage2_unit3_plus" + top: "stage2_unit3_plus" +} + +layer { + name: "stage2_unit4_conv1" + type: "Convolution" + bottom: "stage2_unit3_plus" + top: "stage2_unit4_conv1" + convolution_param { + num_output: 256 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn1" + type: "BatchNorm" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn1" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_relu1" + type: "ReLU" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv1" +} + +layer { + name: "stage2_unit4_conv2" + type: "Convolution" + bottom: "stage2_unit4_conv1" + top: "stage2_unit4_conv2" + convolution_param { + num_output: 256 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn2" + type: "BatchNorm" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn2" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_relu2" + type: "ReLU" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv2" +} + +layer { + name: "stage2_unit4_conv3" + type: "Convolution" + bottom: "stage2_unit4_conv2" + top: "stage2_unit4_conv3" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage2_unit4_bn3" + type: "BatchNorm" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage2_unit4_bn3" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage2_unit4_plus" + type: "Eltwise" + bottom: "stage2_unit3_plus" + bottom: "stage2_unit4_conv3" + top: "stage2_unit4_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage2_unit4_relu" + type: "ReLU" + bottom: "stage2_unit4_plus" + top: "stage2_unit4_plus" +} + +layer { + name: "stage3_unit1_conv1" + type: "Convolution" + bottom: "stage2_unit4_plus" + top: "stage3_unit1_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn1" + type: "BatchNorm" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn1" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_relu1" + type: "ReLU" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv1" +} + +layer { + name: "stage3_unit1_conv2" + type: "Convolution" + bottom: "stage3_unit1_conv1" + top: "stage3_unit1_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn2" + type: "BatchNorm" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn2" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_relu2" + type: "ReLU" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv2" +} + +layer { + name: "stage3_unit1_conv3" + type: "Convolution" + bottom: "stage3_unit1_conv2" + top: "stage3_unit1_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_bn3" + type: "BatchNorm" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_bn3" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_sc" + type: "Convolution" + bottom: "stage2_unit4_plus" + top: "stage3_unit1_sc" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage3_unit1_sc" + top: "stage3_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit1_sc_bn" + bottom: "stage3_unit1_sc" + top: "stage3_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit1_plus" + type: "Eltwise" + bottom: "stage3_unit1_sc" + bottom: "stage3_unit1_conv3" + top: "stage3_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit1_relu" + type: "ReLU" + bottom: "stage3_unit1_plus" + top: "stage3_unit1_plus" +} + +layer { + name: "stage3_unit2_conv1" + type: "Convolution" + bottom: "stage3_unit1_plus" + top: "stage3_unit2_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn1" + type: "BatchNorm" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn1" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_relu1" + type: "ReLU" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv1" +} + +layer { + name: "stage3_unit2_conv2" + type: "Convolution" + bottom: "stage3_unit2_conv1" + top: "stage3_unit2_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn2" + type: "BatchNorm" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn2" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_relu2" + type: "ReLU" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv2" +} + +layer { + name: "stage3_unit2_conv3" + type: "Convolution" + bottom: "stage3_unit2_conv2" + top: "stage3_unit2_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit2_bn3" + type: "BatchNorm" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit2_bn3" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit2_plus" + type: "Eltwise" + bottom: "stage3_unit1_plus" + bottom: "stage3_unit2_conv3" + top: "stage3_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit2_relu" + type: "ReLU" + bottom: "stage3_unit2_plus" + top: "stage3_unit2_plus" +} + +layer { + name: "stage3_unit3_conv1" + type: "Convolution" + bottom: "stage3_unit2_plus" + top: "stage3_unit3_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn1" + type: "BatchNorm" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn1" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_relu1" + type: "ReLU" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv1" +} + +layer { + name: "stage3_unit3_conv2" + type: "Convolution" + bottom: "stage3_unit3_conv1" + top: "stage3_unit3_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn2" + type: "BatchNorm" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn2" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_relu2" + type: "ReLU" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv2" +} + +layer { + name: "stage3_unit3_conv3" + type: "Convolution" + bottom: "stage3_unit3_conv2" + top: "stage3_unit3_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit3_bn3" + type: "BatchNorm" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit3_bn3" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit3_plus" + type: "Eltwise" + bottom: "stage3_unit2_plus" + bottom: "stage3_unit3_conv3" + top: "stage3_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit3_relu" + type: "ReLU" + bottom: "stage3_unit3_plus" + top: "stage3_unit3_plus" +} + +layer { + name: "stage3_unit4_conv1" + type: "Convolution" + bottom: "stage3_unit3_plus" + top: "stage3_unit4_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn1" + type: "BatchNorm" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn1" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_relu1" + type: "ReLU" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv1" +} + +layer { + name: "stage3_unit4_conv2" + type: "Convolution" + bottom: "stage3_unit4_conv1" + top: "stage3_unit4_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn2" + type: "BatchNorm" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn2" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_relu2" + type: "ReLU" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv2" +} + +layer { + name: "stage3_unit4_conv3" + type: "Convolution" + bottom: "stage3_unit4_conv2" + top: "stage3_unit4_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit4_bn3" + type: "BatchNorm" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit4_bn3" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit4_plus" + type: "Eltwise" + bottom: "stage3_unit3_plus" + bottom: "stage3_unit4_conv3" + top: "stage3_unit4_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit4_relu" + type: "ReLU" + bottom: "stage3_unit4_plus" + top: "stage3_unit4_plus" +} + +layer { + name: "stage3_unit5_conv1" + type: "Convolution" + bottom: "stage3_unit4_plus" + top: "stage3_unit5_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn1" + type: "BatchNorm" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn1" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_relu1" + type: "ReLU" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv1" +} + +layer { + name: "stage3_unit5_conv2" + type: "Convolution" + bottom: "stage3_unit5_conv1" + top: "stage3_unit5_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn2" + type: "BatchNorm" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn2" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_relu2" + type: "ReLU" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv2" +} + +layer { + name: "stage3_unit5_conv3" + type: "Convolution" + bottom: "stage3_unit5_conv2" + top: "stage3_unit5_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit5_bn3" + type: "BatchNorm" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit5_bn3" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit5_plus" + type: "Eltwise" + bottom: "stage3_unit4_plus" + bottom: "stage3_unit5_conv3" + top: "stage3_unit5_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit5_relu" + type: "ReLU" + bottom: "stage3_unit5_plus" + top: "stage3_unit5_plus" +} + +layer { + name: "stage3_unit6_conv1" + type: "Convolution" + bottom: "stage3_unit5_plus" + top: "stage3_unit6_conv1" + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn1" + type: "BatchNorm" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn1" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_relu1" + type: "ReLU" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv1" +} + +layer { + name: "stage3_unit6_conv2" + type: "Convolution" + bottom: "stage3_unit6_conv1" + top: "stage3_unit6_conv2" + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn2" + type: "BatchNorm" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn2" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_relu2" + type: "ReLU" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv2" +} + +layer { + name: "stage3_unit6_conv3" + type: "Convolution" + bottom: "stage3_unit6_conv2" + top: "stage3_unit6_conv3" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage3_unit6_bn3" + type: "BatchNorm" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage3_unit6_bn3" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage3_unit6_plus" + type: "Eltwise" + bottom: "stage3_unit5_plus" + bottom: "stage3_unit6_conv3" + top: "stage3_unit6_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage3_unit6_relu" + type: "ReLU" + bottom: "stage3_unit6_plus" + top: "stage3_unit6_plus" +} + +layer { + name: "stage4_unit1_conv1" + type: "Convolution" + bottom: "stage3_unit6_plus" + top: "stage4_unit1_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn1" + type: "BatchNorm" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn1" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_relu1" + type: "ReLU" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv1" +} + +layer { + name: "stage4_unit1_conv2" + type: "Convolution" + bottom: "stage4_unit1_conv1" + top: "stage4_unit1_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 2 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn2" + type: "BatchNorm" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn2" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_relu2" + type: "ReLU" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv2" +} + +layer { + name: "stage4_unit1_conv3" + type: "Convolution" + bottom: "stage4_unit1_conv2" + top: "stage4_unit1_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_bn3" + type: "BatchNorm" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_bn3" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_sc" + type: "Convolution" + bottom: "stage3_unit6_plus" + top: "stage4_unit1_sc" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 2 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit1_sc_bn" + type: "BatchNorm" + bottom: "stage4_unit1_sc" + top: "stage4_unit1_sc" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit1_sc_bn" + bottom: "stage4_unit1_sc" + top: "stage4_unit1_sc" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit1_plus" + type: "Eltwise" + bottom: "stage4_unit1_sc" + bottom: "stage4_unit1_conv3" + top: "stage4_unit1_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit1_relu" + type: "ReLU" + bottom: "stage4_unit1_plus" + top: "stage4_unit1_plus" +} + +layer { + name: "stage4_unit2_conv1" + type: "Convolution" + bottom: "stage4_unit1_plus" + top: "stage4_unit2_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn1" + type: "BatchNorm" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn1" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_relu1" + type: "ReLU" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv1" +} + +layer { + name: "stage4_unit2_conv2" + type: "Convolution" + bottom: "stage4_unit2_conv1" + top: "stage4_unit2_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn2" + type: "BatchNorm" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn2" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_relu2" + type: "ReLU" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv2" +} + +layer { + name: "stage4_unit2_conv3" + type: "Convolution" + bottom: "stage4_unit2_conv2" + top: "stage4_unit2_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit2_bn3" + type: "BatchNorm" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit2_bn3" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit2_plus" + type: "Eltwise" + bottom: "stage4_unit1_plus" + bottom: "stage4_unit2_conv3" + top: "stage4_unit2_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit2_relu" + type: "ReLU" + bottom: "stage4_unit2_plus" + top: "stage4_unit2_plus" +} + +layer { + name: "stage4_unit3_conv1" + type: "Convolution" + bottom: "stage4_unit2_plus" + top: "stage4_unit3_conv1" + convolution_param { + num_output: 1024 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn1" + type: "BatchNorm" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn1" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_relu1" + type: "ReLU" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv1" +} + +layer { + name: "stage4_unit3_conv2" + type: "Convolution" + bottom: "stage4_unit3_conv1" + top: "stage4_unit3_conv2" + convolution_param { + num_output: 1024 + kernel_size: 3 + stride: 1 + group: 32 + pad: 1 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn2" + type: "BatchNorm" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn2" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_relu2" + type: "ReLU" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv2" +} + +layer { + name: "stage4_unit3_conv3" + type: "Convolution" + bottom: "stage4_unit3_conv2" + top: "stage4_unit3_conv3" + convolution_param { + num_output: 2048 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + } +} + +layer { + name: "stage4_unit3_bn3" + type: "BatchNorm" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_conv3" + batch_norm_param { + use_global_stats: true + eps: 2e-5 + } +} + +layer { + name: "scale_stage4_unit3_bn3" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_conv3" + type: "Scale" + scale_param { + bias_term: true + } +} + +layer { + name: "stage4_unit3_plus" + type: "Eltwise" + bottom: "stage4_unit2_plus" + bottom: "stage4_unit3_conv3" + top: "stage4_unit3_plus" + eltwise_param { + operation: SUM + } +} + +layer { + name: "stage4_unit3_relu" + type: "ReLU" + bottom: "stage4_unit3_plus" + top: "stage4_unit3_plus" +} + +layer { + name: "pool1" + type: "Pooling" + bottom: "stage4_unit3_plus" + top: "pool1" + pooling_param { + global_pooling : true + pool: AVE + } +} + +layer { + name: "fc1" + type: "InnerProduct" + bottom: "pool1" + top: "fc1" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 1000 + weight_filler { + type: "xavier" + } + bias_filler { + type: "constant" + value: 0 + } + } +} + +layer { + name: "prob" + type: "Softmax" + bottom: "fc1" + top: "prob" +} + diff --git a/presets/mobilenet_v2.prototxt b/presets/mobilenet_v2.prototxt new file mode 100644 index 0000000..b582d79 --- /dev/null +++ b/presets/mobilenet_v2.prototxt @@ -0,0 +1,3417 @@ +name: "MOBILENET_V2" +# transform_param { +# scale: 0.017 +# mirror: false +# crop_size: 224 +# mean_value: [103.94,116.78,123.68] +# } +input: "data" +input_dim: 1 +input_dim: 3 +input_dim: 224 +input_dim: 224 +layer { + name: "conv1" + type: "Convolution" + bottom: "data" + top: "conv1" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 32 + bias_term: false + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv1/bn" + type: "BatchNorm" + bottom: "conv1" + top: "conv1/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv1/scale" + type: "Scale" + bottom: "conv1/bn" + top: "conv1/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu1" + type: "ReLU" + bottom: "conv1/bn" + top: "conv1/bn" +} +layer { + name: "conv2_1/expand" + type: "Convolution" + bottom: "conv1/bn" + top: "conv2_1/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 32 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv2_1/expand/bn" + type: "BatchNorm" + bottom: "conv2_1/expand" + top: "conv2_1/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv2_1/expand/scale" + type: "Scale" + bottom: "conv2_1/expand/bn" + top: "conv2_1/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu2_1/expand" + type: "ReLU" + bottom: "conv2_1/expand/bn" + top: "conv2_1/expand/bn" +} +layer { + name: "conv2_1/dwise" + type: "Convolution" + bottom: "conv2_1/expand/bn" + top: "conv2_1/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 32 + bias_term: false + pad: 1 + kernel_size: 3 + group: 32 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv2_1/dwise/bn" + type: "BatchNorm" + bottom: "conv2_1/dwise" + top: "conv2_1/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv2_1/dwise/scale" + type: "Scale" + bottom: "conv2_1/dwise/bn" + top: "conv2_1/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu2_1/dwise" + type: "ReLU" + bottom: "conv2_1/dwise/bn" + top: "conv2_1/dwise/bn" +} +layer { + name: "conv2_1/linear" + type: "Convolution" + bottom: "conv2_1/dwise/bn" + top: "conv2_1/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 16 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv2_1/linear/bn" + type: "BatchNorm" + bottom: "conv2_1/linear" + top: "conv2_1/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv2_1/linear/scale" + type: "Scale" + bottom: "conv2_1/linear/bn" + top: "conv2_1/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv2_2/expand" + type: "Convolution" + bottom: "conv2_1/linear/bn" + top: "conv2_2/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 96 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv2_2/expand/bn" + type: "BatchNorm" + bottom: "conv2_2/expand" + top: "conv2_2/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv2_2/expand/scale" + type: "Scale" + bottom: "conv2_2/expand/bn" + top: "conv2_2/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu2_2/expand" + type: "ReLU" + bottom: "conv2_2/expand/bn" + top: "conv2_2/expand/bn" +} +layer { + name: "conv2_2/dwise" + type: "Convolution" + bottom: "conv2_2/expand/bn" + top: "conv2_2/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 96 + bias_term: false + pad: 1 + kernel_size: 3 + group: 96 + stride: 2 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv2_2/dwise/bn" + type: "BatchNorm" + bottom: "conv2_2/dwise" + top: "conv2_2/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv2_2/dwise/scale" + type: "Scale" + bottom: "conv2_2/dwise/bn" + top: "conv2_2/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu2_2/dwise" + type: "ReLU" + bottom: "conv2_2/dwise/bn" + top: "conv2_2/dwise/bn" +} +layer { + name: "conv2_2/linear" + type: "Convolution" + bottom: "conv2_2/dwise/bn" + top: "conv2_2/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 24 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv2_2/linear/bn" + type: "BatchNorm" + bottom: "conv2_2/linear" + top: "conv2_2/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv2_2/linear/scale" + type: "Scale" + bottom: "conv2_2/linear/bn" + top: "conv2_2/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv3_1/expand" + type: "Convolution" + bottom: "conv2_2/linear/bn" + top: "conv3_1/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 144 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv3_1/expand/bn" + type: "BatchNorm" + bottom: "conv3_1/expand" + top: "conv3_1/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv3_1/expand/scale" + type: "Scale" + bottom: "conv3_1/expand/bn" + top: "conv3_1/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu3_1/expand" + type: "ReLU" + bottom: "conv3_1/expand/bn" + top: "conv3_1/expand/bn" +} +layer { + name: "conv3_1/dwise" + type: "Convolution" + bottom: "conv3_1/expand/bn" + top: "conv3_1/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 144 + bias_term: false + pad: 1 + kernel_size: 3 + group: 144 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv3_1/dwise/bn" + type: "BatchNorm" + bottom: "conv3_1/dwise" + top: "conv3_1/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv3_1/dwise/scale" + type: "Scale" + bottom: "conv3_1/dwise/bn" + top: "conv3_1/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu3_1/dwise" + type: "ReLU" + bottom: "conv3_1/dwise/bn" + top: "conv3_1/dwise/bn" +} +layer { + name: "conv3_1/linear" + type: "Convolution" + bottom: "conv3_1/dwise/bn" + top: "conv3_1/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 24 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv3_1/linear/bn" + type: "BatchNorm" + bottom: "conv3_1/linear" + top: "conv3_1/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv3_1/linear/scale" + type: "Scale" + bottom: "conv3_1/linear/bn" + top: "conv3_1/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_3_1" + type: "Eltwise" + bottom: "conv2_2/linear/bn" + bottom: "conv3_1/linear/bn" + top: "block_3_1" +} +layer { + name: "conv3_2/expand" + type: "Convolution" + bottom: "block_3_1" + top: "conv3_2/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 144 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv3_2/expand/bn" + type: "BatchNorm" + bottom: "conv3_2/expand" + top: "conv3_2/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv3_2/expand/scale" + type: "Scale" + bottom: "conv3_2/expand/bn" + top: "conv3_2/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu3_2/expand" + type: "ReLU" + bottom: "conv3_2/expand/bn" + top: "conv3_2/expand/bn" +} +layer { + name: "conv3_2/dwise" + type: "Convolution" + bottom: "conv3_2/expand/bn" + top: "conv3_2/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 144 + bias_term: false + pad: 1 + kernel_size: 3 + group: 144 + stride: 2 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv3_2/dwise/bn" + type: "BatchNorm" + bottom: "conv3_2/dwise" + top: "conv3_2/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv3_2/dwise/scale" + type: "Scale" + bottom: "conv3_2/dwise/bn" + top: "conv3_2/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu3_2/dwise" + type: "ReLU" + bottom: "conv3_2/dwise/bn" + top: "conv3_2/dwise/bn" +} +layer { + name: "conv3_2/linear" + type: "Convolution" + bottom: "conv3_2/dwise/bn" + top: "conv3_2/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 32 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv3_2/linear/bn" + type: "BatchNorm" + bottom: "conv3_2/linear" + top: "conv3_2/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv3_2/linear/scale" + type: "Scale" + bottom: "conv3_2/linear/bn" + top: "conv3_2/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv4_1/expand" + type: "Convolution" + bottom: "conv3_2/linear/bn" + top: "conv4_1/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 192 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_1/expand/bn" + type: "BatchNorm" + bottom: "conv4_1/expand" + top: "conv4_1/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_1/expand/scale" + type: "Scale" + bottom: "conv4_1/expand/bn" + top: "conv4_1/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_1/expand" + type: "ReLU" + bottom: "conv4_1/expand/bn" + top: "conv4_1/expand/bn" +} +layer { + name: "conv4_1/dwise" + type: "Convolution" + bottom: "conv4_1/expand/bn" + top: "conv4_1/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 192 + bias_term: false + pad: 1 + kernel_size: 3 + group: 192 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_1/dwise/bn" + type: "BatchNorm" + bottom: "conv4_1/dwise" + top: "conv4_1/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_1/dwise/scale" + type: "Scale" + bottom: "conv4_1/dwise/bn" + top: "conv4_1/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_1/dwise" + type: "ReLU" + bottom: "conv4_1/dwise/bn" + top: "conv4_1/dwise/bn" +} +layer { + name: "conv4_1/linear" + type: "Convolution" + bottom: "conv4_1/dwise/bn" + top: "conv4_1/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 32 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_1/linear/bn" + type: "BatchNorm" + bottom: "conv4_1/linear" + top: "conv4_1/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_1/linear/scale" + type: "Scale" + bottom: "conv4_1/linear/bn" + top: "conv4_1/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_4_1" + type: "Eltwise" + bottom: "conv3_2/linear/bn" + bottom: "conv4_1/linear/bn" + top: "block_4_1" +} +layer { + name: "conv4_2/expand" + type: "Convolution" + bottom: "block_4_1" + top: "conv4_2/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 192 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_2/expand/bn" + type: "BatchNorm" + bottom: "conv4_2/expand" + top: "conv4_2/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_2/expand/scale" + type: "Scale" + bottom: "conv4_2/expand/bn" + top: "conv4_2/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_2/expand" + type: "ReLU" + bottom: "conv4_2/expand/bn" + top: "conv4_2/expand/bn" +} +layer { + name: "conv4_2/dwise" + type: "Convolution" + bottom: "conv4_2/expand/bn" + top: "conv4_2/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 192 + bias_term: false + pad: 1 + kernel_size: 3 + group: 192 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_2/dwise/bn" + type: "BatchNorm" + bottom: "conv4_2/dwise" + top: "conv4_2/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_2/dwise/scale" + type: "Scale" + bottom: "conv4_2/dwise/bn" + top: "conv4_2/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_2/dwise" + type: "ReLU" + bottom: "conv4_2/dwise/bn" + top: "conv4_2/dwise/bn" +} +layer { + name: "conv4_2/linear" + type: "Convolution" + bottom: "conv4_2/dwise/bn" + top: "conv4_2/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 32 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_2/linear/bn" + type: "BatchNorm" + bottom: "conv4_2/linear" + top: "conv4_2/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_2/linear/scale" + type: "Scale" + bottom: "conv4_2/linear/bn" + top: "conv4_2/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_4_2" + type: "Eltwise" + bottom: "block_4_1" + bottom: "conv4_2/linear/bn" + top: "block_4_2" +} +layer { + name: "conv4_3/expand" + type: "Convolution" + bottom: "block_4_2" + top: "conv4_3/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 192 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_3/expand/bn" + type: "BatchNorm" + bottom: "conv4_3/expand" + top: "conv4_3/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_3/expand/scale" + type: "Scale" + bottom: "conv4_3/expand/bn" + top: "conv4_3/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_3/expand" + type: "ReLU" + bottom: "conv4_3/expand/bn" + top: "conv4_3/expand/bn" +} +layer { + name: "conv4_3/dwise" + type: "Convolution" + bottom: "conv4_3/expand/bn" + top: "conv4_3/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 192 + bias_term: false + pad: 1 + kernel_size: 3 + group: 192 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_3/dwise/bn" + type: "BatchNorm" + bottom: "conv4_3/dwise" + top: "conv4_3/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_3/dwise/scale" + type: "Scale" + bottom: "conv4_3/dwise/bn" + top: "conv4_3/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_3/dwise" + type: "ReLU" + bottom: "conv4_3/dwise/bn" + top: "conv4_3/dwise/bn" +} +layer { + name: "conv4_3/linear" + type: "Convolution" + bottom: "conv4_3/dwise/bn" + top: "conv4_3/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_3/linear/bn" + type: "BatchNorm" + bottom: "conv4_3/linear" + top: "conv4_3/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_3/linear/scale" + type: "Scale" + bottom: "conv4_3/linear/bn" + top: "conv4_3/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv4_4/expand" + type: "Convolution" + bottom: "conv4_3/linear/bn" + top: "conv4_4/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_4/expand/bn" + type: "BatchNorm" + bottom: "conv4_4/expand" + top: "conv4_4/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_4/expand/scale" + type: "Scale" + bottom: "conv4_4/expand/bn" + top: "conv4_4/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_4/expand" + type: "ReLU" + bottom: "conv4_4/expand/bn" + top: "conv4_4/expand/bn" +} +layer { + name: "conv4_4/dwise" + type: "Convolution" + bottom: "conv4_4/expand/bn" + top: "conv4_4/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + pad: 1 + kernel_size: 3 + group: 384 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_4/dwise/bn" + type: "BatchNorm" + bottom: "conv4_4/dwise" + top: "conv4_4/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_4/dwise/scale" + type: "Scale" + bottom: "conv4_4/dwise/bn" + top: "conv4_4/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_4/dwise" + type: "ReLU" + bottom: "conv4_4/dwise/bn" + top: "conv4_4/dwise/bn" +} +layer { + name: "conv4_4/linear" + type: "Convolution" + bottom: "conv4_4/dwise/bn" + top: "conv4_4/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_4/linear/bn" + type: "BatchNorm" + bottom: "conv4_4/linear" + top: "conv4_4/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_4/linear/scale" + type: "Scale" + bottom: "conv4_4/linear/bn" + top: "conv4_4/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_4_4" + type: "Eltwise" + bottom: "conv4_3/linear/bn" + bottom: "conv4_4/linear/bn" + top: "block_4_4" +} +layer { + name: "conv4_5/expand" + type: "Convolution" + bottom: "block_4_4" + top: "conv4_5/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_5/expand/bn" + type: "BatchNorm" + bottom: "conv4_5/expand" + top: "conv4_5/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_5/expand/scale" + type: "Scale" + bottom: "conv4_5/expand/bn" + top: "conv4_5/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_5/expand" + type: "ReLU" + bottom: "conv4_5/expand/bn" + top: "conv4_5/expand/bn" +} +layer { + name: "conv4_5/dwise" + type: "Convolution" + bottom: "conv4_5/expand/bn" + top: "conv4_5/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + pad: 1 + kernel_size: 3 + group: 384 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_5/dwise/bn" + type: "BatchNorm" + bottom: "conv4_5/dwise" + top: "conv4_5/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_5/dwise/scale" + type: "Scale" + bottom: "conv4_5/dwise/bn" + top: "conv4_5/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_5/dwise" + type: "ReLU" + bottom: "conv4_5/dwise/bn" + top: "conv4_5/dwise/bn" +} +layer { + name: "conv4_5/linear" + type: "Convolution" + bottom: "conv4_5/dwise/bn" + top: "conv4_5/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_5/linear/bn" + type: "BatchNorm" + bottom: "conv4_5/linear" + top: "conv4_5/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_5/linear/scale" + type: "Scale" + bottom: "conv4_5/linear/bn" + top: "conv4_5/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_4_5" + type: "Eltwise" + bottom: "block_4_4" + bottom: "conv4_5/linear/bn" + top: "block_4_5" +} +layer { + name: "conv4_6/expand" + type: "Convolution" + bottom: "block_4_5" + top: "conv4_6/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_6/expand/bn" + type: "BatchNorm" + bottom: "conv4_6/expand" + top: "conv4_6/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_6/expand/scale" + type: "Scale" + bottom: "conv4_6/expand/bn" + top: "conv4_6/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_6/expand" + type: "ReLU" + bottom: "conv4_6/expand/bn" + top: "conv4_6/expand/bn" +} +layer { + name: "conv4_6/dwise" + type: "Convolution" + bottom: "conv4_6/expand/bn" + top: "conv4_6/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + pad: 1 + kernel_size: 3 + group: 384 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_6/dwise/bn" + type: "BatchNorm" + bottom: "conv4_6/dwise" + top: "conv4_6/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_6/dwise/scale" + type: "Scale" + bottom: "conv4_6/dwise/bn" + top: "conv4_6/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_6/dwise" + type: "ReLU" + bottom: "conv4_6/dwise/bn" + top: "conv4_6/dwise/bn" +} +layer { + name: "conv4_6/linear" + type: "Convolution" + bottom: "conv4_6/dwise/bn" + top: "conv4_6/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_6/linear/bn" + type: "BatchNorm" + bottom: "conv4_6/linear" + top: "conv4_6/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_6/linear/scale" + type: "Scale" + bottom: "conv4_6/linear/bn" + top: "conv4_6/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_4_6" + type: "Eltwise" + bottom: "block_4_5" + bottom: "conv4_6/linear/bn" + top: "block_4_6" +} +layer { + name: "conv4_7/expand" + type: "Convolution" + bottom: "block_4_6" + top: "conv4_7/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_7/expand/bn" + type: "BatchNorm" + bottom: "conv4_7/expand" + top: "conv4_7/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_7/expand/scale" + type: "Scale" + bottom: "conv4_7/expand/bn" + top: "conv4_7/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_7/expand" + type: "ReLU" + bottom: "conv4_7/expand/bn" + top: "conv4_7/expand/bn" +} +layer { + name: "conv4_7/dwise" + type: "Convolution" + bottom: "conv4_7/expand/bn" + top: "conv4_7/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 384 + bias_term: false + pad: 1 + kernel_size: 3 + group: 384 + stride: 2 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv4_7/dwise/bn" + type: "BatchNorm" + bottom: "conv4_7/dwise" + top: "conv4_7/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_7/dwise/scale" + type: "Scale" + bottom: "conv4_7/dwise/bn" + top: "conv4_7/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu4_7/dwise" + type: "ReLU" + bottom: "conv4_7/dwise/bn" + top: "conv4_7/dwise/bn" +} +layer { + name: "conv4_7/linear" + type: "Convolution" + bottom: "conv4_7/dwise/bn" + top: "conv4_7/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 96 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv4_7/linear/bn" + type: "BatchNorm" + bottom: "conv4_7/linear" + top: "conv4_7/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv4_7/linear/scale" + type: "Scale" + bottom: "conv4_7/linear/bn" + top: "conv4_7/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv5_1/expand" + type: "Convolution" + bottom: "conv4_7/linear/bn" + top: "conv5_1/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 576 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv5_1/expand/bn" + type: "BatchNorm" + bottom: "conv5_1/expand" + top: "conv5_1/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_1/expand/scale" + type: "Scale" + bottom: "conv5_1/expand/bn" + top: "conv5_1/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu5_1/expand" + type: "ReLU" + bottom: "conv5_1/expand/bn" + top: "conv5_1/expand/bn" +} +layer { + name: "conv5_1/dwise" + type: "Convolution" + bottom: "conv5_1/expand/bn" + top: "conv5_1/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 576 + bias_term: false + pad: 1 + kernel_size: 3 + group: 576 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv5_1/dwise/bn" + type: "BatchNorm" + bottom: "conv5_1/dwise" + top: "conv5_1/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_1/dwise/scale" + type: "Scale" + bottom: "conv5_1/dwise/bn" + top: "conv5_1/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu5_1/dwise" + type: "ReLU" + bottom: "conv5_1/dwise/bn" + top: "conv5_1/dwise/bn" +} +layer { + name: "conv5_1/linear" + type: "Convolution" + bottom: "conv5_1/dwise/bn" + top: "conv5_1/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 96 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv5_1/linear/bn" + type: "BatchNorm" + bottom: "conv5_1/linear" + top: "conv5_1/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_1/linear/scale" + type: "Scale" + bottom: "conv5_1/linear/bn" + top: "conv5_1/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_5_1" + type: "Eltwise" + bottom: "conv4_7/linear/bn" + bottom: "conv5_1/linear/bn" + top: "block_5_1" +} +layer { + name: "conv5_2/expand" + type: "Convolution" + bottom: "block_5_1" + top: "conv5_2/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 576 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv5_2/expand/bn" + type: "BatchNorm" + bottom: "conv5_2/expand" + top: "conv5_2/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_2/expand/scale" + type: "Scale" + bottom: "conv5_2/expand/bn" + top: "conv5_2/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu5_2/expand" + type: "ReLU" + bottom: "conv5_2/expand/bn" + top: "conv5_2/expand/bn" +} +layer { + name: "conv5_2/dwise" + type: "Convolution" + bottom: "conv5_2/expand/bn" + top: "conv5_2/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 576 + bias_term: false + pad: 1 + kernel_size: 3 + group: 576 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv5_2/dwise/bn" + type: "BatchNorm" + bottom: "conv5_2/dwise" + top: "conv5_2/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_2/dwise/scale" + type: "Scale" + bottom: "conv5_2/dwise/bn" + top: "conv5_2/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu5_2/dwise" + type: "ReLU" + bottom: "conv5_2/dwise/bn" + top: "conv5_2/dwise/bn" +} +layer { + name: "conv5_2/linear" + type: "Convolution" + bottom: "conv5_2/dwise/bn" + top: "conv5_2/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 96 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv5_2/linear/bn" + type: "BatchNorm" + bottom: "conv5_2/linear" + top: "conv5_2/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_2/linear/scale" + type: "Scale" + bottom: "conv5_2/linear/bn" + top: "conv5_2/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_5_2" + type: "Eltwise" + bottom: "block_5_1" + bottom: "conv5_2/linear/bn" + top: "block_5_2" +} +layer { + name: "conv5_3/expand" + type: "Convolution" + bottom: "block_5_2" + top: "conv5_3/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 576 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv5_3/expand/bn" + type: "BatchNorm" + bottom: "conv5_3/expand" + top: "conv5_3/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_3/expand/scale" + type: "Scale" + bottom: "conv5_3/expand/bn" + top: "conv5_3/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu5_3/expand" + type: "ReLU" + bottom: "conv5_3/expand/bn" + top: "conv5_3/expand/bn" +} +layer { + name: "conv5_3/dwise" + type: "Convolution" + bottom: "conv5_3/expand/bn" + top: "conv5_3/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 576 + bias_term: false + pad: 1 + kernel_size: 3 + group: 576 + stride: 2 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv5_3/dwise/bn" + type: "BatchNorm" + bottom: "conv5_3/dwise" + top: "conv5_3/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_3/dwise/scale" + type: "Scale" + bottom: "conv5_3/dwise/bn" + top: "conv5_3/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu5_3/dwise" + type: "ReLU" + bottom: "conv5_3/dwise/bn" + top: "conv5_3/dwise/bn" +} +layer { + name: "conv5_3/linear" + type: "Convolution" + bottom: "conv5_3/dwise/bn" + top: "conv5_3/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 160 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv5_3/linear/bn" + type: "BatchNorm" + bottom: "conv5_3/linear" + top: "conv5_3/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv5_3/linear/scale" + type: "Scale" + bottom: "conv5_3/linear/bn" + top: "conv5_3/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv6_1/expand" + type: "Convolution" + bottom: "conv5_3/linear/bn" + top: "conv6_1/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 960 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_1/expand/bn" + type: "BatchNorm" + bottom: "conv6_1/expand" + top: "conv6_1/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_1/expand/scale" + type: "Scale" + bottom: "conv6_1/expand/bn" + top: "conv6_1/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_1/expand" + type: "ReLU" + bottom: "conv6_1/expand/bn" + top: "conv6_1/expand/bn" +} +layer { + name: "conv6_1/dwise" + type: "Convolution" + bottom: "conv6_1/expand/bn" + top: "conv6_1/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 960 + bias_term: false + pad: 1 + kernel_size: 3 + group: 960 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv6_1/dwise/bn" + type: "BatchNorm" + bottom: "conv6_1/dwise" + top: "conv6_1/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_1/dwise/scale" + type: "Scale" + bottom: "conv6_1/dwise/bn" + top: "conv6_1/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_1/dwise" + type: "ReLU" + bottom: "conv6_1/dwise/bn" + top: "conv6_1/dwise/bn" +} +layer { + name: "conv6_1/linear" + type: "Convolution" + bottom: "conv6_1/dwise/bn" + top: "conv6_1/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 160 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_1/linear/bn" + type: "BatchNorm" + bottom: "conv6_1/linear" + top: "conv6_1/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_1/linear/scale" + type: "Scale" + bottom: "conv6_1/linear/bn" + top: "conv6_1/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_6_1" + type: "Eltwise" + bottom: "conv5_3/linear/bn" + bottom: "conv6_1/linear/bn" + top: "block_6_1" +} +layer { + name: "conv6_2/expand" + type: "Convolution" + bottom: "block_6_1" + top: "conv6_2/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 960 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_2/expand/bn" + type: "BatchNorm" + bottom: "conv6_2/expand" + top: "conv6_2/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_2/expand/scale" + type: "Scale" + bottom: "conv6_2/expand/bn" + top: "conv6_2/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_2/expand" + type: "ReLU" + bottom: "conv6_2/expand/bn" + top: "conv6_2/expand/bn" +} +layer { + name: "conv6_2/dwise" + type: "Convolution" + bottom: "conv6_2/expand/bn" + top: "conv6_2/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 960 + bias_term: false + pad: 1 + kernel_size: 3 + group: 960 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv6_2/dwise/bn" + type: "BatchNorm" + bottom: "conv6_2/dwise" + top: "conv6_2/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_2/dwise/scale" + type: "Scale" + bottom: "conv6_2/dwise/bn" + top: "conv6_2/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_2/dwise" + type: "ReLU" + bottom: "conv6_2/dwise/bn" + top: "conv6_2/dwise/bn" +} +layer { + name: "conv6_2/linear" + type: "Convolution" + bottom: "conv6_2/dwise/bn" + top: "conv6_2/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 160 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_2/linear/bn" + type: "BatchNorm" + bottom: "conv6_2/linear" + top: "conv6_2/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_2/linear/scale" + type: "Scale" + bottom: "conv6_2/linear/bn" + top: "conv6_2/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "block_6_2" + type: "Eltwise" + bottom: "block_6_1" + bottom: "conv6_2/linear/bn" + top: "block_6_2" +} +layer { + name: "conv6_3/expand" + type: "Convolution" + bottom: "block_6_2" + top: "conv6_3/expand" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 960 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_3/expand/bn" + type: "BatchNorm" + bottom: "conv6_3/expand" + top: "conv6_3/expand/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_3/expand/scale" + type: "Scale" + bottom: "conv6_3/expand/bn" + top: "conv6_3/expand/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_3/expand" + type: "ReLU" + bottom: "conv6_3/expand/bn" + top: "conv6_3/expand/bn" +} +layer { + name: "conv6_3/dwise" + type: "Convolution" + bottom: "conv6_3/expand/bn" + top: "conv6_3/dwise" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 960 + bias_term: false + pad: 1 + kernel_size: 3 + group: 960 + weight_filler { + type: "msra" + } + engine: CAFFE + } +} +layer { + name: "conv6_3/dwise/bn" + type: "BatchNorm" + bottom: "conv6_3/dwise" + top: "conv6_3/dwise/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_3/dwise/scale" + type: "Scale" + bottom: "conv6_3/dwise/bn" + top: "conv6_3/dwise/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_3/dwise" + type: "ReLU" + bottom: "conv6_3/dwise/bn" + top: "conv6_3/dwise/bn" +} +layer { + name: "conv6_3/linear" + type: "Convolution" + bottom: "conv6_3/dwise/bn" + top: "conv6_3/linear" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 320 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_3/linear/bn" + type: "BatchNorm" + bottom: "conv6_3/linear" + top: "conv6_3/linear/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_3/linear/scale" + type: "Scale" + bottom: "conv6_3/linear/bn" + top: "conv6_3/linear/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "conv6_4" + type: "Convolution" + bottom: "conv6_3/linear/bn" + top: "conv6_4" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1280 + bias_term: false + kernel_size: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_4/bn" + type: "BatchNorm" + bottom: "conv6_4" + top: "conv6_4/bn" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + batch_norm_param { + use_global_stats: true + eps: 1e-5 + } +} +layer { + name: "conv6_4/scale" + type: "Scale" + bottom: "conv6_4/bn" + top: "conv6_4/bn" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + scale_param { + bias_term: true + } +} +layer { + name: "relu6_4" + type: "ReLU" + bottom: "conv6_4/bn" + top: "conv6_4/bn" +} +layer { + name: "pool6" + type: "Pooling" + bottom: "conv6_4/bn" + top: "pool6" + pooling_param { + pool: AVE + global_pooling: true + } +} +layer { + name: "fc7" + type: "Convolution" + bottom: "pool6" + top: "fc7" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 1000 + kernel_size: 1 + weight_filler { + type: "msra" + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "prob" + type: "Softmax" + bottom: "fc7" + top: "prob" +} diff --git a/presets/shufflenet.prototxt b/presets/shufflenet.prototxt new file mode 100644 index 0000000..c26cca3 --- /dev/null +++ b/presets/shufflenet.prototxt @@ -0,0 +1,3009 @@ +name: "shufflenet" +# transform_param { +# scale: 0.017 +# mirror: false +# crop_size: 224 +# mean_value: [103.94,116.78,123.68] +# } +input: "data" +input_shape { + dim: 1 + dim: 3 + dim: 224 + dim: 224 +} +layer { + name: "conv1" + type: "Convolution" + bottom: "data" + top: "conv1" + convolution_param { + num_output: 24 + pad: 1 + kernel_size: 3 + stride: 2 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv1_bn" + type: "BatchNorm" + bottom: "conv1" + top: "conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "conv1_scale" + bottom: "conv1" + top: "conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "conv1_relu" + type: "ReLU" + bottom: "conv1" + top: "conv1" +} +layer { + name: "pool1" + type: "Pooling" + bottom: "conv1" + top: "pool1" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + } +} +layer { + name: "resx1_match_conv" + type: "Pooling" + bottom: "pool1" + top: "resx1_match_conv" + pooling_param { + pool: AVE + kernel_size: 3 + stride: 2 + } +} +layer { + name: "resx1_conv1" + type: "Convolution" + bottom: "pool1" + top: "resx1_conv1" + convolution_param { + num_output: 54 + kernel_size: 1 + stride: 1 + pad: 0 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx1_conv1_bn" + type: "BatchNorm" + bottom: "resx1_conv1" + top: "resx1_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx1_conv1_scale" + bottom: "resx1_conv1" + top: "resx1_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx1_conv1_relu" + type: "ReLU" + bottom: "resx1_conv1" + top: "resx1_conv1" +} +layer { + name: "resx1_conv2" + type: "ConvolutionDepthwise" + bottom: "resx1_conv1" + top: "resx1_conv2" + convolution_param { + num_output: 54 + kernel_size: 3 + stride: 2 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx1_conv2_bn" + type: "BatchNorm" + bottom: "resx1_conv2" + top: "resx1_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx1_conv2_scale" + bottom: "resx1_conv2" + top: "resx1_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx1_conv3" + type: "Convolution" + bottom: "resx1_conv2" + top: "resx1_conv3" + convolution_param { + num_output: 216 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx1_conv3_bn" + type: "BatchNorm" + bottom: "resx1_conv3" + top: "resx1_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx1_conv3_scale" + bottom: "resx1_conv3" + top: "resx1_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx1_concat" + type: "Concat" + bottom: "resx1_match_conv" + bottom: "resx1_conv3" + top: "resx1_concat" +} +layer { + name: "resx1_concat_relu" + type: "ReLU" + bottom: "resx1_concat" + top: "resx1_concat" +} +layer { + name: "resx2_conv1" + type: "Convolution" + bottom: "resx1_concat" + top: "resx2_conv1" + convolution_param { + num_output: 60 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx2_conv1_bn" + type: "BatchNorm" + bottom: "resx2_conv1" + top: "resx2_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx2_conv1_scale" + bottom: "resx2_conv1" + top: "resx2_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx2_conv1_relu" + type: "ReLU" + bottom: "resx2_conv1" + top: "resx2_conv1" +} +layer { + name: "shuffle2" + type: "ShuffleChannel" + bottom: "resx2_conv1" + top: "shuffle2" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx2_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle2" + top: "resx2_conv2" + convolution_param { + num_output: 60 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx2_conv2_bn" + type: "BatchNorm" + bottom: "resx2_conv2" + top: "resx2_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx2_conv2_scale" + bottom: "resx2_conv2" + top: "resx2_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx2_conv3" + type: "Convolution" + bottom: "resx2_conv2" + top: "resx2_conv3" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx2_conv3_bn" + type: "BatchNorm" + bottom: "resx2_conv3" + top: "resx2_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx2_conv3_scale" + bottom: "resx2_conv3" + top: "resx2_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx2_elewise" + type: "Eltwise" + bottom: "resx1_concat" + bottom: "resx2_conv3" + top: "resx2_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx2_elewise_relu" + type: "ReLU" + bottom: "resx2_elewise" + top: "resx2_elewise" +} +layer { + name: "resx3_conv1" + type: "Convolution" + bottom: "resx2_elewise" + top: "resx3_conv1" + convolution_param { + num_output: 60 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx3_conv1_bn" + type: "BatchNorm" + bottom: "resx3_conv1" + top: "resx3_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx3_conv1_scale" + bottom: "resx3_conv1" + top: "resx3_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx3_conv1_relu" + type: "ReLU" + bottom: "resx3_conv1" + top: "resx3_conv1" +} +layer { + name: "shuffle3" + type: "ShuffleChannel" + bottom: "resx3_conv1" + top: "shuffle3" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx3_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle3" + top: "resx3_conv2" + convolution_param { + num_output: 60 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx3_conv2_bn" + type: "BatchNorm" + bottom: "resx3_conv2" + top: "resx3_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx3_conv2_scale" + bottom: "resx3_conv2" + top: "resx3_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx3_conv3" + type: "Convolution" + bottom: "resx3_conv2" + top: "resx3_conv3" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx3_conv3_bn" + type: "BatchNorm" + bottom: "resx3_conv3" + top: "resx3_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx3_conv3_scale" + bottom: "resx3_conv3" + top: "resx3_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx3_elewise" + type: "Eltwise" + bottom: "resx2_elewise" + bottom: "resx3_conv3" + top: "resx3_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx3_elewise_relu" + type: "ReLU" + bottom: "resx3_elewise" + top: "resx3_elewise" +} +layer { + name: "resx4_conv1" + type: "Convolution" + bottom: "resx3_elewise" + top: "resx4_conv1" + convolution_param { + num_output: 60 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx4_conv1_bn" + type: "BatchNorm" + bottom: "resx4_conv1" + top: "resx4_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx4_conv1_scale" + bottom: "resx4_conv1" + top: "resx4_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx4_conv1_relu" + type: "ReLU" + bottom: "resx4_conv1" + top: "resx4_conv1" +} +layer { + name: "shuffle4" + type: "ShuffleChannel" + bottom: "resx4_conv1" + top: "shuffle4" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx4_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle4" + top: "resx4_conv2" + convolution_param { + num_output: 60 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx4_conv2_bn" + type: "BatchNorm" + bottom: "resx4_conv2" + top: "resx4_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx4_conv2_scale" + bottom: "resx4_conv2" + top: "resx4_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx4_conv3" + type: "Convolution" + bottom: "resx4_conv2" + top: "resx4_conv3" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx4_conv3_bn" + type: "BatchNorm" + bottom: "resx4_conv3" + top: "resx4_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx4_conv3_scale" + bottom: "resx4_conv3" + top: "resx4_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx4_elewise" + type: "Eltwise" + bottom: "resx3_elewise" + bottom: "resx4_conv3" + top: "resx4_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx4_elewise_relu" + type: "ReLU" + bottom: "resx4_elewise" + top: "resx4_elewise" +} +layer { + name: "resx5_match_conv" + type: "Pooling" + bottom: "resx4_elewise" + top: "resx5_match_conv" + pooling_param { + pool: AVE + kernel_size: 3 + stride: 2 + } +} +layer { + name: "resx5_conv1" + type: "Convolution" + bottom: "resx4_elewise" + top: "resx5_conv1" + convolution_param { + num_output: 60 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx5_conv1_bn" + type: "BatchNorm" + bottom: "resx5_conv1" + top: "resx5_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx5_conv1_scale" + bottom: "resx5_conv1" + top: "resx5_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx5_conv1_relu" + type: "ReLU" + bottom: "resx5_conv1" + top: "resx5_conv1" +} +layer { + name: "shuffle5" + type: "ShuffleChannel" + bottom: "resx5_conv1" + top: "shuffle5" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx5_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle5" + top: "resx5_conv2" + convolution_param { + num_output: 60 + kernel_size: 3 + stride: 2 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx5_conv2_bn" + type: "BatchNorm" + bottom: "resx5_conv2" + top: "resx5_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx5_conv2_scale" + bottom: "resx5_conv2" + top: "resx5_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx5_conv3" + type: "Convolution" + bottom: "resx5_conv2" + top: "resx5_conv3" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx5_conv3_bn" + type: "BatchNorm" + bottom: "resx5_conv3" + top: "resx5_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx5_conv3_scale" + bottom: "resx5_conv3" + top: "resx5_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx5_concat" + type: "Concat" + bottom: "resx5_match_conv" + bottom: "resx5_conv3" + top: "resx5_concat" +} +layer { + name: "resx5_concat_relu" + type: "ReLU" + bottom: "resx5_concat" + top: "resx5_concat" +} +layer { + name: "resx6_conv1" + type: "Convolution" + bottom: "resx5_concat" + top: "resx6_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx6_conv1_bn" + type: "BatchNorm" + bottom: "resx6_conv1" + top: "resx6_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx6_conv1_scale" + bottom: "resx6_conv1" + top: "resx6_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx6_conv1_relu" + type: "ReLU" + bottom: "resx6_conv1" + top: "resx6_conv1" +} +layer { + name: "shuffle6" + type: "ShuffleChannel" + bottom: "resx6_conv1" + top: "shuffle6" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx6_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle6" + top: "resx6_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx6_conv2_bn" + type: "BatchNorm" + bottom: "resx6_conv2" + top: "resx6_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx6_conv2_scale" + bottom: "resx6_conv2" + top: "resx6_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx6_conv3" + type: "Convolution" + bottom: "resx6_conv2" + top: "resx6_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx6_conv3_bn" + type: "BatchNorm" + bottom: "resx6_conv3" + top: "resx6_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx6_conv3_scale" + bottom: "resx6_conv3" + top: "resx6_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx6_elewise" + type: "Eltwise" + bottom: "resx5_concat" + bottom: "resx6_conv3" + top: "resx6_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx6_elewise_relu" + type: "ReLU" + bottom: "resx6_elewise" + top: "resx6_elewise" +} +layer { + name: "resx7_conv1" + type: "Convolution" + bottom: "resx6_elewise" + top: "resx7_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx7_conv1_bn" + type: "BatchNorm" + bottom: "resx7_conv1" + top: "resx7_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx7_conv1_scale" + bottom: "resx7_conv1" + top: "resx7_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx7_conv1_relu" + type: "ReLU" + bottom: "resx7_conv1" + top: "resx7_conv1" +} +layer { + name: "shuffle7" + type: "ShuffleChannel" + bottom: "resx7_conv1" + top: "shuffle7" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx7_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle7" + top: "resx7_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx7_conv2_bn" + type: "BatchNorm" + bottom: "resx7_conv2" + top: "resx7_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx7_conv2_scale" + bottom: "resx7_conv2" + top: "resx7_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx7_conv3" + type: "Convolution" + bottom: "resx7_conv2" + top: "resx7_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx7_conv3_bn" + type: "BatchNorm" + bottom: "resx7_conv3" + top: "resx7_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx7_conv3_scale" + bottom: "resx7_conv3" + top: "resx7_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx7_elewise" + type: "Eltwise" + bottom: "resx6_elewise" + bottom: "resx7_conv3" + top: "resx7_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx7_elewise_relu" + type: "ReLU" + bottom: "resx7_elewise" + top: "resx7_elewise" +} +layer { + name: "resx8_conv1" + type: "Convolution" + bottom: "resx7_elewise" + top: "resx8_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx8_conv1_bn" + type: "BatchNorm" + bottom: "resx8_conv1" + top: "resx8_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx8_conv1_scale" + bottom: "resx8_conv1" + top: "resx8_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx8_conv1_relu" + type: "ReLU" + bottom: "resx8_conv1" + top: "resx8_conv1" +} +layer { + name: "shuffle8" + type: "ShuffleChannel" + bottom: "resx8_conv1" + top: "shuffle8" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx8_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle8" + top: "resx8_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx8_conv2_bn" + type: "BatchNorm" + bottom: "resx8_conv2" + top: "resx8_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx8_conv2_scale" + bottom: "resx8_conv2" + top: "resx8_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx8_conv3" + type: "Convolution" + bottom: "resx8_conv2" + top: "resx8_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx8_conv3_bn" + type: "BatchNorm" + bottom: "resx8_conv3" + top: "resx8_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx8_conv3_scale" + bottom: "resx8_conv3" + top: "resx8_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx8_elewise" + type: "Eltwise" + bottom: "resx7_elewise" + bottom: "resx8_conv3" + top: "resx8_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx8_elewise_relu" + type: "ReLU" + bottom: "resx8_elewise" + top: "resx8_elewise" +} +layer { + name: "resx9_conv1" + type: "Convolution" + bottom: "resx8_elewise" + top: "resx9_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx9_conv1_bn" + type: "BatchNorm" + bottom: "resx9_conv1" + top: "resx9_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx9_conv1_scale" + bottom: "resx9_conv1" + top: "resx9_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx9_conv1_relu" + type: "ReLU" + bottom: "resx9_conv1" + top: "resx9_conv1" +} +layer { + name: "shuffle9" + type: "ShuffleChannel" + bottom: "resx9_conv1" + top: "shuffle9" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx9_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle9" + top: "resx9_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx9_conv2_bn" + type: "BatchNorm" + bottom: "resx9_conv2" + top: "resx9_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx9_conv2_scale" + bottom: "resx9_conv2" + top: "resx9_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx9_conv3" + type: "Convolution" + bottom: "resx9_conv2" + top: "resx9_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx9_conv3_bn" + type: "BatchNorm" + bottom: "resx9_conv3" + top: "resx9_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx9_conv3_scale" + bottom: "resx9_conv3" + top: "resx9_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx9_elewise" + type: "Eltwise" + bottom: "resx8_elewise" + bottom: "resx9_conv3" + top: "resx9_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx9_elewise_relu" + type: "ReLU" + bottom: "resx9_elewise" + top: "resx9_elewise" +} +layer { + name: "resx10_conv1" + type: "Convolution" + bottom: "resx9_elewise" + top: "resx10_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx10_conv1_bn" + type: "BatchNorm" + bottom: "resx10_conv1" + top: "resx10_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx10_conv1_scale" + bottom: "resx10_conv1" + top: "resx10_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx10_conv1_relu" + type: "ReLU" + bottom: "resx10_conv1" + top: "resx10_conv1" +} +layer { + name: "shuffle10" + type: "ShuffleChannel" + bottom: "resx10_conv1" + top: "shuffle10" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx10_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle10" + top: "resx10_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx10_conv2_bn" + type: "BatchNorm" + bottom: "resx10_conv2" + top: "resx10_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx10_conv2_scale" + bottom: "resx10_conv2" + top: "resx10_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx10_conv3" + type: "Convolution" + bottom: "resx10_conv2" + top: "resx10_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx10_conv3_bn" + type: "BatchNorm" + bottom: "resx10_conv3" + top: "resx10_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx10_conv3_scale" + bottom: "resx10_conv3" + top: "resx10_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx10_elewise" + type: "Eltwise" + bottom: "resx9_elewise" + bottom: "resx10_conv3" + top: "resx10_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx10_elewise_relu" + type: "ReLU" + bottom: "resx10_elewise" + top: "resx10_elewise" +} +layer { + name: "resx11_conv1" + type: "Convolution" + bottom: "resx10_elewise" + top: "resx11_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx11_conv1_bn" + type: "BatchNorm" + bottom: "resx11_conv1" + top: "resx11_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx11_conv1_scale" + bottom: "resx11_conv1" + top: "resx11_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx11_conv1_relu" + type: "ReLU" + bottom: "resx11_conv1" + top: "resx11_conv1" +} +layer { + name: "shuffle11" + type: "ShuffleChannel" + bottom: "resx11_conv1" + top: "shuffle11" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx11_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle11" + top: "resx11_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx11_conv2_bn" + type: "BatchNorm" + bottom: "resx11_conv2" + top: "resx11_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx11_conv2_scale" + bottom: "resx11_conv2" + top: "resx11_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx11_conv3" + type: "Convolution" + bottom: "resx11_conv2" + top: "resx11_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx11_conv3_bn" + type: "BatchNorm" + bottom: "resx11_conv3" + top: "resx11_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx11_conv3_scale" + bottom: "resx11_conv3" + top: "resx11_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx11_elewise" + type: "Eltwise" + bottom: "resx10_elewise" + bottom: "resx11_conv3" + top: "resx11_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx11_elewise_relu" + type: "ReLU" + bottom: "resx11_elewise" + top: "resx11_elewise" +} +layer { + name: "resx12_conv1" + type: "Convolution" + bottom: "resx11_elewise" + top: "resx12_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx12_conv1_bn" + type: "BatchNorm" + bottom: "resx12_conv1" + top: "resx12_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx12_conv1_scale" + bottom: "resx12_conv1" + top: "resx12_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx12_conv1_relu" + type: "ReLU" + bottom: "resx12_conv1" + top: "resx12_conv1" +} +layer { + name: "shuffle12" + type: "ShuffleChannel" + bottom: "resx12_conv1" + top: "shuffle12" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx12_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle12" + top: "resx12_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx12_conv2_bn" + type: "BatchNorm" + bottom: "resx12_conv2" + top: "resx12_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx12_conv2_scale" + bottom: "resx12_conv2" + top: "resx12_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx12_conv3" + type: "Convolution" + bottom: "resx12_conv2" + top: "resx12_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx12_conv3_bn" + type: "BatchNorm" + bottom: "resx12_conv3" + top: "resx12_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx12_conv3_scale" + bottom: "resx12_conv3" + top: "resx12_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx12_elewise" + type: "Eltwise" + bottom: "resx11_elewise" + bottom: "resx12_conv3" + top: "resx12_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx12_elewise_relu" + type: "ReLU" + bottom: "resx12_elewise" + top: "resx12_elewise" +} +layer { + name: "resx13_match_conv" + type: "Pooling" + bottom: "resx12_elewise" + top: "resx13_match_conv" + pooling_param { + pool: AVE + kernel_size: 3 + stride: 2 + } +} +layer { + name: "resx13_conv1" + type: "Convolution" + bottom: "resx12_elewise" + top: "resx13_conv1" + convolution_param { + num_output: 120 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx13_conv1_bn" + type: "BatchNorm" + bottom: "resx13_conv1" + top: "resx13_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx13_conv1_scale" + bottom: "resx13_conv1" + top: "resx13_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx13_conv1_relu" + type: "ReLU" + bottom: "resx13_conv1" + top: "resx13_conv1" +} +layer { + name: "shuffle13" + type: "ShuffleChannel" + bottom: "resx13_conv1" + top: "shuffle13" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx13_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle13" + top: "resx13_conv2" + convolution_param { + num_output: 120 + kernel_size: 3 + stride: 2 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx13_conv2_bn" + type: "BatchNorm" + bottom: "resx13_conv2" + top: "resx13_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx13_conv2_scale" + bottom: "resx13_conv2" + top: "resx13_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx13_conv3" + type: "Convolution" + bottom: "resx13_conv2" + top: "resx13_conv3" + convolution_param { + num_output: 480 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx13_conv3_bn" + type: "BatchNorm" + bottom: "resx13_conv3" + top: "resx13_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx13_conv3_scale" + bottom: "resx13_conv3" + top: "resx13_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx13_concat" + type: "Concat" + bottom: "resx13_match_conv" + bottom: "resx13_conv3" + top: "resx13_concat" +} +layer { + name: "resx13_concat_relu" + type: "ReLU" + bottom: "resx13_concat" + top: "resx13_concat" +} +layer { + name: "resx14_conv1" + type: "Convolution" + bottom: "resx13_concat" + top: "resx14_conv1" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx14_conv1_bn" + type: "BatchNorm" + bottom: "resx14_conv1" + top: "resx14_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx14_conv1_scale" + bottom: "resx14_conv1" + top: "resx14_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx14_conv1_relu" + type: "ReLU" + bottom: "resx14_conv1" + top: "resx14_conv1" +} +layer { + name: "shuffle14" + type: "ShuffleChannel" + bottom: "resx14_conv1" + top: "shuffle14" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx14_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle14" + top: "resx14_conv2" + convolution_param { + num_output: 240 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx14_conv2_bn" + type: "BatchNorm" + bottom: "resx14_conv2" + top: "resx14_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx14_conv2_scale" + bottom: "resx14_conv2" + top: "resx14_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx14_conv3" + type: "Convolution" + bottom: "resx14_conv2" + top: "resx14_conv3" + convolution_param { + num_output: 960 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx14_conv3_bn" + type: "BatchNorm" + bottom: "resx14_conv3" + top: "resx14_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx14_conv3_scale" + bottom: "resx14_conv3" + top: "resx14_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx14_elewise" + type: "Eltwise" + bottom: "resx13_concat" + bottom: "resx14_conv3" + top: "resx14_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx14_elewise_relu" + type: "ReLU" + bottom: "resx14_elewise" + top: "resx14_elewise" +} +layer { + name: "resx15_conv1" + type: "Convolution" + bottom: "resx14_elewise" + top: "resx15_conv1" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx15_conv1_bn" + type: "BatchNorm" + bottom: "resx15_conv1" + top: "resx15_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx15_conv1_scale" + bottom: "resx15_conv1" + top: "resx15_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx15_conv1_relu" + type: "ReLU" + bottom: "resx15_conv1" + top: "resx15_conv1" +} +layer { + name: "shuffle15" + type: "ShuffleChannel" + bottom: "resx15_conv1" + top: "shuffle15" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx15_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle15" + top: "resx15_conv2" + convolution_param { + num_output: 240 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx15_conv2_bn" + type: "BatchNorm" + bottom: "resx15_conv2" + top: "resx15_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx15_conv2_scale" + bottom: "resx15_conv2" + top: "resx15_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx15_conv3" + type: "Convolution" + bottom: "resx15_conv2" + top: "resx15_conv3" + convolution_param { + num_output: 960 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx15_conv3_bn" + type: "BatchNorm" + bottom: "resx15_conv3" + top: "resx15_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx15_conv3_scale" + bottom: "resx15_conv3" + top: "resx15_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx15_elewise" + type: "Eltwise" + bottom: "resx14_elewise" + bottom: "resx15_conv3" + top: "resx15_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx15_elewise_relu" + type: "ReLU" + bottom: "resx15_elewise" + top: "resx15_elewise" +} +layer { + name: "resx16_conv1" + type: "Convolution" + bottom: "resx15_elewise" + top: "resx16_conv1" + convolution_param { + num_output: 240 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx16_conv1_bn" + type: "BatchNorm" + bottom: "resx16_conv1" + top: "resx16_conv1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx16_conv1_scale" + bottom: "resx16_conv1" + top: "resx16_conv1" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx16_conv1_relu" + type: "ReLU" + bottom: "resx16_conv1" + top: "resx16_conv1" +} +layer { + name: "shuffle16" + type: "ShuffleChannel" + bottom: "resx16_conv1" + top: "shuffle16" + shuffle_channel_param { + group: 3 + } +} +layer { + name: "resx16_conv2" + type: "ConvolutionDepthwise" + bottom: "shuffle16" + top: "resx16_conv2" + convolution_param { + num_output: 240 + kernel_size: 3 + stride: 1 + pad: 1 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx16_conv2_bn" + type: "BatchNorm" + bottom: "resx16_conv2" + top: "resx16_conv2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx16_conv2_scale" + bottom: "resx16_conv2" + top: "resx16_conv2" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx16_conv3" + type: "Convolution" + bottom: "resx16_conv2" + top: "resx16_conv3" + convolution_param { + num_output: 960 + kernel_size: 1 + stride: 1 + pad: 0 + group: 3 + bias_term: false + weight_filler { + type: "msra" + } + } +} +layer { + name: "resx16_conv3_bn" + type: "BatchNorm" + bottom: "resx16_conv3" + top: "resx16_conv3" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } +} +layer { + name: "resx16_conv3_scale" + bottom: "resx16_conv3" + top: "resx16_conv3" + type: "Scale" + scale_param { + filler { + value: 1 + } + bias_term: true + bias_filler { + value: 0 + } + } +} +layer { + name: "resx16_elewise" + type: "Eltwise" + bottom: "resx15_elewise" + bottom: "resx16_conv3" + top: "resx16_elewise" + eltwise_param { + operation: SUM + } +} +layer { + name: "resx16_elewise_relu" + type: "ReLU" + bottom: "resx16_elewise" + top: "resx16_elewise" +} +layer { + name: "pool_ave" + type: "Pooling" + bottom: "resx16_elewise" + top: "pool_ave" + pooling_param { + global_pooling : true + pool: AVE + } +} +layer { + name: "fc1000" + type: "Convolution" + bottom: "pool_ave" + top: "fc1000" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 1000 + kernel_size: 1 + weight_filler { + type: "msra" + } + bias_filler { + type: "constant" + value: 0 + } + } +} diff --git a/quickstart.html b/quickstart.html index a0ad826..84d4691 100644 --- a/quickstart.html +++ b/quickstart.html @@ -6,7 +6,7 @@ Quick Start — Netscope CNN Analyzer - + @@ -65,7 +65,7 @@

Presets

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
- ResNet-152 + ResNet-152
Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
@@ -96,6 +96,26 @@

Presets

VGG 16 Layers
Karen Simonyan, Andrew Zisserman
+
+ ShuffleNet x1 +
Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, Jian Sun
+
+
+ ResNeXt-50 (from https://github.com/cypw/ResNeXt-1) +
Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He
+
+
+ ResNeXt-101 (from https://github.com/cypw/ResNeXt-1) +
Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He
+
+
+ ResNeXt-152 (from https://github.com/cypw/ResNeXt-1) +
Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He
+
+
+ MobileNetV2 (from https://github.com/shicai/MobileNet-Caffe) +
Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen
+
diff --git a/src/analyzer.coffee b/src/analyzer.coffee index 5c46ce5..f614ab6 100644 --- a/src/analyzer.coffee +++ b/src/analyzer.coffee @@ -53,7 +53,7 @@ module.exports = #-- none d.mem.activation = d.wOut*d.hOut*d.chOut*d.batchOut - when "convolution" + when "convolution", "convolutiondepthwise" #dimensions params = n.attribs.convolution_param kernel_w = params.kernel_w ? params.kernel_size @@ -74,10 +74,15 @@ module.exports = d.hOut = Math.floor((d.hIn + 2*pad_h - kernel) / stride_h) + 1 d.chOut = numout - #computation - d.comp.macc = (kernel_w*kernel_h)*(d.wOut*d.hOut)*d.chIn*d.chOut*d.batchOut/group - #memory - d.mem.param = (kernel_w*kernel_h)*d.chIn*d.chOut/group + has_bias*d.chOut + if (layertype == "convolution") + #computation + d.comp.macc = (kernel_w*kernel_h)*(d.wOut*d.hOut)*d.chIn*d.chOut*d.batchOut/group + #memory + d.mem.param = (kernel_w*kernel_h)*d.chIn*d.chOut/group + has_bias*d.chOut + else # convolutiondepthwise + d.comp.macc = (kernel_w*kernel_h)*(d.wOut*d.hOut)*d.chIn*d.batchOut + (d.wOut*d.hOut)*d.chIn*d.chOut*d.batchOut/group + d.mem.param = (kernel_w*kernel_h)*d.chIn + has_bias*d.chIn + d.chIn*d.chOut/group + has_bias*d.chOut + d.mem.activation = (d.wOut*d.hOut)*d.chOut*d.batchOut # CACHE AND BANDWIDTH for Implementation Variants @@ -341,8 +346,8 @@ module.exports = d.mem.activation = d.wOut*d.hOut*d.chOut*d.batchOut d.mem.activation = 0 if isNaN(d.mem.activation) - # accuracy layers just pass through - when "accuracy" + # accuracy and shufflechannel layers just pass through + when "accuracy", "shufflechannel" #dimensions ## assume pass-through d.wOut = d.wIn diff --git a/src/renderer.coffee b/src/renderer.coffee index 9031bb4..97d3387 100644 --- a/src/renderer.coffee +++ b/src/renderer.coffee @@ -193,7 +193,7 @@ class Renderer if do_variants_analysis # Calculate Per-Layer Statistics areatbl = [] - for entry in detail when (entry.type == "Convolution" or entry.type == "Concat" or entry.type == "SoftmaxWithLoss" or entry.type == "innerproduct") + for entry in detail when (entry.type == "Convolution" or entry.type == "ConvolutionDepthwise" or entry.type == "Concat" or entry.type == "SoftmaxWithLoss" or entry.type == "innerproduct") # extract input dimension: dim_in = entry.dim_in?.split("x").pop() # add entry diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..09c89cc --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1486 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +JSONStream@^1.0.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.3.tgz#27b4b8fbbfeab4e71bcf551e7f27be8d952239bf" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +acorn-node@^1.2.0, acorn-node@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" + dependencies: + acorn "^5.4.1" + xtend "^4.0.1" + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.4.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.1.tgz#c9e50c3e3717cf897f1b071ceadbb543bbc0a8d4" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +astw@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" + dependencies: + acorn "^4.0.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-pack@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.8.0" + defined "^1.0.0" + safe-buffer "^5.1.1" + through2 "^2.0.0" + umd "^3.0.0" + +browser-resolve@^1.11.0, browser-resolve@^1.7.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserify@^16.1.0: + version "16.2.2" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.2.tgz#4b1f66ba0e54fa39dbc5aa4be9629142143d91b0" + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.2.0" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp "^0.5.0" + module-deps "^6.0.0" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + +buffer-from@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +cached-path-relative@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" + +chokidar@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +coffeeify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/coffeeify/-/coffeeify-3.0.1.tgz#5e2753000c50bd24c693115f33864248dd11136c" + dependencies: + convert-source-map "^1.3.0" + through2 "^2.0.0" + +coffeescript@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.3.1.tgz#a25f69c251d25805c9842e57fc94bfc453ef6aed" + +combine-source-map@^0.8.0, combine-source-map@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +convert-source-map@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +crypto-browserify@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@^2.1.2: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +deps-sort@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detective@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.1.0.tgz#7a20d89236d7b331ccea65832e7123b5551bb7cb" + dependencies: + acorn-node "^1.3.0" + defined "^1.0.0" + minimist "^1.1.1" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +events@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +function-bind@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.5, glob@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +iconv-lite@^0.4.4: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.11" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + dependencies: + source-map "~0.5.3" + +insert-module-globals@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.1.0.tgz#dbb3cea71d3a43d5a07ef0310fe5f078aa4dbf35" + dependencies: + JSONStream "^1.0.3" + combine-source-map "^0.8.0" + concat-stream "^1.6.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + path-is-absolute "^1.0.1" + process "~0.11.0" + through2 "^2.0.0" + xtend "^4.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.0, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isarray@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +jquery@>=1.2.6: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + dependencies: + jsonify "~0.0.0" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +labeled-stream-splicer@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" + dependencies: + inherits "^2.0.1" + isarray "^2.0.4" + stream-splicer "^2.0.0" + +lexical-scope@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + dependencies: + astw "^2.0.0" + +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +module-deps@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.1.0.tgz#d1e1efc481c6886269f7112c52c3236188e16479" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" + concat-stream "~1.6.0" + defined "^1.0.0" + detective "^5.0.2" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.4.0" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +needle@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +node-pre-gyp@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.0" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.1.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + +npm-packlist@^1.1.6: + version "1.1.10" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +os-browserify@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + dependencies: + shell-quote "^1.4.2" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + dependencies: + path-platform "~0.11.15" + +parse-asn1@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +path-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + +pbkdf2@^3.0.3: + version "3.0.16" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@~0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +public-encrypt@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +randomatic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +rc@^1.1.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + dependencies: + readable-stream "^2.0.2" + +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.4, resolve@^1.4.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + +rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +semver@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shell-quote@^1.4.2, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +stream-browserify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-http@^2.0.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + +syntax-error@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + dependencies: + acorn-node "^1.2.0" + +tableify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tableify/-/tableify-1.1.0.tgz#5ff11123409abc281d40ecdbd41489d3f3085936" + dependencies: + optimist "^0.6.1" + +tablesorter@2.26: + version "2.26.6" + resolved "https://registry.yarnpkg.com/tablesorter/-/tablesorter-2.26.6.tgz#28dda64c02bcdf375844e51ef7659c3183679e62" + dependencies: + jquery ">=1.2.6" + +tar@^4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +umd@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" + +url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +vm-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.0.1.tgz#a15d7762c4c48fa6bf9f3309a21340f00ed23063" + +watchify@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.0.tgz#03f1355c643955e7ab8dcbf399f624644221330f" + dependencies: + anymatch "^1.3.0" + browserify "^16.1.0" + chokidar "^1.0.0" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^2.0.0" + xtend "^4.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"