]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ti-machine-learning/ti-machine-learning.git/blob - debian/ti-timl/usr/src/timl/src/common/cnn/timlCNNInputForwardPropagation.c
modified
[ti-machine-learning/ti-machine-learning.git] / debian / ti-timl / usr / src / timl / src / common / cnn / timlCNNInputForwardPropagation.c
1 /******************************************************************************/\r
2 /*!\r
3  * \file timlCNNForwardPropagation.c\r
4  */\r
5 /* Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/\r
6  *\r
7  * Redistribution and use in source and binary forms, with or without\r
8  * modification, are permitted provided that the following conditions\r
9  * are met:\r
10  *\r
11  *    Redistributions of source code must retain the above copyright\r
12  *    notice, this list of conditions and the following disclaimer.\r
13  *\r
14  *    Redistributions in binary form must reproduce the above copyright\r
15  *    notice, this list of conditions and the following disclaimer in the\r
16  *    documentation and/or other materials provided with the\r
17  *    distribution.\r
18  *\r
19  *    Neither the name of Texas Instruments Incorporated nor the names of\r
20  *    its contributors may be used to endorse or promote products derived\r
21  *    from this software without specific prior written permission.\r
22  *\r
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
27  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
33  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
34  *\r
35  ******************************************************************************/\r
36 \r
37 \r
38 /*******************************************************************************\r
39  *\r
40  * INCLUDES\r
41  *\r
42  ******************************************************************************/\r
43 \r
44 #include "../api/timl.h"\r
45 \r
46 \r
47 /******************************************************************************/\r
48 /*!\r
49  * \ingroup   cnn\r
50  * \brief     Forward propagate data to the the input layer\r
51  * \param[in] layer Layer ptr\r
52  * \param[in] data  Data ptr\r
53  * \param[in] dim   Data dimension\r
54  * \return    Error code\r
55  */\r
56 /******************************************************************************/\r
57 \r
58 int timlCNNInputForwardPropagation(timlCNNLayer *layer, float *data, int dim)\r
59 {\r
60 \r
61    int rowOffset;\r
62    int colOffset;\r
63    int deviceId;\r
64    int threadId;\r
65 \r
66    // pass through, assuming feature map has already been loaded\r
67    if (data == NULL) {\r
68       return 0;\r
69    }\r
70 \r
71    deviceId = layer->cnn->deviceId;\r
72    threadId = layer->cnn->threadId;\r
73 \r
74    // testing mode\r
75    if (layer->phase == Util_Test) {\r
76       if (layer->inputParams.testingCropType == Util_CenterCrop) {\r
77          rowOffset = (layer->inputParams.row - layer->row)/2;\r
78          colOffset = (layer->inputParams.col - layer->col)/2;\r
79       }\r
80       else { // randomCrop\r
81          rowOffset = timlUtilRandDiscreteUniformRNG(0, layer->inputParams.row - layer->row);\r
82          colOffset = timlUtilRandDiscreteUniformRNG(0, layer->inputParams.col - layer->col);\r
83       }\r
84       timlUtilTransform(layer->featureMap, layer->inputParams.inputData, data, layer->channel, layer->row, layer->col, rowOffset, colOffset, layer->inputParams.row, layer->inputParams.col, layer->inputParams.scale, layer->inputParams.mean, layer->inputParams.testingMirrorType, deviceId, threadId);\r
85    }\r
86    else { // training mode\r
87       if (layer->inputParams.trainingCropType == Util_CenterCrop) {\r
88          rowOffset = (layer->inputParams.row - layer->row)/2;\r
89          colOffset = (layer->inputParams.col - layer->col)/2;\r
90       }\r
91       else { // randomCrop\r
92          rowOffset = timlUtilRandDiscreteUniformRNG(0, layer->inputParams.row - layer->row);\r
93          colOffset = timlUtilRandDiscreteUniformRNG(0, layer->inputParams.col - layer->col);\r
94       }\r
95       timlUtilTransform(layer->featureMap, layer->inputParams.inputData, data, layer->channel, layer->row, layer->col, rowOffset, colOffset, layer->inputParams.row, layer->inputParams.col, layer->inputParams.scale, layer->inputParams.mean, layer->inputParams.testingMirrorType, deviceId, threadId);\r
96    }\r
97 \r
98    return 0;\r
99 }\r