int NumSequenceMatches(const TransformationParameter transform_param, const Datum& datum, Phase phase) { // Get crop sequence with Caffe seed 1701. DataTransformer<Dtype> transformer(transform_param, phase); const int crop_size = transform_param.crop_size(); Caffe::set_random_seed(seed_); transformer.InitRand(); Blob<Dtype> blob(1, datum.channels(), datum.height(), datum.width()); if (transform_param.crop_size() > 0) { blob.Reshape(1, datum.channels(), crop_size, crop_size); } vector<vector<Dtype> > crop_sequence; for (int iter = 0; iter < this->num_iter_; ++iter) { vector<Dtype> iter_crop_sequence; transformer.Transform(datum, &blob); for (int j = 0; j < blob.count(); ++j) { iter_crop_sequence.push_back(blob.cpu_data()[j]); } crop_sequence.push_back(iter_crop_sequence); } // Check if the sequence differs from the previous int num_sequence_matches = 0; for (int iter = 0; iter < this->num_iter_; ++iter) { vector<Dtype> iter_crop_sequence = crop_sequence[iter]; transformer.Transform(datum, &blob); for (int j = 0; j < blob.count(); ++j) { num_sequence_matches += (crop_sequence[iter][j] == blob.cpu_data()[j]); } } return num_sequence_matches; }