日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Caffe中计算图像均值的实现(cifar10)

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Caffe中计算图像均值的实现(cifar10) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在深度學習中,在進行test時經常會減去train數據集的圖像均值,這樣做的好處是:屬于數據預處理中的數據歸一化,降低數據間相似性,可以將數值調整到一個合理的范圍。

以下code是用于計算cifar10中訓練集的圖像均值:

#include "funset.hpp"
#include <string>
#include <vector>
#include <map>
#include "common.hpp"int campute_image_mean(const std::string& db_type, const std::string& db_path, std::vector<float>& image_mean)
{
#ifdef CPU_ONLYcaffe::Caffe::set_mode(caffe::Caffe::CPU);
#elsecaffe::Caffe::set_mode(caffe::Caffe::GPU);
#endif// reference: caffe/tools/compute_image_mean.cppboost::scoped_ptr<caffe::db::DB> db(caffe::db::GetDB(db_type));db->Open(db_path, caffe::db::READ);boost::scoped_ptr<caffe::db::Cursor> cursor(db->NewCursor());caffe::BlobProto sum_blob;int count = 0;// load first datumcaffe::Datum datum;datum.ParseFromString(cursor->value());caffe::DecodeDatumNative(&datum);sum_blob.set_num(1);sum_blob.set_channels(datum.channels());sum_blob.set_height(datum.height());sum_blob.set_width(datum.width());const int data_size = datum.channels() * datum.height() * datum.width();int size_in_datum = std::max<int>(datum.data().size(), datum.float_data_size());for (int i = 0; i < size_in_datum; ++i) {sum_blob.add_data(0.);}// Starting Iterationwhile (cursor->valid()) {caffe::Datum datum2;datum2.ParseFromString(cursor->value());caffe::DecodeDatumNative(&datum2);const std::string& data = datum2.data();size_in_datum = std::max<int>(datum2.data().size(), datum2.float_data_size());if (size_in_datum != data_size) {fprintf(stderr, "incorrect data field size: size_in_datum: %d, data_size: %d\n",size_in_datum, data_size);return -1;}if (data.size() != 0) {if (data.size() != size_in_datum) {fprintf(stderr, "data.size() != size_in_datum: data.size: %d, size_in_datum: %d\n",data.size(), size_in_datum);return -1;}for (int i = 0; i < size_in_datum; ++i) {sum_blob.set_data(i, sum_blob.data(i) + (uint8_t)data[i]);}} else {if (datum2.float_data_size() != size_in_datum) {fprintf(stderr, "datum.float_data_size() != size_in_datum: datum.float_data_size: %d, size_in_datum: %d",datum2.float_data_size(), size_in_datum);return -1;}for (int i = 0; i < size_in_datum; ++i) {sum_blob.set_data(i, sum_blob.data(i) + static_cast<float>(datum2.float_data(i)));}}++count;if (count % 10000 == 0) {fprintf(stderr, "Processed: %d files\n", count);}cursor->Next();}if (count % 10000 != 0) {fprintf(stderr, "Processed: %d files\n", count);}for (int i = 0; i < sum_blob.data_size(); ++i) {sum_blob.set_data(i, sum_blob.data(i) / count);}const int channels = sum_blob.channels();const int dim = sum_blob.height() * sum_blob.width();image_mean.resize(channels, 0.0);fprintf(stderr, "Number of channels: %d", channels);for (int c = 0; c < channels; ++c) {for (int i = 0; i < dim; ++i) {image_mean[c] += sum_blob.data(dim * c + i);}image_mean[c] /= dim;}fprintf(stderr, "\n");return 0;
}int cifar10_compute_image_mean()
{const std::string db_type{ "lmdb" };const std::string db_path{ "E:/GitCode/Caffe_Test/test_data/cifar10/cifar10_train_lmdb" };std::vector<float> image_mean;if (campute_image_mean(db_type, db_path, image_mean) != 0) {fprintf(stderr, "compute image mean fail\n");return -1;}fprintf(stderr, "image mean:");for (const auto& value : image_mean) {fprintf(stderr, "  %f  ", value);}fprintf(stderr, "\n");return 0;
}
執行結果如下:

GitHub:https://github.com/fengbingchun/Caffe_Test

總結

以上是生活随笔為你收集整理的Caffe中计算图像均值的实现(cifar10)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。