圖片尺寸批量resize的matlab並行代碼

在caffe ImageNet例子中有對圖片進行resize的部分,文中使用的是linux shell腳本命令:linux

 
 
 
 
 
  • 1
  • 2
  • 3
for name in /path/to/imagenet/val/*.JPEG; do convert -resize 256x256\! $name $name done

但該命令在運行後光標就一直處於等待狀態,直到全部的圖片所有運行結束。這種狀況在圖片數量比較大時就很惱人(對於ILSVRC2012數據集中的100多萬張圖片來講,這種狀態可能會持續好幾天),你不知道程序的運行情況,不知道處理了多少圖片,不知道程序大概何時能結束。shell

所以,本文采用matlab語言中的並行機制來實現圖片尺寸的批量resize。 
代碼以下:bash

 
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
clear;clc;close all; tic; % 用於計算程序運行時間,和toc搭配使用 CoreNum=6; % cpu核的數量 % 下面代碼塊爲並行處理檢測與開啓程序,須要在執行結束後予以關閉 if matlabpool('size')<=0 matlabpool('open','local',CoreNum); else disp('Already initialized'); end imagePath = 'rastaPlpSpec/train/'; % 圖片存放路徑 imageFiles = dir(imagePath); numFiles = length(imageFiles); parfor i=3:numFiles % 從3開始,由於前兩個是當前路徑‘.’和上一級路徑‘..’ j = i-2; disp(j); imageFile = strcat(imagePath,imageFiles(i).name); A = imread(imageFile); B = imresize(A,[256 256]); % resize爲256x256 imwrite(B,imageFile); % 覆蓋原始圖片,若須要另存爲,則修改此處的imageFile爲新的存儲路徑 end matlabpool close % 關閉並行 toc; % 顯示運行時間

在該代碼中,由於個人cpu有6個核,因此設置CoreNum=6。 
若是我有兩個物理cpu,每一個有6個核,那麼我這裏是否能夠設置CoreNum=12呢,這樣效率會不會成倍提高?因爲對matlab的並行處理了解很少,這裏就留個疑問,等我知道後再補充,有知道的歡迎交流。ui

————————————————————————————————————————————— 
在linux中關於cpu的相關信息都在文件/proc/cpuinfo中,用戶能夠直接查看該文件或使用下面的命令顯示須要的信息: 
1. 顯示物理cpu個數spa

 
 
 
 
 
  • 1
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
  1. 顯示每一個物理cpu的核數
 
 
 
 
 
  • 1
cat /proc/cpuinfo | grep 'cpu cores' | uniq
  1. 顯示邏輯cpu的個數
 
 
 
 
 
  • 1
cat /proc/cpuinfo | grep 'processor' | wc -l

其中: 
總核數 = 物理CPU個數 X 每顆物理CPU的核數 
.net

總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數線程

轉自:http://blog.csdn.net/yingyujianmo/article/details/46520253code

相關文章
相關標籤/搜索