MyCaffe  1.12.2.41
Deep learning software for Windows C# programmers.
ResNetOctConvModelBuilder.cs
1using MyCaffe.basecode;
2using MyCaffe.param;
3using System;
4using System.Collections.Generic;
5using System.Linq;
6using System.Text;
7using System.Threading.Tasks;
8
9namespace MyCaffe.model
10{
19 {
20 int m_nGpuID = 0;
21 List<int> m_rgGpuID = new List<int>();
22 int m_nBatchSize;
23 int m_nIterSize;
24 double m_dfBaseLr;
25 int m_nTestIter = 100;
26 string m_strTrainDataSource;
27 string m_strTestDataSource;
28 TransformationParameter m_transformTrain = null;
29 TransformationParameter m_transformTest = null;
30 string m_strModel;
31 MODEL m_model = MODEL.RESNET26;
32 string m_strDataset;
33 List<Tuple<int, bool>> m_rgIpLayers;
34 int m_nInplanes = 64;
35 int m_nGroups = 1;
36 int m_nBaseWidth = 64;
37 int m_nExpansion = 4;
38
42 public enum MODEL
43 {
47 RESNET26
48 }
49
60 public ResNetOctConvModelBuilder(string strBaseDirectory, string strDataset, List<Tuple<int, bool>> rgIpLayers, MODEL model, int nBatchSize = 32, List<int> rgGpuId = null, NetParameter net = null)
61 : base(strBaseDirectory, net)
62 {
63 if (rgGpuId == null)
64 m_rgGpuID.Add(0);
65 else
66 m_rgGpuID = new List<int>(rgGpuId);
67
68 m_rgIpLayers = rgIpLayers;
69 m_model = model;
70 m_strModel = model.ToString();
71 m_nBatchSize = nBatchSize;
72
73 m_nIterSize = 1;
74 m_nGpuID = m_rgGpuID[0];
75 m_dfBaseLr = 0.001;
76
77 m_strDataset = strDataset;
78
79 //-------------------------------------------------------
80 // Create the transformer for Training.
81 //-------------------------------------------------------
82 m_transformTrain = new TransformationParameter();
83 m_transformTrain.mirror = true;
84 m_transformTrain.color_order = TransformationParameter.COLOR_ORDER.BGR; // to support caffe models.
85 m_transformTrain.mean_value = new List<double>();
86 m_transformTrain.mean_value.Add(104);
87 m_transformTrain.mean_value.Add(117);
88 m_transformTrain.mean_value.Add(123);
89
90 //-------------------------------------------------------
91 // Create the transformer for Testing.
92 //-------------------------------------------------------
93 m_transformTest = new TransformationParameter();
94 m_transformTest.color_order = TransformationParameter.COLOR_ORDER.BGR; // to support caffe models.
95 m_transformTest.mean_value = new List<double>();
96 m_transformTest.mean_value.Add(104);
97 m_transformTest.mean_value.Add(117);
98 m_transformTest.mean_value.Add(123);
99 }
100
105 {
106 return CreateModel(true);
107 }
108
113 public override NetParameter CreateModel(bool bDeploy = false)
114 {
115 LayerParameter lastLayer = null;
116 LayerParameter data = null;
117
118 m_strTrainDataSource = m_strDataset + ".training";
119 m_strTestDataSource = m_strDataset + ".testing";
120
121 m_net = createNet(m_strModel);
122
123 string strDataName = "data";
124 bool bNamedParams = false;
125
126 if (!bDeploy)
127 addDataLayer(m_strTrainDataSource, Phase.TRAIN, m_nBatchSize, true, m_transformTrain, strDataName);
128 data = addDataLayer(m_strTestDataSource, Phase.TEST, m_nBatchSize, true, m_transformTest, strDataName);
129
130 lastLayer = addBody(bDeploy, strDataName, bNamedParams);
131 LayerParameter output1 = lastLayer;
132
133 if (!bDeploy)
134 {
135 LayerParameter loss = new LayerParameter(LayerParameter.LayerType.SOFTMAXWITH_LOSS);
136 loss.name = "loss";
137 loss.include.Add(new NetStateRule(Phase.TRAIN));
138 loss.top.Add(loss.name);
139 connectAndAddLayer(lastLayer, loss);
140 loss.bottom.Add(data.top[1]);
141 }
142
144 softmax.name = "softmax";
145 softmax.softmax_param.axis = 1;
146 softmax.include.Add(new NetStateRule(Phase.TEST));
147 softmax.include.Add(new NetStateRule(Phase.RUN));
148 softmax.top.Add(softmax.name);
149 lastLayer = connectAndAddLayer(lastLayer, softmax);
150
151 if (!bDeploy)
152 {
153 LayerParameter accuracy = new LayerParameter(LayerParameter.LayerType.ACCURACY);
154 accuracy.name = "accuracy";
155 accuracy.include.Add(new NetStateRule(Phase.TEST));
156 accuracy.top.Add(accuracy.name);
157 connectAndAddLayer(lastLayer, accuracy);
158 accuracy.bottom.Add(data.top[1]);
159 }
160
161 return m_net;
162 }
163
164 private LayerParameter addBody(bool bDeploy, string strDataName, bool bNamedParams = false, string strLayerPostfix = "", Phase phaseExclude = Phase.NONE)
165 {
166 LayerParameter lastLayer;
167
168 switch (m_model)
169 {
170 case MODEL.RESNET26:
171 lastLayer = addResNetOctConvBody(strDataName, new int[] { 2, 2, 2, 2 });
172 break;
173
174 default:
175 throw new Exception("The model type '" + m_model.ToString() + "' is not supported.");
176 }
177
178 for (int i = 0; i < m_rgIpLayers.Count; i++)
179 {
181 string strName = "fc" + (i + 1).ToString();
182 ip.name = strName + strLayerPostfix;
184 ip.inner_product_param.num_output = (uint)m_rgIpLayers[i].Item1;
185 ip.inner_product_param.enable_noise = m_rgIpLayers[i].Item2;
186 ip.top.Add(ip.name);
187 ip.parameters.Add(new ParamSpec(1, 1, (bNamedParams) ? strName + "_w" : null));
188 ip.parameters.Add(new ParamSpec(1, 2, (bNamedParams) ? strName + "_b" : null));
189 addExclusion(ip, phaseExclude);
190 lastLayer = connectAndAddLayer(lastLayer, ip);
191 }
192
193 return lastLayer;
194 }
195
196 private LayerParameter addResNetOctConvBody(string strDataName, int[] rgBlocks, bool bNamedParams = false, string strLayerPostfix = "", Phase phaseExclude = Phase.NONE)
197 {
198 string strConvPrefix = "";
199 string strConvPostfix = "";
200 string strBnPrefix = "bn_";
201 string strBnPostfix = "";
202 string strScalePrefix = "scale_";
203 string strScalePostfix = "";
204
205 LayerParameter lastLayer = addConvBNLayer(strDataName, "conv1", true, true, m_nInplanes, 7, 3, 2, 1, 1, SCALE_BIAS.NONE, strConvPrefix, strConvPostfix, strBnPrefix, strBnPostfix, strScalePrefix, strScalePostfix, "", "_bias", bNamedParams, strLayerPostfix, phaseExclude);
206
207 LayerParameter pool = createPooling("pool1" + strLayerPostfix, PoolingParameter.PoolingMethod.MAX, 3, 1, 2);
208 addExclusion(pool, phaseExclude);
209 lastLayer = connectAndAddLayer(lastLayer, pool);
210
211 lastLayer = make_layer(lastLayer, 1, 64, rgBlocks[0], 1, true, false);
212 lastLayer = make_layer(lastLayer, 2, 128, rgBlocks[1], 2, false, false);
213 lastLayer = make_layer(lastLayer, 3, 256, rgBlocks[2], 2, false, false);
214 lastLayer = make_layer(lastLayer, 4, 512, rgBlocks[3], 2, false, true);
215
216 pool = createPooling("pool2" + strLayerPostfix, PoolingParameter.PoolingMethod.AVE, 3, 1, 2);
217 addExclusion(pool, phaseExclude);
218 lastLayer = connectAndAddLayer(lastLayer, pool);
219
221 string strName = "fc1";
222 ip.name = strName + strLayerPostfix;
224 ip.inner_product_param.num_output = (uint)(512 * m_nExpansion);
225 ip.top.Add(ip.name);
226 ip.parameters.Add(new ParamSpec(1, 1, (bNamedParams) ? strName + "_w" : null));
227 ip.parameters.Add(new ParamSpec(1, 2, (bNamedParams) ? strName + "_b" : null));
228 addExclusion(ip, phaseExclude);
229 lastLayer = connectAndAddLayer(lastLayer, ip);
230
231 return lastLayer;
232 }
233
234 private LayerParameter make_layer(LayerParameter lastLayer, int nIdx, int nPlanes, int nBlocks, int nStride, bool bInput, bool bOutput)
235 {
236 int nBlockIdx = 1;
237 lastLayer = addBlock(lastLayer, nIdx, ref nBlockIdx, nPlanes, nStride, bInput, bOutput);
238
239 for (int i = 0; i < nBlocks; i++)
240 {
241 lastLayer = addBlock(lastLayer, nIdx, ref nBlockIdx, nPlanes, nStride, bInput, bOutput);
242 }
243
244 return lastLayer;
245 }
246
247 private LayerParameter addBlock(LayerParameter lastLayer, int nIdx, ref int nBlockIdx, int nPlanes, int nStride, bool bInput, bool bOutput)
248 {
249 double dfAlphaIn = (bInput) ? 0.0 : 0.5;
250 double dfAlphaOut = 0.5;
251
252 int nWidth = (int)(nPlanes * (m_nBaseWidth / 64.0)) * m_nGroups;
253
254 string strName = "conv1_" + nIdx.ToString() + "_" + nBlockIdx.ToString();
255 lastLayer = addOctConvBNLayer(lastLayer.name, strName, nWidth, 1, 0, 1, (bInput) ? 0 : dfAlphaIn, dfAlphaOut);
256
257 dfAlphaIn = 0.5;
258
259 strName = "conv2_" + nIdx.ToString() + "_" + nBlockIdx.ToString();
260 lastLayer = addOctConvBNLayer(lastLayer.name, strName, nWidth, 3, 0, 1, dfAlphaIn, dfAlphaOut);
261
262 dfAlphaOut = (bOutput) ? 0.0 : 0.5;
263
264 strName = "conv3_" + nIdx.ToString() + "_" + nBlockIdx.ToString();
265 lastLayer = addOctConvBNLayer(lastLayer.name, strName, nPlanes * m_nExpansion, 1, 0, 1, dfAlphaIn, dfAlphaOut);
266
267 if (nStride != 1 || m_nInplanes != nPlanes * m_nExpansion)
268 {
269 strName = "ds_" + nIdx.ToString() + "_" + nBlockIdx.ToString();
270 lastLayer = addOctConvBNLayer(lastLayer.name, strName, nPlanes * m_nExpansion, 1, 0, nStride, dfAlphaIn, dfAlphaOut);
271 }
272
273 nBlockIdx++;
274
275 return lastLayer;
276 }
277
297 protected LayerParameter addOctConvBNLayer(string strInputLayer, string strOutputLayer, int nNumOutput, int nKernelSize, int nPad, int nStride, double dfAlphaIn, double dfAlphaOut, bool bUseBias = true, string strConvPrefix = "", string strConvPostfix = "", string strBnPrefix = "", string strBnPostfix = "_bn", string strLayerPostfix = "", Phase phaseExclude = Phase.NONE)
298 {
299 double dfLrMult = 1;
300 bool bNamedParams = false;
301
302 LayerParameter lastLayer1;
303 string strName = strConvPrefix + strOutputLayer + strConvPostfix;
304
305 LayerParameter.LayerType type = LayerParameter.LayerType.CONVOLUTION_OCTAVE;
306 LayerParameter convLayer = new LayerParameter(type);
307 convLayer.convolution_param.weight_filler = new FillerParameter("xavier");
308 convLayer.convolution_param.bias_filler = new FillerParameter("constant", 0);
309 convLayer.convolution_param.bias_term = bUseBias;
310 convLayer.name = strName + strLayerPostfix;
311 convLayer.convolution_param.kernel_size.Add((uint)nKernelSize);
312 convLayer.convolution_param.pad.Add((uint)nPad);
313 convLayer.convolution_param.stride.Add((uint)nStride);
314 convLayer.convolution_param.dilation.Add((uint)1);
315 convLayer.convolution_param.num_output = (uint)nNumOutput;
316 convLayer.top.Add(convLayer.name);
317
318 convLayer.convolution_octave_param.alpha_in = dfAlphaIn;
319 convLayer.convolution_octave_param.alpha_out = dfAlphaOut;
320
321 if (dfAlphaOut > 0)
322 convLayer.top.Add(convLayer.name + "_l");
323
324 addExclusion(convLayer, phaseExclude);
325
326 // Setup the BachNorm Layer
327 convLayer.parameters.Add(new ParamSpec(dfLrMult, 1.0, (bNamedParams) ? strName + "_w" : null));
328 convLayer.convolution_param.weight_filler = new FillerParameter("gaussian", 0, 0, 0.01);
329 convLayer.convolution_param.bias_term = false;
330
331 LayerParameter bnLayer = new LayerParameter(LayerParameter.LayerType.BATCHNORM);
332 strName = strBnPrefix + strOutputLayer + strBnPostfix;
333 bnLayer.name = strName + strLayerPostfix;
334 bnLayer.batch_norm_param.eps = 0.001;
336 bnLayer.batch_norm_param.use_global_stats = false;
337 bnLayer.parameters.Add(new ParamSpec(0.0, 0.0, (bNamedParams) ? strName + "_w1" : null));
338 bnLayer.parameters.Add(new ParamSpec(0.0, 0.0, (bNamedParams) ? strName + "_w2" : null));
339 bnLayer.parameters.Add(new ParamSpec(0.0, 0.0, (bNamedParams) ? strName + "_w3" : null));
340 bnLayer.top.Add(bnLayer.name);
341 addExclusion(bnLayer, phaseExclude);
342
343 string strInputLayer2 = null;
344 if (dfAlphaIn > 0)
345 strInputLayer2 = strInputLayer + "_l";
346
347 lastLayer1 = connectAndAddLayer(strInputLayer, convLayer, strInputLayer2);
348 lastLayer1 = connectAndAddLayer(lastLayer1, bnLayer, true, true);
349
351 reluLayer.name = convLayer.name + "_relu";
352 addExclusion(reluLayer, phaseExclude);
353 lastLayer1 = connectAndAddLayer(lastLayer1, reluLayer, true, true);
354
355 if (dfAlphaOut > 0)
356 {
357 bnLayer = new LayerParameter(LayerParameter.LayerType.BATCHNORM);
358 strName = strBnPrefix + strOutputLayer + strBnPostfix;
359 bnLayer.name = strName + strLayerPostfix + "_l";
360 bnLayer.batch_norm_param.eps = 0.001;
362 bnLayer.batch_norm_param.use_global_stats = false;
363 bnLayer.parameters.Add(new ParamSpec(0.0, 0.0, (bNamedParams) ? strName + "_w1" : null));
364 bnLayer.parameters.Add(new ParamSpec(0.0, 0.0, (bNamedParams) ? strName + "_w2" : null));
365 bnLayer.parameters.Add(new ParamSpec(0.0, 0.0, (bNamedParams) ? strName + "_w3" : null));
366 bnLayer.top.Add(bnLayer.name + "_l");
367 addExclusion(bnLayer, phaseExclude);
368
369 LayerParameter lastLayer2 = connectAndAddLayer(convLayer, bnLayer, true, true, 1);
370
371 reluLayer = new LayerParameter(LayerParameter.LayerType.RELU);
372 reluLayer.name = convLayer.name + "_relu_l";
373 addExclusion(reluLayer, phaseExclude);
374 connectAndAddLayer(lastLayer2, reluLayer, true, true);
375 }
376
377 return convLayer;
378 }
379
380
388 {
391 m_solver.base_lr = m_dfBaseLr;
392 m_solver.weight_decay = 0.0005;
394 m_solver.stepvalue = new List<int>() { 80000, 100000, 120000 };
395 m_solver.gamma = 0.1;
396 m_solver.momentum = 0.9;
397 m_solver.iter_size = m_nIterSize;
398 m_solver.max_iter = 120000;
399 m_solver.snapshot = 80000;
400 m_solver.display = 10;
402 m_solver.device_id = m_nGpuID;
403 m_solver.debug_info = false;
406
407 // Test parameters.
408 m_solver.test_iter.Add(m_nTestIter);
409 m_solver.test_interval = 10000;
412
413 return m_solver;
414 }
415
422 protected override LayerParameter addExtraLayers(bool bUseBatchNorm = true, double dfLrMult = 1)
423 {
424 return m_net.layer[m_net.layer.Count - 1];
425 }
426 }
427}
The ModelBuilder is an abstract class that is overridden by a base class used to programically build ...
Definition: ModelBuilder.cs:19
SolverParameter m_solver
Specifies the base solver to use.
Definition: ModelBuilder.cs:31
void addExclusion(LayerParameter p, Phase phase)
Add a phase exclusion.
SCALE_BIAS
Defines the scale bias type to use.
Definition: ModelBuilder.cs:37
NetParameter m_net
Specifies the base net to be altered.
Definition: ModelBuilder.cs:27
LayerParameter createPooling(string strName, PoolingParameter.PoolingMethod method, int nKernelSize, int nPad=0, int nStride=1)
Create a new pooling layer parameter.
LayerParameter addConvBNLayer(string strInputLayer, string strOutputLayer, bool bUseBatchNorm, bool bUseRelU, int nNumOutput, int nKernelSize, int nPad, int nStride, double dfLrMult=1.0, int nDilation=1, SCALE_BIAS useScale=SCALE_BIAS.SCALE, string strConvPrefix="", string strConvPostfix="", string strBnPrefix="", string strBnPostfix="_bn", string strScalePrefix="", string strScalePostFix="_scale", string strBiasPrefix="", string strBiasPostfix="_bias", bool bNamedParams=false, string strLayerPostfix="", Phase phaseExclude=Phase.NONE)
Add convolution, batch-norm layers.
NetParameter createNet(string strName)
Create the base network parameter for the model and set its name to the 'm_strModel' name.
LayerParameter addDataLayer(string strSource, Phase phase, int nBatchSize=32, bool bOutputLabel=true, TransformationParameter transform=null, string strName="data", bool bSiamese=false)
Add the Data layer.
LayerParameter connectAndAddLayer(string fromLayer, LayerParameter toLayer, string fromLayer2=null)
Connect the from layer to the 'to' layer.
The ResNetOctConvModelBuilder is used to build Octave Convolution based RESNET models.
MODEL
Defines the type of model to create.
override NetParameter CreateDeployModel()
Create the deploy model.
ResNetOctConvModelBuilder(string strBaseDirectory, string strDataset, List< Tuple< int, bool > > rgIpLayers, MODEL model, int nBatchSize=32, List< int > rgGpuId=null, NetParameter net=null)
The constructor.
override SolverParameter CreateSolver()
Create the base solver to use.
override NetParameter CreateModel(bool bDeploy=false)
Create the training model.
override LayerParameter addExtraLayers(bool bUseBatchNorm=true, double dfLrMult=1)
Add an extra layer.
LayerParameter addOctConvBNLayer(string strInputLayer, string strOutputLayer, int nNumOutput, int nKernelSize, int nPad, int nStride, double dfAlphaIn, double dfAlphaOut, bool bUseBias=true, string strConvPrefix="", string strConvPostfix="", string strBnPrefix="", string strBnPostfix="_bn", string strLayerPostfix="", Phase phaseExclude=Phase.NONE)
Add octave convolution, batch-norm layers.
double eps
Specifies a small value to add to the variance estimate so that we don't divide by zero.
double moving_average_fraction
Specifies how much the moving average decays each iteration. Smaller values make the moving average d...
bool? use_global_stats
If false, normalization is performed over the current mini-batch and global statistics are accumulate...
double alpha_out
Specifies alpha applied to the output channels.
double alpha_in
Specifies alpha applied to the input channels.
FillerParameter weight_filler
The filler for the weight. The default is set to use the 'xavier' filler.
FillerParameter bias_filler
The filler for the bias. The default is set to use the 'constant = 0.1' filler.
bool bias_term
Whether to have bias terms or not.
uint num_output
The number of outputs for the layer.
Specifies the filler parameters used to create each Filler.
int axis
Specifies the first axis to be lumped into a single inner product computation; all preceding axes are...
bool enable_noise
Enable/disable noise in the inner-product layer (default = false).
uint num_output
The number of outputs for the layer.
List< uint > kernel_size
Kernel size is given as a single value for equal dimensions in all spatial dimensions,...
List< uint > dilation
Factor used to dilate the kernel, (implicitly) zero-filling the resulting holes. (Kernel dilation is ...
List< uint > stride
Stride is given as a single value for equal dimensions in all spatial dimensions, or once per spatial...
List< uint > pad
Pad is given as a single value for equal dimensions in all spatial dimensions, or once per spatial di...
Specifies the base parameter for all layers.
ConvolutionParameter convolution_param
Returns the parameter set when initialized with LayerType.CONVOLUTION
List< ParamSpec > parameters
Specifies the ParamSpec parameters of the LayerParameter.
string name
Specifies the name of this LayerParameter.
SoftmaxParameter softmax_param
Returns the parameter set when initialized with LayerType.SOFTMAX
List< NetStateRule > include
Specifies the NetStateRule's for which this LayerParameter should be included.
List< string > top
Specifies the active top connections (in the bottom, out the top)
InnerProductParameter inner_product_param
Returns the parameter set when initialized with LayerType.INNERPRODUCT
ConvolutionOctaveParameter convolution_octave_param
Returns the parameter set when initialized with LayerType.CONVOLUTION_OCTAVE
BatchNormParameter batch_norm_param
Returns the parameter set when initialized with LayerType.BATCHNORM
List< string > bottom
Specifies the active bottom connections (in the bottom, out the top).
LayerType
Specifies the layer type.
override string ToString()
Returns a string representation of the LayerParameter.
Specifies the parameters use to create a Net
Definition: NetParameter.cs:18
List< LayerParameter > layer
The layers that make up the net. Each of their configurations, including connectivity and behavior,...
Specifies a NetStateRule used to determine whether a Net falls within a given include or exclude patt...
Definition: NetStateRule.cs:20
Specifies training parameters (multipliers on global learning constants, and the name of other settin...
Definition: ParamSpec.cs:19
Specifies the parameters for the PoolingLayer.
PoolingMethod
Defines the pooling method.
int axis
The axis along which to perform the softmax – may be negative to index from the end (e....
The SolverParameter is a parameter for the solver, specifying the train and test networks.
int max_iter
The maximum number of iterations.
List< int > test_iter
The number of iterations for each test.
bool debug_info
If true, print information about the state of the net that may help with debugging learning problems.
LearningRatePolicyType
Defines the learning rate policy to use.
SolverType
Defines the type of solver.
LearningRatePolicyType LearningRatePolicy
The learning rate decay policy.
int device_id
The device id that will be used when run on the GPU.
int average_loss
Display the loss averaged over the last average_loss iterations.
int test_interval
The number of iterations between two testing phases.
int iter_size
Accumulate gradients over 'iter_size' x 'batch_size' instances.
EvaluationType
Defines the evaluation method used in the SSD algorithm.
double gamma
Specifies the 'gamma' parameter to compute the 'step', 'exp', 'inv', and 'sigmoid' learning policy (d...
bool snapshot_after_train
If false, don't save a snapshot after training finishes.
EvaluationType eval_type
Specifies the evaluation type to use when using Single-Shot Detection (SSD) - (default = NONE,...
bool test_initialization
If true, run an initial test pass before the first iteration, ensuring memory availability and printi...
int display
The number of iterations between displaying info. If display = 0, no info will be displayed.
double weight_decay
Specifies the weight decay (default = 0.0005).
List< int > stepvalue
The step values for learning rate policy 'multistep'.
double momentum
Specifies the momentum value - used by all solvers EXCEPT the 'AdaGrad' and 'RMSProp' solvers....
int snapshot
Specifies the snapshot interval.
double base_lr
The base learning rate (default = 0.01).
SolverType type
Specifies the solver type.
double clip_gradients
Set clip_gradients to >= 0 to clip parameter gradients to that L2 norm, whenever their actual L2 norm...
Stores parameters used to apply transformation to the data layer's data.
COLOR_ORDER
Defines the color ordering used to tranform the input data.
List< double > mean_value
If specified can be repeated once (would subtract it from all the channels or can be repeated the sam...
bool mirror
Specify if we want to randomly mirror the data.
COLOR_ORDER color_order
Specifies the color ordering to use. Native Caffe models often uses COLOR_ORDER.BGR,...
The MyCaffe.basecode contains all generic types used throughout MyCaffe.
Definition: Annotation.cs:12
Phase
Defines the Phase under which to run a Net.
Definition: Interfaces.cs:61
The MyCaffe.model namespace contains all classes used to programically create new model scripts.
Definition: ModelBuilder.cs:14
The MyCaffe.param namespace contains parameters used to create models.
The MyCaffe namespace contains the main body of MyCaffe code that closesly tracks the C++ Caffe open-...
Definition: Annotation.cs:12