1. 程式人生 > >300W資料集測試MTCNN的landmark效果程式碼

300W資料集測試MTCNN的landmark效果程式碼

300W資料集測試MTCNN的landmark效果,用提取其中afw資料集337張圖片的預測關鍵點並寫入到txt中,再用測試程式和標註landmark做對比。

處理得到的預測landmark格式如下: 1051618982(圖片名) 1(landmark個數) 543 267 643 268 594 322 542 359 643 360 111076519 2 1095 624 1161 635 1125 668 1084 696 1146 706 1172 764 1238 767 1211 806 1168 830 1233 833 1130084326

程式如下:

  1. #include "network.h"
  2. #include "mtcnn.h"
  3. #include <time.h>
  4. #include <fstream>
  5. #include <opencv2/opencv.hpp>
  6. #pragma comment(lib, "libopenblas.dll.a")
  7. using namespace cv;  
  8. std::vector<std::string> split(std::string& str, std::string& pattern);  
  9. void str2int(int &int_temp, const string &string_temp);  
  10. int main()  
  11. {  
  12.     //因為執行目錄被設定到openblas/x64下了,保證dll能正常載入,這時候圖片路徑就相對要提上去2級  
  13.     //Mat im = imread("../../test10.jpg");  
  14.     int i = 0;  
  15.     string img_dir = "E:/face_alignment/data/300W_test_5points/afw/";  
  16.     string name, s="_";  
  17.     ifstream infile;  
  18.     ofstream outfile;  
  19.     infile.open("E:/face_alignment/data/300W_test_5points/afw_mtcnn_test_V2_2.txt"
    );  
  20.     outfile.open("E:/face_alignment/data/300W_test_5points/MTCNN_V2_2_test/afw_test.txt");  
  21.     while (infile)  
  22.     {  
  23.         infile >> name;  
  24.         vector<string> result = split(name, s);  
  25.         cout << i << endl;  
  26.         i++;  
  27.         //cout << "name: " << result[0] << " s: " << result[1] << endl;  
  28.         string shot_name = result[0];  
  29.         int decide;  
  30.         str2int(decide, result[1]);  
  31.         if (decide == 1)  
  32.         {  
  33.             string image_name = name + ".jpg";  
  34.             outfile << shot_name  << endl;  
  35.             string image_name_dir = img_dir + image_name;  
  36.             cout << image_name_dir << endl;  
  37.             Mat im = imread(image_name_dir);  
  38.             vector<vector<Point2f>> key_points;  
  39.             mtcnn find(im.cols, im.rows);  
  40.             vector<Rect> objs = find.detectObject(im, key_points);  
  41.             //outfile << objs.size() << endl;  
  42.             for (int i = 0; i < objs.size(); ++i)  
  43.             {  
  44.                 rectangle(im, objs[i], Scalar(0255), 2);  
  45.                 //outfile << objs[i].x << " " << objs[i].y << " " << objs[i].width << " " << objs[i].height << endl;  
  46.             }  
  47.             //cout << "num of key_points: " << key_points.size() << endl;  
  48.             outfile << key_points.size() << endl;  
  49.             for (int i = 0; i < key_points.size(); i++)  
  50.             {  
  51.                 for (int j = 0; j < key_points[i].size(); j++)  
  52.                 {  
  53.                     cv::circle(im, key_points[i][j], 1, cv::Scalar(2552550), 2);  
  54.                     outfile << key_points[i][j].x << " " << key_points[i][j].y << " ";  
  55.                 }  
  56.                 outfile << endl;  
  57.             }  
  58.             string outdir = "E:/face_alignment/data/300W_test_5points/MTCNN_V2_2_test/afw/";  
  59.             string out_image = outdir + shot_name + ".jpg";  
  60.             imwrite(out_image, im);  
  61.             //imshow("demo", im);  
  62.             //waitKey(0);  
  63.         }  
  64.     }  
  65.     infile.close();  
  66.     outfile.close();  
  67.     return0;  
  68. }  
  69. //字串分割函式     
  70. std::vector<std::string> split(std::string& str, std::string& pattern)  
  71. {  
  72.     std::string::size_type pos;  
  73.     std::vector<std::string> result;  
  74.     //str += pattern;//擴充套件字串以方便操作       
  75.     int size = str.size();  
  76.     pos = str.find(pattern, 0);  
  77.     if (pos<size) {  
  78.         std::string s1 = str.substr(0, pos);  
  79.         std::string s2 = str.substr(pos + 1, size - 1);  
  80.         result.push_back(s1);  
  81.         result.push_back(s2);  
  82.     }  
  83.     return result;  
  84. }  
  85. void str2int(int &int_temp, const string &string_temp)  
  86. {  
  87.     stringstream stream(string_temp);  
  88.     stream >> int_temp;  
  89. }  

用我們自己得到的預測txt,與作者提供的標註pts檔案進行計算。  算5個landmark的歐式距離之和,除以左上角和右下角歐式距離,除以5。
  1. #include <iostream>  
  2. #include <stdlib.h>  
  3. #include <fstream>  
  4. #include <sstream>  
  5. #include <string>  
  6. #include <vector>  
  7. #include <opencv2/opencv.hpp>    
  8. using namespace cv;  
  9. using namespace std;  
  10. std::vector<std::string> split(std::string& str, std::string& pattern);  
  11. void str2int(int &int_temp, const string &string_temp);  
  12. float computer_error(vector<float> pts_gt, vector<vector<float>> pts_pre);  
  13. int main()  
  14. {  
  15.     int count = 0, pos = 0;  
  16.     float acc, thread=0.1;  
  17.     string name_list, s = "_";  
  18.     string pts_dir = "E:/face_alignment/data/300W_test_5points/afw/";  
  19.     ifstream infile_list, infile_pre;  
  20.     infile_list.open("E:/face_alignment/data/300W_test_5points/afw_mtcnn_test_V1.txt");  
  21.     infile_pre.open("E:/face_alignment/data/300W_test_5points/MTCNN_V1_test/afw_test.txt");  
  22.     infile_list >> name_list;  
  23.     while (infile_pre)  
  24.     {  
  25.         string name_pre;  
  26.         int num_pre;  
  27.         vector<vector<float> > pts_pre;  
  28.         infile_pre >> name_pre;  
  29.         infile_pre >> num_pre;  
  30.         pts_pre.resize(num_pre);  
  31.         for (int i = 0; i < num_pre; i++)  
  32.         {  
  33.             pts_pre[i].resize(10);  
  34.         }  
  35.         for (int j = 0; j < num_pre; j++)  
  36.         {  
  37.             infile_pre >> pts_pre[j][0] >> pts_pre[j][1] >> pts_pre[j][2] >> pts_pre[j][3] >> pts_pre[j][4] >> pts_pre[j][5] >> pts_pre[j][6] >> pts_pre[j][7] >> pts_pre[j][8] >> pts_pre[j][9];  
  38.         }  
  39.         //for (int i = 0; i < num_pre; i++)  
  40.         //{  
  41.         //  for (int j = 0; j < 10; j++)  
  42.         //  {  
  43.         //      cout << pts_pre[i][j] << " ";  
  44.         //  }  
  45.         //  cout << endl;  
  46.         //}  
  47.         // read gt file  
  48.         while (infile_list)  
  49.         {  
  50.             vector<string> result = split(name_list, s);  
  51.             string name_gt = result[0];  
  52.             if (name_gt.compare(name_pre) == 0)  
  53.             {  
  54.                 count++;  
  55.                 cout << count << endl;  
  56.                 vector<float> pts_gt;  
  57.                 pts_gt.resize(10);  
  58.                 string pts_dir_name = pts_dir + name_list + ".pts";  
  59.                 ifstream infile_pts;  
  60.                 infile_pts.open(pts_dir_name);  
  61.                 string ss;  
  62.                 int yy;  
  63.                 infile_pts >> ss >> yy;  
  64.                 infile_pts >> ss >> yy;  
  65.                 infile_pts >> ss;  
  66.                 for (int i = 0; i < 5; i++)  
  67.                 {  
  68.                     infile_pts >> pts_gt[i*2] >> pts_gt[i*2+1];  
  69.                 }  
  70.                 infile_pts.close();  
  71.                 float error = computer_error(pts_gt, pts_pre);  
  72.                 error = error / 5.0;  
  73.                 if (error <= thread)  
  74.                     pos++;  
  75.                 cout << error << " " << endl;  
  76.                 infile_list >> name_list;  
  77.                 //cout << name_list << endl;  
  78.             }  
  79.             else
  80.                 break;  
  81.         }     
  82.     }  
  83.     acc = float(pos) / float(count);  
  84.     cout << "accury: " << acc << endl;  
  85.     infile_list.close();  
  86.     infile_pre.close();  
  87. }  
  88. // computer alinment loss  
  89. float computer_error(vector<float> pts_gt, vector<vector<float>> pts_pre)  
  90. {  
  91.     if (pts_pre.size() == 0)  
  92.         return10;  
  93.     float RMSE, d_outer, align_loss;  
  94.     d_outer = sqrt((pts_gt[0] - pts_gt[8])*(pts_gt[0] - pts_gt[8]) + (pts_gt[1] - pts_gt[9])*(pts_gt[1] - pts_gt[9]));  
  95.     for (int i = 0; i < pts_pre.size(); i++)  
  96.     {  
  97.         RMSE = 0;  
  98.         for (int j = 0; j < 5; j++)  
  99.         {  
  100.             RMSE += sqrt((pts_gt[2 * j] - pts_pre[i][2 * j])*(pts_gt[2 * j] - pts_pre[i][2 * j]) + (pts_gt[2 * j + 1] - pts_pre[i][2 * j + 1])*(pts_gt[2 * j + 1] - pts_pre[i][2 * j + 1]));  
  101.         }  
  102.         RMSE = RMSE / d_outer;  
  103.         if (i == 0)  
  104.         {  
  105.             align_loss = RMSE;  
  106.         }  
  107.         else
  108.         {  
  109.             if (align_loss > RMSE)  
  110.                 align_loss = RMSE;  
  111.         }  
  112.     }  
  113.     return align_loss;  
  114. }  
  115. //字串分割函式     
  116. std::vector<std::string> split(std::string& str, std::string& pattern)  
  117. {  
  118.     std::string::size_type pos;  
  119.     std::vector<std::string> result;  
  120.     //str += pattern;//擴充套件字串以方便操作       
  121.     int size = str.size();  
  122.     pos = str.find(pattern, 0);  
  123.     if (pos<size) {  
  124.         std::string s1 = str.substr(0, pos);  
  125.         std::string s2 = str.substr(pos + 1, size - 1);  
  126.         result.push_back(s1);  
  127.         result.push_back(s2);  
  128.     }  
  129.     return result;  
  130. }  
  131. void str2int(int &int_temp, const string &string_temp)  
  132. {  
  133.     stringstream stream(string_temp);  
  134.     stream >> int_temp;  
  135. }  

相關推薦

300W資料測試MTCNN的landmark效果程式碼

300W資料集測試MTCNN的landmark效果,用提取其中afw資料集337張圖片的預測關鍵點並寫入到txt中,再用測試程式和標註landmark做對比。 處理得到的預測landmark格式如下: 1051618982(圖片名) 1(landmark個數) 543

Tensorflow mnist 資料測試程式碼 + 自己下載資料

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 自己下載 MNIST_data 資料集, csdn 上下載很快 mnist_dat

KITTI資料測試 :MATLAB繪製groundtruth 真實地圖

在poses目錄下,包含00.txt-10.txt 11個序列,每一個檔案包換Nx12個表格,N代表幀數。每一行利用3x4轉移矩陣代表左邊相機系統位姿,轉移矩陣將當前幀左邊相機系統中的一個點對映到第0幀的座標系統中。轉移矩陣中平移的部分表示當前相機位置(相對於第0幀)。 Groundtrut

NLP-Progress記錄NLP最新資料、論文和程式碼: 助你緊跟NLP前沿

方向是自然語言處理的同學們有福啦,為了跟蹤自然語言處理(NLP)的進展,有大量仁人志士在 Github 上維護了一個名為 NLP-Progress 的庫。它記錄了幾乎所有NLP任務的 baseline 和 標準資料集,同時還記錄了這些問題的state-of-the-art。  ●&nb

Semantic Segmentation DeepLab v3 讀取資料(TFRecord)程式碼詳解

本文主要介紹谷歌官方在Github TensorFlow中開源的官方程式碼DeepLab在讀取TFRecord格式資料集所使用的方法。 配置DeepLab v3 首先,需要將整個工程拉取到本地的workspace。 2. 將原始碼拉取到自己的workspace中。

NLP-關於資料處理的相關程式碼

1.將幾個檔案中的資料合併為一個檔案 將要合併的幾個檔案放入一個資料夾下 import os #獲取目標資料夾的路徑 # filedir=os.getcwd()+'/corpus' #獲取當前資料夾中檔名稱列表 # filenames=os.listdir(fi

KITTI資料測試 :groundtruth 真實地圖

在poses目錄下,包含00.txt-10.txt 11個序列,每一個檔案包換Nx12個表格,N代表幀數。每一行利用3x4轉移矩陣代表左邊相機系統位姿,轉移矩陣將當前幀左邊相機系統中的一個點對映到第0幀的座標系統中。轉移矩陣中平移的部分表示當前相機位置(相對於第

【深度學習】2個經典的練手CNN原始碼與MNIST資料測試結果

對剛入門深度學習的童鞋,這2個簡單的工程可快速入門。建議手敲一遍,可快速熟悉程式碼和CNN的實現流程。 #1、匯入相關庫 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import inp

Tensorflow框架下Faster-RCNN實踐(一)——Faster-RCNN所需資料製作(附程式碼

最近剛實現了在Ubuntu16.04、Tensorfllow1.0下 Faster R-CNN 從資料製作到訓練再到利用生成的模型檢測的測試圖片的全過程,現在將具體的過程記錄在部落格,方便遇到困惑或者需要的朋友檢視。 製作資料集 利用Fast

深度學習之路:(一)Keras中mnist資料測試

Keras環境搭建 本地環境 MacOS 一、安裝Anaconda 1、下載Anaconda最新版本:官網下載地址 附:清華映象源 2、下載後直接安裝,點選next 3、檢測版本 開啟終端 輸入conda -

ubuntu下caffe實戰---mnist資料測試

測試用到手寫體識別模型LeNet,mnist資料集 其中LeNet是一種CNN模型,由一個卷積層、後面跟一個下采樣層、再跟另外一個卷積層和另一個下采樣層,再之後是兩個全連線層組成。 mnist資料集:包括60000個訓練集和10000個驗證集 訓練過程: 1.下載mni

KITTI資料測試

KITTI資料集是目前為止為數不多的機器人定位,製圖,導航演算法測試的資料集,使用成熟的資料集有利於和同行同類演算法進行比較,也不用花大量時間去採集自己的資料集。 本文主要目的就自己在使用KITTI資料集過程中遇到的問題進行總結,並從實際的角度出發讓我們如何儘

mxnet卷積神經網路訓練MNIST資料測試

import numpy as np import mxnet as mx import logging logging.getLogger().setLevel(logging.DEBUG) batch_size = 100 mnist = mx.test_utils

Caffe初體驗之Caffe-Windows的配置(CPU/GPU)與Mnist資料測試

配置編譯caffe-windows安裝CUDA(適用GPU版本)    去英偉達下載CUDA7.5,windows10,x86_64,本地安裝,如下圖:下載安裝CUDNN(V4 for cuda7.0或者V5 for cuda7.5)(適用GPU版本)    這個過程的話新使

Tensorflow基礎:使用驗證資料判斷模型效果

在上一篇部落格中,給出了使用神經網路解決MNIST問題的完整程式。在這個程式的開始設定了初始學習率、學習率衰減率、隱藏層節點數量、迭代輪數等7種不同的引數。 在大部分情況下,配置神經網路的這些引數都是需要通過實驗來調整的。使用測試資料來選取引數可能會導致神經網

TextCNN 程式碼詳解(附測試資料以及GitHub 地址)

 前言:本篇是TextCNN系列的第三篇,分享TextCNN的優化經驗 前兩篇可見: 文字分類演算法TextCNN原理詳解(一) 一、textCNN 整體框架 1. 模型架構  圖一:textCNN 模型結構示意 2. 程式碼架構 圖二: 程式碼架構說明 text_cnn.py 定義

【MNIST/Python】手寫體數字訓練/測試資料(圖片格式)下載及分割預處理

MNIST手寫體數字資料集 MNIST是一個手寫數字資料庫,它有60000個訓練樣本集和10000個測試樣本集 由Yann LeCun等人建立,是NIST資料庫的一個子集 官方網址連結:Link 官網上的資料庫檔案形式如下: train-images-idx3-ubyte.

Python機器學習實踐指南 pdf 下載(中文版帶書籤)、原書程式碼資料

機器學習正在迅速成為資料驅動型世界的一個bi備模組。許多不同的領域,如機器人、醫學、零售和出版等,都需要依賴這門技術。通過閱讀 Python機器學習實踐指南 ,你將學習如何一步步構建真實的機器學習應用程式。  Python機器學習實踐指南 以通俗易懂,簡潔明瞭的方式,教你如何使用機器

VOC資料顏色對應關係與程式碼

VOC顏色和分類的對於關係:       code: def voc_colormap(N=256): def bitget(val, idx): return ((val & (1 << idx)) != 0)

R_Studio(cart演算法決策樹)對book3.csv資料測試進行測試並評估模型

    對book3.csv資料集,實現如下功能:   (1)建立訓練集、測試集   (2)用rpart包建立關於類別的cart演算法的決策樹   (3)用測試集進行測試,並評估模型     book3.csv資料集   se