图片尺寸批量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

相关文章
相关标签/搜索