最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

怎么用C++提取任意一張圖片的特征(從內(nèi)存讀取數(shù)據(jù))

 更新時間:2017年05月02日 10:56:53   作者:WHLOOK  
這篇文章主要介紹了用C++提取任意一張圖片的特征(從內(nèi)存讀取數(shù)據(jù))的相關(guān)資料,需要的朋友可以參考下

  關(guān)于使用C++接口來提取特征,caffe官方提供了一個extract_features.cpp的例程,但是這個文件的輸入是blob數(shù)據(jù),即使輸入層使用的是ImageData,也需要在deploy.prototxt中指定圖片的位置,很不方便。

如果想要使用opencv來讀取一個圖片,然后用caffe訓練好的model提取特征,就需要對輸入層進行改寫。另外官方例程默認的輸出是leveldb格式,我們也可以獲取float類型的多維特征(數(shù)組),這樣集成到我們的項目中更靈活。

01

  首先我們需要改寫deploy.prototxt的輸入層為"MemoryData":

layer {
 name: "data"
 type: "MemoryData"
 top: "data"
 top: "label"
 memory_data_param{
 batch_size:1
 channels:3
 height:100
 width:100
 }
}

  在之前的訓練中可能使用的是"ImageData"、"Data"之類的,現(xiàn)在改成MemoryData不影響。

02

  我準備提取的層的名字是"res5_6",就是"InnerProduct"的前一層,當我想提取"InnerProduct"全連接層的輸出時,總是報錯,提示原始參數(shù)和網(wǎng)絡參數(shù)不匹配(就是訓練好的model和現(xiàn)在deploy的網(wǎng)絡維度不一樣),所以只好提取前一層了,并且要把全連接層屏蔽掉,屏蔽的方法是把prototxt里相應層的名字改掉就好(相對于caffemodel里面的名字)。[以上問題暫時還沒解決,留坑]

03

  下面是更改之后的 extract_features.cpp的代碼:

#include <stdio.h> 
#include <string>
#include <vector>
#include <iostream>
#include <opencv2/opencv.hpp>
#include "boost/algorithm/string.hpp"
#include "google/protobuf/text_format.h"
#include "caffe/blob.hpp"
#include "caffe/common.hpp"
#include "caffe/net.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/util/io.hpp"
#include "caffe/layers/memory_data_layer.hpp"
#define NetTy float 
using namespace caffe;
using std::cout;
using std::endl;
using std::string;
/* 加載模型函數(shù) */
template <typename Dtype>
caffe::Net<Dtype>* loadNet(std::string param_file, std::string pretrained_param_file, caffe::Phase phase)
{
 caffe::Net<Dtype>* net(new caffe::Net<Dtype>(param_file, phase));
 net->CopyTrainedLayersFrom(pretrained_param_file);
 return net;
}
int main()
{
 cv::Mat src;
 src = cv::imread("face_example/test.jpg"); // 讀取測試圖片
 cv::resize(src, src, cv::Size(100, 100)); // 這里要將圖片resize到prototxt里面的輸入層指定的大小
 caffe::Net<NetTy>* _net = loadNet<NetTy>("face_example/face_deploy.prototxt", "face_example/face.caffemodel", caffe::TEST); // 加載網(wǎng)絡定義文件和參數(shù)模型
 caffe::MemoryDataLayer<NetTy> *m_layer = (caffe::MemoryDataLayer<NetTy> *)_net->layers()[0].get(); // 定義個內(nèi)存數(shù)據(jù)層指針
 std::vector<cv::Mat> dv = { src }; // AddMatVector(const vector<cv::Mat>& mat_vector,const vector<int>& labels)
 std::vector<int> label = { 0 }; // -------------------------------------------------------------------------
 m_layer->AddMatVector(dv, label); // 把圖片和標簽,添加到 MemoryData層
 std::vector<caffe::Blob<NetTy>*> input_vec; // 無意義,為了函數(shù)參數(shù)需要
 _net->Forward(input_vec);     // 執(zhí)行一次前向計算
 boost::shared_ptr<caffe::Blob<NetTy>> layerData = _net->blob_by_name("res5_6"); // 獲得指定層的輸出
 const NetTy* pstart = layerData->cpu_data(); // res5_6->cpu_data()返回的是多維數(shù)據(jù)(數(shù)組)
 /*-----輸出特征-----*/
 for (int i = 0; i < 30000; i++)
 {
  std::cout << *pstart << endl;
  pstart++;
 }
 return 0;
}

以上所述是小編給大家介紹的怎么用C++提取任意一張圖片的特征(從內(nèi)存讀取數(shù)據(jù)),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • linux c模擬ls命令詳解

    linux c模擬ls命令詳解

    本篇文章是對linux中基于c模擬ls命令的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C語言報錯:Undefined Reference的產(chǎn)生原因和解決方案

    C語言報錯:Undefined Reference的產(chǎn)生原因和解決方案

    Undefined Reference(未定義引用)是C語言編譯過程中常見的錯誤之一,通常在鏈接階段出現(xiàn),本文將詳細介紹Undefined Reference的產(chǎn)生原因,提供多種解決方案,并通過實例代碼演示如何有效避免和解決此類錯誤,需要的朋友可以參考下
    2024-06-06
  • 在Visual Studio使用C++開發(fā)Metro應用

    在Visual Studio使用C++開發(fā)Metro應用

    這篇文章主要介紹了在Visual Studio使用C++開發(fā)Metro應用的示例,盡管只是一個Hello world,但可以體現(xiàn)出VS下為開發(fā)者提供的方便,需要的朋友可以參考下
    2015-07-07
  • C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法

    C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法

    這篇文章主要介紹了C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C語言三個數(shù)排列大小的實現(xiàn)方法

    C語言三個數(shù)排列大小的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢語言三個數(shù)排列大小的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • C++深入探究繼承的概念與使用

    C++深入探究繼承的概念與使用

    繼承是C++面向?qū)ο缶幊讨械囊婚T。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對父類的允許訪問的方法實行的過程進行重新編寫,返回值和形參都不能改變。就是對原本的父類進行重新編寫,但是外部接口不能被重寫
    2022-05-05
  • C語言實例之雙向鏈表增刪改查

    C語言實例之雙向鏈表增刪改查

    雙向鏈表(Doubly Linked List)是一種常見的數(shù)據(jù)結(jié)構(gòu),在單鏈表的基礎(chǔ)上增加了向前遍歷的功能,與單向鏈表不同,雙向鏈表的每個節(jié)點除了包含指向下一個節(jié)點的指針外,還包含指向前一個節(jié)點的指針,本文給大家介紹了C語言中雙向鏈表的增刪改查
    2023-08-08
  • 基于C語言實現(xiàn)五子棋游戲完整實例代碼

    基于C語言實現(xiàn)五子棋游戲完整實例代碼

    這篇文章主要介紹了基于C語言實現(xiàn)五子棋游戲完整實例代碼,相信對于學習游戲開發(fā)的朋友會有一定的幫助與借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C語言實現(xiàn)俄羅斯方塊源代碼

    C語言實現(xiàn)俄羅斯方塊源代碼

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)俄羅斯方塊的源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C++模擬實現(xiàn)string的示例代碼

    C++模擬實現(xiàn)string的示例代碼

    這篇文章主要為大家詳細介紹了C++模擬實現(xiàn)string的相關(guān)資料,文中的示例代碼講解詳細,對我們學習C++有一定的幫助,需要的可以參考一下
    2022-11-11

最新評論

海阳市| 郧西县| 巩留县| 洛南县| 天台县| 尉犁县| 游戏| 古蔺县| 淮安市| 淮安市| 黎川县| 玛沁县| 亚东县| 武清区| 老河口市| 正宁县| 都匀市| 乐亭县| 额尔古纳市| 大兴区| 大余县| 鹰潭市| 温泉县| 五大连池市| 虞城县| 宣武区| 赤水市| 安远县| 东明县| 桐柏县| 团风县| 陆川县| 林甸县| 桂东县| 贵州省| 容城县| 巴彦淖尔市| 兴山县| 盐亭县| 德清县| 阳西县|