Show normalization rates in visualisation.
This commit is contained in:
41
src/ImageInteractionAnimation.cpp
Normal file
41
src/ImageInteractionAnimation.cpp
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/ImageInteractionAnimation.hpp
Normal file
21
src/ImageInteractionAnimation.hpp
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "ActivityAnimation.hpp"
|
#include "ActivityAnimation.hpp"
|
||||||
#include "InputLayerVisualisation.hpp"
|
#include "InputLayerVisualisation.hpp"
|
||||||
#include "PoolingLayerAnimation.hpp"
|
#include "PoolingLayerAnimation.hpp"
|
||||||
|
#include "ImageInteractionAnimation.hpp"
|
||||||
|
|
||||||
using namespace fmri;
|
using namespace fmri;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -204,10 +205,9 @@ static Animation *getNormalizingAnimation(const fmri::LayerData &prevState, cons
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
} else {
|
} 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,
|
Animation * fmri::getActivityAnimation(const fmri::LayerData &prevState, const fmri::LayerData &curState,
|
||||||
|
|||||||
Reference in New Issue
Block a user