此层通过继承实现了ssd网络训练加载训练数据的常规操作
class SSDMyDataLayer : public SSDDataLayer{
public:
SETUP_LAYERFUNC(SSDMyDataLayer);
SSDMyDataLayer(){
this->datum_ = createAnnDatum();
this->label_map_ = loadLabelMap("lable.txt");
paFindFiles("img", vfs_, "*.png");
random_shuffle(vfs_.begin(), vfs_.end());
}
virtual ~SSDMyDataLayer(){
releaseAnnDatum(this->datum_);
}
virtual int getBatchCacheSize(){
return 3;
}
virtual void* getAnnDatum(){
if (vfs_.size()==0)
{
printf("没有数据.\n");
exit(-1);
}
string path=vfs_[i_].substr(0,vfs_[i_].find("."));
printf((path + ".png" + "\n").c_str());
printf((path + ".xml" + "\n").c_str());
if (!loadAnnDatum((path + ".png").c_str(), (path + ".xml").c_str(), 0, 0, 0, 0, true, "png", "xml", this->label_map_, this->datum_)) {
printf("无法加载.\n");
//exit(-1);
}
if (i_>= vfs_.size()-1)
{
random_shuffle(vfs_.begin(), vfs_.end());
i_ = 0;
printf("从0开始");
}
else {
i_++;
}
return this->datum_;
}
virtual void releaseAnnDatum(void* datum){
}
private:
PaVfiles vfs_;
void* datum_;
int i_;
void* label_map_;
};