在caffe ImageNet例子中有對圖片進行resize的部分,文中使用的是linux shell腳本命令:linux
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;
CoreNum=
6;
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
j =
i-
2;
disp(
j);
imageFile = strcat(imagePath,imageFiles(
i).name);
A = imread(imageFile);
B = imresize(A,
[256 256]);
imwrite(B,imageFile);
end
matlabpool close
toc;
在該代碼中,由於個人cpu有6個核,因此設置CoreNum=6。
若是我有兩個物理cpu,每一個有6個核,那麼我這裏是否能夠設置CoreNum=12呢,這樣效率會不會成倍提高?因爲對matlab的並行處理了解很少,這裏就留個疑問,等我知道後再補充,有知道的歡迎交流。ui
—————————————————————————————————————————————
在linux中關於cpu的相關信息都在文件/proc/cpuinfo中,用戶能夠直接查看該文件或使用下面的命令顯示須要的信息:
1. 顯示物理cpu個數spa
cat /proc/cpuinfo |
grep 'physical id' |
sort | uni
q | wc -l
- 顯示每一個物理cpu的核數
cat /proc/cpuinfo |
grep 'cpu cores' | uniq
- 顯示邏輯cpu的個數
cat /proc/cpuinfo | grep
'processor' | wc
-l
其中:
總核數 = 物理CPU個數 X 每顆物理CPU的核數
.net
總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數線程
轉自:http://blog.csdn.net/yingyujianmo/article/details/46520253code