рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╡рд░реНрдгрди рдореЗрд░реЗ рдЖрдЦрд┐рд░реА
рд▓реЗрдЦ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдореЗрдВ TF (Tensorflow) рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдХрдЯ рдХреЗ рддрд╣рдд, TF рдХреЗ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛, рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ ... рдирд┐рд╖реНрдХрд░реНрд╖ред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ред
рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ResNet рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред
рдпрд╣рд╛рдБ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

рдХреЛрдб рдХреЛрдИ рд╕рд░рд▓ рдирд╣реАрдВ рдерд╛ рдФрд░ рдЕрдЬрдЧрд░ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдерд╛ред
рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП C ++ рдХреЛрдб:auto net = sn::Net(); net.addNode("In", sn::Input(), "conv1") .addNode("conv1", sn::Convolution(64, 7, 3, 2, sn::batchNormType::beforeActive, sn::active::none, mode), "pool1_pad") .addNode("pool1_pad", sn::Pooling(3, 2, sn::poolType::max, mode), "res2a_branch1 res2a_branch2a"); convBlock(net, vector<uint32_t>{ 64, 64, 256 }, 3, 1, "res2a_branch", "res2b_branch2a res2b_branchSum", mode); idntBlock(net, vector<uint32_t>{ 64, 64, 256 }, 3, "res2b_branch", "res2c_branch2a res2c_branchSum", mode); idntBlock(net, vector<uint32_t>{ 64, 64, 256}, 3, "res2c_branch", "res3a_branch1 res3a_branch2a", mode); convBlock(net, vector<uint32_t>{ 128, 128, 512 }, 3, 2, "res3a_branch", "res3b_branch2a res3b_branchSum", mode); idntBlock(net, vector<uint32_t>{ 128, 128, 512 }, 3, "res3b_branch", "res3c_branch2a res3c_branchSum", mode); idntBlock(net, vector<uint32_t>{ 128, 128, 512 }, 3, "res3c_branch", "res3d_branch2a res3d_branchSum", mode); idntBlock(net, vector<uint32_t>{ 128, 128, 512 }, 3, "res3d_branch", "res4a_branch1 res4a_branch2a", mode); convBlock(net, vector<uint32_t>{ 256, 256, 1024 }, 3, 2, "res4a_branch", "res4b_branch2a res4b_branchSum", mode); idntBlock(net, vector<uint32_t>{ 256, 256, 1024 }, 3, "res4b_branch", "res4c_branch2a res4c_branchSum", mode); idntBlock(net, vector<uint32_t>{ 256, 256, 1024 }, 3, "res4c_branch", "res4d_branch2a res4d_branchSum", mode); idntBlock(net, vector<uint32_t>{ 256, 256, 1024 }, 3, "res4d_branch", "res4e_branch2a res4e_branchSum", mode); idntBlock(net, vector<uint32_t>{ 256, 256, 1024 }, 3, "res4e_branch", "res4f_branch2a res4f_branchSum", mode); idntBlock(net, vector<uint32_t>{ 256, 256, 1024 }, 3, "res4f_branch", "res5a_branch1 res5a_branch2a", mode); convBlock(net, vector<uint32_t>{ 512, 512, 2048 }, 3, 2, "res5a_branch", "res5b_branch2a res5b_branchSum", mode); idntBlock(net, vector<uint32_t>{ 512, 512, 2048 }, 3, "res5b_branch", "res5c_branch2a res5c_branchSum", mode); idntBlock(net, vector<uint32_t>{ 512, 512, 2048 }, 3, "res5c_branch", "avg_pool", mode); net.addNode("avg_pool", sn::Pooling(7, 7, sn::poolType::avg, mode), "fc1000") .addNode("fc1000", sn::FullyConnected(1000, sn::active::none, mode), "LS") .addNode("LS", sn::LossFunction(sn::lossType::softMaxToCrossEntropy), "Output");
тЖТ рдкреВрд░рд╛ рдХреЛрдб
рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз
рд╣реИрдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рд╡реЗрдЯ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
рдЗрд╕ рддрд░рд╣: string archPath = "c:/cpp/other/skyNet/example/resnet50/resNet50Struct.json", weightPath = "c:/cpp/other/skyNet/example/resnet50/resNet50Weights.dat"; std::ifstream ifs; ifs.open(archPath, std::ifstream::in); if (!ifs.good()){ cout << "error open file : " + archPath << endl; system("pause"); return false; } ifs.seekg(0, ifs.end); size_t length = ifs.tellg(); ifs.seekg(0, ifs.beg); string jnArch; jnArch.resize(length); ifs.read((char*)jnArch.data(), length);
рдмреНрдпрд╛рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХрд┐рдпрд╛ред рдЖрдк
рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред рдиреЗрдЯрд╡рд░реНрдХ рд╡реЗрдЯ рдХреЗ рдХрд╛рд░рдг рд╡реЙрд▓реНрдпреВрдо рдмрдбрд╝рд╛ рд╣реИред рд╕реНрд░реЛрдд рд╣реИрдВ, рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдм, рдЯреАрдПрдл рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖред
рдФрд╕рддрди, 100 рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрдХреЗрддред рдорд╢реАрди: i5-2400, GF1050, Win7, MSVC12ред
рдорд╛рдиреНрдпрддрд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдорд╛рди 3 рд╡рд░реНрдг рддрдХ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред
тЖТ
рдЯреЗрд╕реНрдЯ рдХреЛрдбрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдВрджрдиреАрдп рд╣реИред
рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдордХреЗрдПрд▓-рдбреАрдПрдирдПрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛: рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЛ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛, рд╡реЗрдХреНрдЯрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЕрдзрд┐рдХрддрдо рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛, рдФрд░ / рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рд╣реИрдХ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрд╣рд╛рдВ рдЖрд░рд╛рдо рдХрд┐рдпрд╛, рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдмрджрддрд░ рдерд╛, рдПрдордХреЗрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛ред
GPU рдкрд░, рд╕рдордп рдХреЛ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреА рдореЗрдореЛрд░реА рд╕реЗ / рддрдХ рдореЗрдореЛрд░реА рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдСрдкрд░реЗрд╢рди GPU рдкрд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рд╛рд░реЗ рдЙрдкрджреНрд░рд╡ рд╕реЗ рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░рд╕рд┐рджреНрдз рд╕рд┐рджреНрдз рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдХрд░рдиреЗ рдХрд╛ рдорди рдмрдирд╛ рдЪреБрдХреЗ рд╣реИрдВред рд╡рд╣ рдЦреБрдж рдПрдХ рдмрд╛рд░ mxnet рдкрд░ рдмреИрдареЗ, рдФрд░ рджреЗрд╢реА рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдиреАрдЪреЗ;
- рдПрдордПрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдореВрд▓ рд╕реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛, рд╡рд╣ рд╣реИ, рдЕрдЬрдЧрд░ред
рдЕрдкрдиреА рднрд╛рд╖рд╛ рд╕реЗ рдПрдордПрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрдЬрдЧрд░ рдкрд░ рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдирд╛ рдФрд░ рд╕реЙрдХреЗрдЯ рдкрд░ рдЗрд╕реЗ рдЪрд┐рддреНрд░ рднреЗрдЬрдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдФрд░ рднрд╛рд░реА рдХреЛрдб рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИред
рд╢рд╛рдпрдж рд╕рдм рдХреБрдЫред рд▓реЗрдЦ рдЫреЛрдЯрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдХрд░реНрд╖, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдореВрд▓реНрдпрд╡рд╛рди рд╣реИрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рдПрдордПрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж
рдкреБрдирд╢реНрдЪ:
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЯреАрдПрдл рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдФрд░ рддрд╛рдХрдд рд╣реИ, рддреЛ
рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ ! "
рдкреАрдПрд╕ 2:
рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рдЬрд▓реНрджреА рдиреАрдЪреЗ рдЙрддрд╛рд░рд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдзреВрдореНрд░рдкрд╛рди рд╡рд┐рд░рд╛рдо рд▓рд┐рдпрд╛, рдлрд┐рд░ рд╕реЗ рд▓рд┐рдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ред
рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдорд┐рд▓реА, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ред
рдЬреАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд╛рдж рдореЗрдВ рдЪреБрдирд╛, рддрд╛рдХрд┐ рд╕реАрдкреАрдпреВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЙрдкреА рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╢реВрдиреНрдп рдпрд╣ рдерд╛ рдХрд┐ рдореБрдЭреЗ рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ (рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛) рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдореЗрд▓ рдЦрд╛рддреА рдереАрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдм рдпрд╣рд╛рдБ рдХреИрд╕реЗ:
рдпрд╣реА рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрдВрдлреЗрдХреНрд╢рди рддреЛ рдЯреАрдПрдл рдкрд░ рднреА рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓рд╛ред
рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред