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 "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,
|
||||
|
||||
Reference in New Issue
Block a user