Show normalization rates in visualisation.

This commit is contained in:
2018-03-13 14:58:49 +01:00
parent 93d4cb4df0
commit 74ecd42abe
3 changed files with 65 additions and 3 deletions

View File

@@ -0,0 +1,41 @@
#include "ImageInteractionAnimation.hpp"
#include "glutils.hpp"
#include "MultiImageVisualisation.hpp"
#include <caffe/util/math_functions.hpp>
using namespace fmri;
void ImageInteractionAnimation::draw(float step)
{
auto vertexBuffer = deltas;
caffe::caffe_scal(deltas.size(), step, vertexBuffer.data());
caffe::caffe_add(vertexBuffer.size(), vertexBuffer.data(), startingPositions.data(), vertexBuffer.data());
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
texture.bind(GL_TEXTURE_2D);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoordinates.data());
glVertexPointer(3, GL_FLOAT, 0, vertexBuffer.data());
glDrawArrays(GL_QUADS, 0, vertexBuffer.size() / 3);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
ImageInteractionAnimation::ImageInteractionAnimation(const DType *data, const std::vector<int> &shape,
const std::vector<float> &prevPositions,
const std::vector<float> &curPositions, float xDist) :
texture(loadTexture(data, shape[2], shape[1] * shape[3], shape[1])),
startingPositions(MultiImageVisualisation::getVertices(prevPositions)),
deltas(MultiImageVisualisation::getVertices(curPositions)),
textureCoordinates(MultiImageVisualisation::getTexCoords(shape[1]))
{
caffe::caffe_sub(deltas.size(), deltas.data(), startingPositions.data(), deltas.data());
for (auto i = 0u; i < deltas.size(); i += 3) {
deltas[i] = xDist;
}
}

View File

@@ -0,0 +1,21 @@
#pragma once
#include "Animation.hpp"
#include "utils.hpp"
#include "Texture.hpp"
namespace fmri
{
class ImageInteractionAnimation : public Animation
{
public:
ImageInteractionAnimation(const DType* data, const std::vector<int>& shape, const std::vector<float>& prevPositions, const std::vector<float>& curPositions, float xDist);
virtual void draw(float step);
private:
Texture texture;
std::vector<float> startingPositions;
std::vector<float> deltas;
std::vector<float> textureCoordinates;
};
}

View File

@@ -9,6 +9,7 @@
#include "ActivityAnimation.hpp"
#include "InputLayerVisualisation.hpp"
#include "PoolingLayerAnimation.hpp"
#include "ImageInteractionAnimation.hpp"
using namespace fmri;
using namespace std;
@@ -204,10 +205,9 @@ static Animation *getNormalizingAnimation(const fmri::LayerData &prevState, cons
};
});
} else {
// TODO: do something for image-like layers.
transform(scaling.begin(), scaling.end(), scaling.begin(), [](float x) { return log(x); });
return new ImageInteractionAnimation(scaling.data(), prevState.shape(), prevPositions, curPositions, -10);
}
return nullptr;
}
Animation * fmri::getActivityAnimation(const fmri::LayerData &prevState, const fmri::LayerData &curState,