Skip to content

Commit

Permalink
Merged data_transformer/proto with train repository
Browse files Browse the repository at this point in the history
  • Loading branch information
gineshidalgo99 committed Jan 16, 2017
1 parent 77ee9e3 commit 7e5810c
Show file tree
Hide file tree
Showing 3 changed files with 2,126 additions and 12 deletions.
85 changes: 77 additions & 8 deletions include/caffe/data_transformer.hpp
Expand Up @@ -2,16 +2,14 @@
#define CAFFE_DATA_TRANSFORMER_HPP

#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;

#include <fstream>

#include "caffe/blob.hpp"
#include "caffe/common.hpp"
#include "caffe/proto/caffe.pb.h"

// CPM extra code: extra includes
#include <opencv2/opencv.hpp>

namespace caffe {

/**
Expand Down Expand Up @@ -58,10 +56,10 @@ class DataTransformer {
#ifdef USE_OPENCV
/**
* @brief Applies the transformation defined in the data layer's
* transform_param block to a vector of Mat.
* transform_param block to a vector of cv::Mat.
*
* @param mat_vector
* A vector of Mat containing the data to be transformed.
* A vector of cv::Mat containing the data to be transformed.
* @param transformed_blob
* This is destination blob. It can be part of top blob's data if
* set_cpu_data() is used. See memory_layer.cpp for an example.
Expand Down Expand Up @@ -118,7 +116,7 @@ class DataTransformer {
* It uses the first element to infer the shape of the blob.
*
* @param mat_vector
* A vector of Mat containing the data to be transformed.
* A vector of cv::Mat containing the data to be transformed.
*/
#ifdef USE_OPENCV
vector<int> InferBlobShape(const vector<cv::Mat> & mat_vector);
Expand Down Expand Up @@ -147,10 +145,81 @@ class DataTransformer {
// Tranformation parameters
TransformationParameter param_;


shared_ptr<Caffe::RNG> rng_;
Phase phase_;
Blob<Dtype> data_mean_;
vector<Dtype> mean_values_;

// CPM extra code: public and protected methods/structs/etc below
public:
void Transform_nv(const Datum& datum, Blob<Dtype>* transformed_blob, Blob<Dtype>* transformed_label_blob, int cnt); //image and label

struct AugmentSelection {
bool flip;
float degree;
cv::Size crop;
float scale;
};

struct Joints {
vector<cv::Point2f> joints;
vector<int> isVisible;
};

struct MetaData {
string dataset;
cv::Size img_size;
bool isValidation;
int numOtherPeople;
int people_index;
int annolist_index;
int write_number;
int total_write_number;
int epoch;
cv::Point2f objpos; //objpos_x(float), objpos_y (float)
float scale_self;
Joints joint_self; //(3*16)

vector<cv::Point2f> objpos_other; //length is numOtherPeople
vector<float> scale_other; //length is numOtherPeople
vector<Joints> joint_others; //length is numOtherPeople
};

void generateLabelMap(Dtype*, cv::Mat&, MetaData meta);
void visualize(cv::Mat& img, MetaData meta, AugmentSelection as);

bool augmentation_flip(cv::Mat& img, cv::Mat& img_aug, MetaData& meta);
float augmentation_rotate(cv::Mat& img_src, cv::Mat& img_aug, MetaData& meta);
float augmentation_scale(cv::Mat& img, cv::Mat& img_temp, MetaData& meta);
cv::Size augmentation_croppad(cv::Mat& img_temp, cv::Mat& img_aug, MetaData& meta);

bool augmentation_flip(cv::Mat& img, cv::Mat& img_aug, cv::Mat& mask_miss, cv::Mat& mask_all, MetaData& meta, int mode);
float augmentation_rotate(cv::Mat& img_src, cv::Mat& img_aug, cv::Mat& mask_miss, cv::Mat& mask_all, MetaData& meta, int mode);
float augmentation_scale(cv::Mat& img, cv::Mat& img_temp, cv::Mat& mask_miss, cv::Mat& mask_all, MetaData& meta, int mode);
cv::Size augmentation_croppad(cv::Mat& img_temp, cv::Mat& img_aug, cv::Mat& mask_miss, cv::Mat& mask_miss_aug, cv::Mat& mask_all, cv::Mat& mask_all_aug, MetaData& meta, int mode);

void RotatePoint(cv::Point2f& p, cv::Mat R);
bool onPlane(cv::Point p, cv::Size img_size);
void swapLeftRight(Joints& j);
void SetAugTable(int numData);

int np_in_lmdb;
int np;
bool is_table_set;
vector<vector<float> > aug_degs;
vector<vector<int> > aug_flips;

protected:
void Transform_nv(const Datum& datum, Dtype* transformed_data, Dtype* transformed_label, int cnt);
void ReadMetaData(MetaData& meta, const string& data, size_t offset3, size_t offset1);
void TransformMetaJoints(MetaData& meta);
void TransformJoints(Joints& joints);
void clahe(cv::Mat& img, int, int);
void putGaussianMaps(Dtype* entry, cv::Point2f center, int stride, int grid_x, int grid_y, float sigma);
void putVecMaps(Dtype* entryX, Dtype* entryY, cv::Mat& count, cv::Point2f centerA, cv::Point2f centerB, int stride, int grid_x, int grid_y, float sigma, int thre);
void putVecPeaks(Dtype* entryX, Dtype* entryY, cv::Mat& count, cv::Point2f centerA, cv::Point2f centerB, int stride, int grid_x, int grid_y, float sigma, int thre);
void dumpEverything(Dtype* transformed_data, Dtype* transformed_label, MetaData);
};

} // namespace caffe
Expand Down

0 comments on commit 7e5810c

Please sign in to comment.