C++提取的特征和python提取的不同?

我自己改了extract_features.cpp,使得提取的特征直接保存在txt文件里面,改动如下:
for (int d = 0; d < dim_features; ++d) {
//datum.add_floatdata_data(feature_blob_data[d]); // 这是原代码
out_feature << feature_blob_data[d] << " "; // 这是我的代码
}
out_feature << "\n";
然后提取的特征跟python提取的就有一些区别了,对比如下:

微信截图_20170707145635.jpg

差别还是很大的,而且python的精度更高,然后跑出来也是python的更好。
这是为什么呢?
已邀请:

Cedric

赞同来自: caffe

自问自答一下吧。
提取的feature不同应该是因为crop的原因,用c++提特征会进行中心crop,用Python提特征不进行crop而是直接resize,这些在Caffe源码data_transformer.cpp里面可以看到。c++提feature会进行TEST的forward过程,因此是中心crop,如果是TRAIN,则是随机crop。
if (crop_size) {
CHECK_EQ(crop_size, height);
CHECK_EQ(crop_size, width);
// We only do random crop when we do training.
if (phase_ == TRAIN) {
h_off = Rand(img_height - crop_size + 1);
w_off = Rand(img_width - crop_size + 1);
} else {
h_off = (img_height - crop_size) / 2;
w_off = (img_width - crop_size) / 2;
}
cv::Rect roi(w_off, h_off, crop_size, crop_size);
cv_cropped_img = cv_img(roi);
} else {
CHECK_EQ(img_height, height);
CHECK_EQ(img_width, width);
}

CHECK(cv_cropped_img.data);
对于Python特征比c++好那也可以理解了,因为中心crop丢掉了部分图片,也就丢掉了一些信息,而直接resize则保留了图片的整体信息。

南七骄傲 - 90后IT男

赞同来自: CatherineW

@COCO_1 python提取特征可以参考这个例子,使用python提取特征

COCO_1

赞同来自:

怎么用python提取特征呢?拜托回复,网上教程卡了求交流qq:597512150谢谢

南七骄傲 - 90后IT男

赞同来自:

没有用c++提取过特征,感觉好神奇

要回复问题请先登录注册