// ------------------------------------------------------------------
// MS-CNN
// Copyright (c) 2016 The Regents of the University of California
// see mscnn/LICENSE for details
// Written by Zhaowei Cai [zwcai-at-ucsd.edu]
// Please email me if you find bugs, or have suggestions or questions!
// ------------------------------------------------------------------
#ifndef CAFFE_IMAGE_GT_DATA_LAYER_HPP_
#define CAFFE_IMAGE_GT_DATA_LAYER_HPP_
#include <string>
#include <utility>
#include <vector>
#include "caffe/blob.hpp"
#include "caffe/data_transformer.hpp"
#include "caffe/internal_thread.hpp"
#include "caffe/layer.hpp"
#include "caffe/layers/base_data_layer.hpp"
#include "caffe/proto/caffe.pb.h"
namespace caffe {
template <typename Dtype>
class ImageGtDataLayer : public BasePrefetchingDataLayer<Dtype> {
//public继承BasePrefetchingDataLayer类,后者继承自BaseDataLayer和InternalThread,包含能够读取一批数据的能力
public:
//与类同名的构造函数,调用父类BasePrefetchingDataLayer的构造函数,使用初始化列表(param)来初始化层参数。explicit的主要用法就是放在单参数的构造函数中,防止隐式转换。
//调用父类构造函数的语法为,在子类的构造函数后,加一个冒号(:),然后加上父类的带参数的构造函数,后可接派生类的参数初始化表。
explicit ImageGtDataLayer(const LayerParameter& param)
: BasePrefetchingDataLayer<Dtype>(param) {}
//类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
//用来做基类的类的析构函数一般都是虚函数,这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
virtual ~ImageGtDataLayer();
virtual void DataLayerSetUp(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top);
virtual inline const char* type() const { return "ImageGtData"; }
virtual inline int ExactNumBottomBlobs() const { return 0; }
virtual inline int ExactNumTopBlobs() const { return -1; }
virtual inline int MinTopBlobs() const { return 2; }
void BoundingboxAffine(vector<vector<float> >& bbs,
float w_scale, float h_scale, float w_shift, float h_shift);
protected:
virtual unsigned int PrefetchRand();
virtual void load_batch(Batch<Dtype>* batch);
virtual void ShuffleList();
//智能指针shared_ptr
//RNG类是caffe中对Boost以及STL中随机数函数的封装,以方便使用。
shared_ptr<Caffe::RNG> prefetch_rng_;
vector<std::pair<std::string, vector<int> > > image_database_;
enum ImageGtField { X1, Y1, X2, Y2, LABEL, IGNORE, NUM };
vector<vector<vector<float> > > windows_;
vector<vector<vector<float> > > roni_windows_;
vector<Dtype> mean_values_;
bool has_mean_values_;
bool cache_images_;
vector<std::pair<std::string, Datum > > image_database_cache_;
vector<int> downsample_rates_;
vector<int> field_ws_;
vector<int> field_hs_;
int label_channel_;
int label_blob_num_;
vector<int> image_list_;
int list_id_;
bool output_gt_boxes_;
};
} // namespace caffe
#endif // CAFFE_IMAGE_GT_DATA_LAYER_HPP_
MSCNN代码解读之mscnn/include/caffe/layers/image_gt_data_layer.hpp
最新推荐文章于 2024-12-31 07:30:00 发布