[ti-machine-learning/ti-machine-learning.git] / src / common / util / timlUtilLocalContrastNormalize.c
diff --git a/src/common/util/timlUtilLocalContrastNormalize.c b/src/common/util/timlUtilLocalContrastNormalize.c
index fdee5d298f7b8d2bb4b7c078d1d916ad4df13d01..1b14aa895b17199ed047f4466e9ca8ccb492c691 100644 (file)
******************************************************************************/
#include "../api/timl.h"
-#ifdef TIML_ALT
+#ifdef TIML_CPU_ALT
#include "../../alt/timlAlt.h"
+#elif defined TIML_ARM_DSP
+#include "../../dsp/timlDSP.h"
#endif
* \param[in] row Input feature map row
* \param[in] col Input feature map col
* \param[in] channel Input feature map channel
+ * \param[in] batchSize Input feature map batchSize
* \param[in] N Channel span
* \param[in] alpha Alpha
* \param[in] beta Beta
*/
/******************************************************************************/
-int timlUtilLocalContrastNormalize(float *inputMap, float *outputMap, float *denom, int row, int col, int channel, int N, float alpha, float beta, int deviceId, int threadId)
+int timlUtilLocalContrastNormalize(float *inputMap, float *outputMap, float *denom, int row, int col, int channel, int batchSize, int N, float alpha, float beta, int deviceId, int threadId)
{
-#ifdef TIML_CPU
+#ifdef TIML_CPU_ALT
+ return timlUtilLocalContrastNormalizeAlt(inputMap, outputMap, denom, row, col, channel, batchSize, N, alpha, beta, deviceId, threadId);
+#else
int channelStartIndex;
int channelEndIndex;
int i;
int j;
int p;
+ int b;
float sum;
+ for (b = 0; b < batchSize; b++) {
+ for (p = 0; p < row*col; p++) {
+ // for each channel
+ for (i = 0; i < channel; i++) {
+ if (i - N/2 < 0) {
+ channelStartIndex = 0;
+ }
+ else {
+ channelStartIndex = i - N/2;
+ }
+ if (i + N/2 > channel - 1) {
+ channelEndIndex = channel - 1;
+ }
+ else {
+ channelEndIndex = i + N/2;
+ }
+ sum = 0.0; // sum(p) = sum(prev feature map{j}(p))
- for (p = 0; p < row*col; p++) {
- // for each channel
- for (i = 0; i < channel; i++) {
- if (i - N/2 < 0) {
- channelStartIndex = 0;
+ // inter-channel
+ for (j = channelStartIndex; j <= channelEndIndex; j++) {
+ sum += inputMap[b*row*col*channel + j*row*col + p]*inputMap[b*row*col*channel + j*row*col + p];
+ }
+ denom[b*row*col*channel + i*row*col + p] += sum*alpha/N;
+ outputMap[b*row*col*channel + i*row*col + p] = inputMap[b*row*col*channel + i*row*col + p]/powf(denom[b*row*col*channel + i*row*col + p], beta);
}
- else {
- channelStartIndex = i - N/2;
- }
- if (i + N/2 > channel - 1) {
- channelEndIndex = channel - 1;
- }
- else {
- channelEndIndex = i + N/2;
- }
- sum = 0.0; // sum(p) = sum(prev feature map{j}(p))
-
- // inter-channel
- for (j = channelStartIndex; j <= channelEndIndex; j++) {
- sum += inputMap[j*row*col + p]*inputMap[j*row*col + p];
- }
- denom[i*row*col + p] += sum*alpha/N;
- outputMap[i*row*col + p] = inputMap[i*row*col + p]/powf(denom[i*row*col + p], beta);
}
}
-
return 0;
-#elif defined TIML_ALT
- return timlUtilLocalContrastNormalizeAlt(inputMap, outputMap, denom, row, col, channel, N, alpha, beta, deviceId, threadId);
#endif
}