Skip to content
This repository has been archived by the owner on Oct 1, 2020. It is now read-only.

Commit

Permalink
Fix wrong convolution parameters in ShuffleNet v1 micro-benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
Marat Dukhan committed Dec 29, 2018
1 parent 6c62fdd commit 1a950a2
Showing 1 changed file with 165 additions and 60 deletions.
225 changes: 165 additions & 60 deletions bench/convolution.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,90 +108,195 @@ static void convolution_q8(benchmark::State& state, const char* net) {
static void ShuffleNetV1G1(benchmark::internal::Benchmark* b) {
b->ArgNames({"N", "H", "W", "KH", "KW", "S", "D", "G", "GCin", "GCout"});

/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
b->Args({1, 56, 56, 1, 1, 1, 1, 1, 24, 30});
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 30, 120});
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 144, 36});
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 36, 144});
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 36, 144});
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 288, 72});
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 72, 288});
b->Args({1, 7, 7, 1, 1, 1, 1, 1, 72, 288});
b->Args({1, 7, 7, 1, 1, 1, 1, 1, 576, 144});
b->Args({1, 7, 7, 1, 1, 1, 1, 1, 144, 576});
/*********************** Conv 1 **********************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
/*************** Stage 2: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 56, 56, 1, 1, 1, 1, 1, 24, 36});
b->Args({1, 56, 56, 3, 3, 2, 1, 36, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 36, 120});
/*************** Stage 2: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 144, 36});
b->Args({1, 28, 28, 3, 3, 2, 1, 36, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 36, 144});
/*************** Stage 3: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 1, 144, 72});
b->Args({1, 28, 28, 3, 3, 2, 1, 72, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 72, 144});
/*************** Stage 3: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 288, 72});
b->Args({1, 14, 14, 3, 3, 2, 1, 72, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 72, 288});
/*************** Stage 4: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 1, 288, 144});
b->Args({1, 14, 14, 3, 3, 2, 1, 144, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 1, 144, 288});
/*************** Stage 4: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 7, 7, 1, 1, 1, 1, 1, 576, 144});
b->Args({1, 7, 7, 3, 3, 2, 1, 144, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 1, 144, 576});
}

/* ShuffleNet v1 with 2 groups */
static void ShuffleNetV1G2(benchmark::internal::Benchmark* b) {
b->ArgNames({"N", "H", "W", "KH", "KW", "S", "D", "G", "GCin", "GCout"});

/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
b->Args({1, 56, 56, 1, 1, 1, 1, 2, 12, 22});
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 22, 88});
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 100, 25});
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 25, 100});
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 25, 100});
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 200, 50});
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 50, 200});
b->Args({1, 7, 7, 1, 1, 1, 1, 2, 50, 200});
b->Args({1, 7, 7, 1, 1, 1, 1, 2, 400, 100});
b->Args({1, 7, 7, 1, 1, 1, 1, 2, 100, 400});
/*********************** Conv 1 **********************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
/*************** Stage 2: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 56, 56, 1, 1, 1, 1, 1, 24, 50});
b->Args({1, 56, 56, 3, 3, 2, 1, 50, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 25, 88});
/*************** Stage 2: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 100, 25});
b->Args({1, 28, 28, 3, 3, 2, 1, 50, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 25, 100});
/*************** Stage 3: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 2, 100, 50});
b->Args({1, 28, 28, 3, 3, 2, 1, 100, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 50, 100});
/*************** Stage 3: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 200, 50});
b->Args({1, 14, 14, 3, 3, 2, 1, 100, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 50, 200});
/*************** Stage 4: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 2, 200, 100});
b->Args({1, 14, 14, 3, 3, 2, 1, 200, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 2, 100, 200});
/*************** Stage 4: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 7, 7, 1, 1, 1, 1, 2, 400, 100});
b->Args({1, 7, 7, 3, 3, 2, 1, 200, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 2, 100, 400});
}

/* ShuffleNet v1 with 3 groups */
static void ShuffleNetV1G3(benchmark::internal::Benchmark* b) {
b->ArgNames({"N", "H", "W", "KH", "KW", "S", "D", "G", "GCin", "GCout"});

/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
b->Args({1, 56, 56, 1, 1, 1, 1, 3, 8, 18});
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 18, 72});
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 80, 20});
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 20, 80});
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 20, 80});
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 160, 40});
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 40, 160});
b->Args({1, 7, 7, 1, 1, 1, 1, 3, 40, 160});
b->Args({1, 7, 7, 1, 1, 1, 1, 3, 320, 80});
b->Args({1, 7, 7, 1, 1, 1, 1, 3, 80, 320});
/*********************** Conv 1 **********************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
/*************** Stage 2: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 56, 56, 1, 1, 1, 1, 1, 24, 60});
b->Args({1, 56, 56, 3, 3, 2, 1, 60, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 20, 72});
/*************** Stage 2: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 80, 20});
b->Args({1, 28, 28, 3, 3, 2, 1, 60, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 20, 80});
/*************** Stage 3: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 3, 80, 40});
b->Args({1, 28, 28, 3, 3, 2, 1, 120, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 40, 80});
/*************** Stage 3: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 160, 40});
b->Args({1, 14, 14, 3, 3, 2, 1, 120, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 40, 160});
/*************** Stage 4: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 3, 160, 80});
b->Args({1, 14, 14, 3, 3, 2, 1, 240, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 3, 80, 160});
/*************** Stage 4: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 7, 7, 1, 1, 1, 1, 3, 320, 80});
b->Args({1, 7, 7, 3, 3, 2, 1, 240, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 3, 80, 320});
}

/* ShuffleNet v1 with 4 groups */
static void ShuffleNetV1G4(benchmark::internal::Benchmark* b) {
b->ArgNames({"N", "H", "W", "KH", "KW", "S", "D", "G", "GCin", "GCout"});

/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
b->Args({1, 56, 56, 1, 1, 1, 1, 4, 6, 15});
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 15, 62});
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 68, 17});
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 17, 68});
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 17, 68});
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 136, 34});
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 34, 136});
b->Args({1, 7, 7, 1, 1, 1, 1, 4, 34, 136});
b->Args({1, 7, 7, 1, 1, 1, 1, 4, 272, 68});
b->Args({1, 7, 7, 1, 1, 1, 1, 4, 68, 272});
/*********************** Conv 1 **********************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
/*************** Stage 2: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 56, 56, 1, 1, 1, 1, 1, 24, 68});
b->Args({1, 56, 56, 3, 3, 2, 1, 68, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 17, 62});
/*************** Stage 2: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 68, 17});
b->Args({1, 28, 28, 3, 3, 2, 1, 68, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 17, 68});
/*************** Stage 3: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 4, 68, 34});
b->Args({1, 28, 28, 3, 3, 2, 1, 136, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 34, 68});
/*************** Stage 3: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 136, 34});
b->Args({1, 14, 14, 3, 3, 2, 1, 136, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 34, 136});
/*************** Stage 4: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 4, 136, 68});
b->Args({1, 14, 14, 3, 3, 2, 1, 272, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 4, 68, 136});
/*************** Stage 4: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 7, 7, 1, 1, 1, 1, 4, 272, 68});
b->Args({1, 7, 7, 3, 3, 2, 1, 272, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 4, 68, 272});
}

/* ShuffleNet v1 with 8 groups */
static void ShuffleNetV1G8(benchmark::internal::Benchmark* b) {
b->ArgNames({"N", "H", "W", "KH", "KW", "S", "D", "G", "GCin", "GCout"});

/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
b->Args({1, 56, 56, 1, 1, 1, 1, 8, 3, 11});
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 11, 45});
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 48, 12});
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 12, 48});
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 12, 48});
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 96, 24});
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 24, 96});
b->Args({1, 7, 7, 1, 1, 1, 1, 8, 24, 96});
b->Args({1, 7, 7, 1, 1, 1, 1, 8, 192, 48});
b->Args({1, 7, 7, 1, 1, 1, 1, 8, 48, 192});
/*********************** Conv 1 **********************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 224, 224, 3, 3, 2, 1, 1, 3, 24});
/*************** Stage 2: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 56, 56, 1, 1, 1, 1, 1, 24, 96});
b->Args({1, 56, 56, 3, 3, 2, 1, 96, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 12, 45});
/*************** Stage 2: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 48, 12});
b->Args({1, 28, 28, 3, 3, 2, 1, 96, 1, 1});
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 12, 48});
/*************** Stage 3: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 28, 28, 1, 1, 1, 1, 8, 48, 24});
b->Args({1, 28, 28, 3, 3, 2, 1, 192, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 24, 48});
/*************** Stage 3: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 96, 24});
b->Args({1, 14, 14, 3, 3, 2, 1, 192, 1, 1});
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 24, 96});
/*************** Stage 4: stride-2 unit **************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 14, 14, 1, 1, 1, 1, 8, 96, 48});
b->Args({1, 14, 14, 3, 3, 2, 1, 384, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 8, 48, 96});
/*************** Stage 4: stride-1 units *************/
/* N H W KH KW S D G GCin GCout */
b->Args({1, 7, 7, 1, 1, 1, 1, 8, 192, 48});
b->Args({1, 7, 7, 3, 3, 2, 1, 384, 1, 1});
b->Args({1, 7, 7, 1, 1, 1, 1, 8, 48, 192});
}

static void MobileNetV1(benchmark::internal::Benchmark* b) {
Expand Down

0 comments on commit 1a950a2

Please sign in to comment.