aihot  2017-12-04 10:44:53  机器学习 |   查看评论   

   这里因为我最近工作变动的问题,没有了机器来跑一篇,也无法画下基本的网络结构图,之后我会补上。这里指的提出的是中间cccp1和ccp2(cross channel pooling)等价于1*1kernel大小的卷积层。caffe中NIN的实现如下:

 

  1.  name: "nin_imagenet"
  2.  layers {
  3.    top: "data"
  4.    top: "label"
  5.    name: "data"
  6.    type: DATA
  7.    data_param {
  8.      source: "/home/linmin/IMAGENET-LMDB/imagenet-train-lmdb"
  9.      backend: LMDB
  10.      batch_size: 64
  11.    }
  12.    transform_param {
  13.      crop_size: 224
  14.      mirror: true
  15.      mean_file: "/home/linmin/IMAGENET-LMDB/imagenet-train-mean"
  16.    }
  17.    include: { phase: TRAIN }
  18.  }
  19.  layers {
  20.    top: "data"
  21.    top: "label"
  22.    name: "data"
  23.    type: DATA
  24.    data_param {
  25.      source: "/home/linmin/IMAGENET-LMDB/imagenet-val-lmdb"
  26.      backend: LMDB
  27.      batch_size: 89
  28.    }
  29.    transform_param {
  30.      crop_size: 224
  31.      mirror: false
  32.      mean_file: "/home/linmin/IMAGENET-LMDB/imagenet-train-mean"
  33.    }
  34.    include: { phase: TEST }
  35.  }
  36.  layers {
  37.    bottom: "data"
  38.    top: "conv1"
  39.    name: "conv1"
  40.    type: CONVOLUTION
  41.    blobs_lr: 1
  42.    blobs_lr: 2
  43.    weight_decay: 1
  44.    weight_decay: 0
  45.    convolution_param {
  46.      num_output: 96
  47.      kernel_size: 11
  48.      stride: 4
  49.      weight_filler {
  50.        type: "gaussian"
  51.        mean: 0
  52.        std: 0.01
  53.      }
  54.      bias_filler {
  55.        type: "constant"
  56.        value: 0
  57.      }
  58.    }
  59.  }
  60.  layers {
  61.    bottom: "conv1"
  62.    top: "conv1"
  63.    name: "relu0"
  64.    type: RELU
  65.  }
  66.  layers {
  67.    bottom: "conv1"
  68.    top: "cccp1"
  69.    name: "cccp1"
  70.    type: CONVOLUTION
  71.    blobs_lr: 1
  72.    blobs_lr: 2
  73.    weight_decay: 1
  74.    weight_decay: 0
  75.    convolution_param {
  76.      num_output: 96
  77.      kernel_size: 1
  78.      stride: 1
  79.      weight_filler {
  80.        type: "gaussian"
  81.        mean: 0
  82.        std: 0.05
  83.      }
  84.      bias_filler {
  85.        type: "constant"
  86.        value: 0
  87.      }
  88.    }
  89.  }
  90.  layers {
  91.    bottom: "cccp1"
  92.    top: "cccp1"
  93.    name: "relu1"
  94.    type: RELU
  95.  }
  96.  layers {
  97.    bottom: "cccp1"
  98.    top: "cccp2"
  99.    name: "cccp2"
  100.    type: CONVOLUTION
  101.    blobs_lr: 1
  102.    blobs_lr: 2
  103.    weight_decay: 1
  104.    weight_decay: 0
  105.    convolution_param {
  106.      num_output: 96
  107.      kernel_size: 1
  108.      stride: 1
  109.      weight_filler {
  110.        type: "gaussian"
  111.        mean: 0
  112.        std: 0.05
  113.      }
  114.      bias_filler {
  115.        type: "constant"
  116.        value: 0
  117.      }
  118.    }
  119.  }
  120.  layers {
  121.    bottom: "cccp2"
  122.    top: "cccp2"
  123.    name: "relu2"
  124.    type: RELU
  125.  }
  126.  layers {
  127.    bottom: "cccp2"
  128.    top: "pool0"
  129.    name: "pool0"
  130.    type: POOLING
  131.    pooling_param {
  132.      pool: MAX
  133.      kernel_size: 3
  134.      stride: 2
  135.    }
  136.  }
  137.  layers {
  138.    bottom: "pool0"
  139.    top: "conv2"
  140.    name: "conv2"
  141.    type: CONVOLUTION
  142.    blobs_lr: 1
  143.    blobs_lr: 2
  144.    weight_decay: 1
  145.    weight_decay: 0
  146.    convolution_param {
  147.      num_output: 256
  148.      pad: 2
  149.      kernel_size: 5
  150.      stride: 1
  151.      weight_filler {
  152.        type: "gaussian"
  153.        mean: 0
  154.        std: 0.05
  155.      }
  156.      bias_filler {
  157.        type: "constant"
  158.        value: 0
  159.      }
  160.    }
  161.  }
  162.  layers {
  163.    bottom: "conv2"
  164.    top: "conv2"
  165.    name: "relu3"
  166.    type: RELU
  167.  }
  168.  layers {
  169.    bottom: "conv2"
  170.    top: "cccp3"
  171.    name: "cccp3"
  172.    type: CONVOLUTION
  173.    blobs_lr: 1
  174.    blobs_lr: 2
  175.    weight_decay: 1
  176.    weight_decay: 0
  177.    convolution_param {
  178.      num_output: 256
  179.      kernel_size: 1
  180.      stride: 1
  181.      weight_filler {
  182.        type: "gaussian"
  183.        mean: 0
  184.        std: 0.05
  185.      }
  186.      bias_filler {
  187.        type: "constant"
  188.        value: 0
  189.      }
  190.    }
  191.  }
  192.  layers {
  193.    bottom: "cccp3"
  194.    top: "cccp3"
  195.    name: "relu5"
  196.    type: RELU
  197.  }
  198.  layers {
  199.    bottom: "cccp3"
  200.    top: "cccp4"
  201.    name: "cccp4"
  202.    type: CONVOLUTION
  203.    blobs_lr: 1
  204.    blobs_lr: 2
  205.    weight_decay: 1
  206.    weight_decay: 0
  207.    convolution_param {
  208.      num_output: 256
  209.      kernel_size: 1
  210.      stride: 1
  211.      weight_filler {
  212.        type: "gaussian"
  213.        mean: 0
  214.        std: 0.05
  215.      }
  216.      bias_filler {
  217.        type: "constant"
  218.        value: 0
  219.      }
  220.    }
  221.  }
  222.  layers {
  223.    bottom: "cccp4"
  224.    top: "cccp4"
  225.    name: "relu6"
  226.    type: RELU
  227.  }
  228.  layers {
  229.    bottom: "cccp4"
  230.    top: "pool2"
  231.    name: "pool2"
  232.    type: POOLING
  233.    pooling_param {
  234.      pool: MAX
  235.      kernel_size: 3
  236.      stride: 2
  237.    }
  238.  }
  239.  layers {
  240.    bottom: "pool2"
  241.    top: "conv3"
  242.    name: "conv3"
  243.    type: CONVOLUTION
  244.    blobs_lr: 1
  245.    blobs_lr: 2
  246.    weight_decay: 1
  247.    weight_decay: 0
  248.    convolution_param {
  249.      num_output: 384
  250.      pad: 1
  251.      kernel_size: 3
  252.      stride: 1
  253.      weight_filler {
  254.        type: "gaussian"
  255.        mean: 0
  256.        std: 0.01
  257.      }
  258.      bias_filler {
  259.        type: "constant"
  260.        value: 0
  261.      }
  262.    }
  263.  }
  264.  layers {
  265.    bottom: "conv3"
  266.    top: "conv3"
  267.    name: "relu7"
  268.    type: RELU
  269.  }
  270.  layers {
  271.    bottom: "conv3"
  272.    top: "cccp5"
  273.    name: "cccp5"
  274.    type: CONVOLUTION
  275.    blobs_lr: 1
  276.    blobs_lr: 2
  277.    weight_decay: 1
  278.    weight_decay: 0
  279.    convolution_param {
  280.      num_output: 384
  281.      kernel_size: 1
  282.      stride: 1
  283.      weight_filler {
  284.        type: "gaussian"
  285.        mean: 0
  286.        std: 0.05
  287.      }
  288.      bias_filler {
  289.        type: "constant"
  290.        value: 0
  291.      }
  292.    }
  293.  }
  294.  layers {
  295.    bottom: "cccp5"
  296.    top: "cccp5"
  297.    name: "relu8"
  298.    type: RELU
  299.  }
  300.  layers {
  301.    bottom: "cccp5"
  302.    top: "cccp6"
  303.    name: "cccp6"
  304.    type: CONVOLUTION
  305.    blobs_lr: 1
  306.    blobs_lr: 2
  307.    weight_decay: 1
  308.    weight_decay: 0
  309.    convolution_param {
  310.      num_output: 384
  311.      kernel_size: 1
  312.      stride: 1
  313.      weight_filler {
  314.        type: "gaussian"
  315.        mean: 0
  316.        std: 0.05
  317.      }
  318.      bias_filler {
  319.        type: "constant"
  320.        value: 0
  321.      }
  322.    }
  323.  }
  324.  layers {
  325.    bottom: "cccp6"
  326.    top: "cccp6"
  327.    name: "relu9"
  328.    type: RELU
  329.  }
  330.  layers {
  331.    bottom: "cccp6"
  332.    top: "pool3"
  333.    name: "pool3"
  334.    type: POOLING
  335.    pooling_param {
  336.      pool: MAX
  337.      kernel_size: 3
  338.      stride: 2
  339.    }
  340.  }
  341.  layers {
  342.    bottom: "pool3"
  343.    top: "pool3"
  344.    name: "drop"
  345.    type: DROPOUT
  346.    dropout_param {
  347.      dropout_ratio: 0.5
  348.    }
  349.  }
  350.  layers {
  351.    bottom: "pool3"
  352.    top: "conv4"
  353.    name: "conv4-1024"
  354.    type: CONVOLUTION
  355.    blobs_lr: 1
  356.    blobs_lr: 2
  357.    weight_decay: 1
  358.    weight_decay: 0
  359.    convolution_param {
  360.      num_output: 1024
  361.      pad: 1
  362.      kernel_size: 3
  363.      stride: 1
  364.      weight_filler {
  365.        type: "gaussian"
  366.        mean: 0
  367.        std: 0.05
  368.      }
  369.      bias_filler {
  370.        type: "constant"
  371.        value: 0
  372.      }
  373.    }
  374.  }
  375.  layers {
  376.    bottom: "conv4"
  377.    top: "conv4"
  378.    name: "relu10"
  379.    type: RELU
  380.  }
  381.  layers {
  382.    bottom: "conv4"
  383.    top: "cccp7"
  384.    name: "cccp7-1024"
  385.    type: CONVOLUTION
  386.    blobs_lr: 1
  387.    blobs_lr: 2
  388.    weight_decay: 1
  389.    weight_decay: 0
  390.    convolution_param {
  391.      num_output: 1024
  392.      kernel_size: 1
  393.      stride: 1
  394.      weight_filler {
  395.        type: "gaussian"
  396.        mean: 0
  397.        std: 0.05
  398.      }
  399.      bias_filler {
  400.        type: "constant"
  401.        value: 0
  402.      }
  403.    }
  404.  }
  405.  layers {
  406.    bottom: "cccp7"
  407.    top: "cccp7"
  408.    name: "relu11"
  409.    type: RELU
  410.  }
  411.  layers {
  412.    bottom: "cccp7"
  413.    top: "cccp8"
  414.    name: "cccp8-1024"
  415.    type: CONVOLUTION
  416.    blobs_lr: 1
  417.    blobs_lr: 2
  418.    weight_decay: 1
  419.    weight_decay: 0
  420.    convolution_param {
  421.      num_output: 1000
  422.      kernel_size: 1
  423.      stride: 1
  424.      weight_filler {
  425.        type: "gaussian"
  426.        mean: 0
  427.        std: 0.01
  428.      }
  429.      bias_filler {
  430.        type: "constant"
  431.        value: 0
  432.      }
  433.    }
  434.  }
  435.  layers {
  436.    bottom: "cccp8"
  437.    top: "cccp8"
  438.    name: "relu12"
  439.    type: RELU
  440.  }
  441.  layers {
  442.    bottom: "cccp8"
  443.    top: "pool4"
  444.    name: "pool4"
  445.    type: POOLING
  446.    pooling_param {
  447.      pool: AVE
  448.      kernel_size: 6
  449.      stride: 1
  450.    }
  451.  }
  452.  layers {
  453.    name: "accuracy"
  454.    type: ACCURACY
  455.    bottom: "pool4"
  456.    bottom: "label"
  457.    top: "accuracy"
  458.    include: { phase: TEST }
  459.  }
  460.  layers {
  461.    bottom: "pool4"
  462.    bottom: "label"
  463.    name: "loss"
  464.    type: SOFTMAX_LOSS
  465.    include: { phase: TRAIN }
  466.  }

   NIN的提出其实也可以认为我们加深了网络的深度,通过加深网络深度(增加单个NIN的特征表示能力)以及将原先全连接层变为aver_pool层,大大减少了原先需要的filters数,减少了model的参数。paper中实验证明达到Alexnet相同的性能,最终model大小仅为29M。

 

  理解NIN之后,再来看GoogLeNet就不会有不明所理的感觉。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自机器学习进阶笔记之四 | 深入理解GoogLeNet

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]