Torch 框架下的 imagenet 图像分类

来源:互联网 发布:淘宝店如何增加访客 编辑:程序博客网 时间:2024/05/04 04:19

一、Torch框架安装

我是选择在官网上教程直接安装的,详情见:http://torch.ch/docs/getting-started.html

torch需要在Mac OS X and Ubuntu 12+平台上安装。

git clone https://github.com/torch/distro.git ~/torch --recursivecd ~/torch; bash install-deps;./install.sh

这里第一步下载安装torch基本包,第二步安装torch下的语言工具LuaJIT和LuaRocks.

选择下面其一进行变量的更新:

# On Linux with bashsource ~/.bashrc# On Linux with zshsource ~/.zshrc# On OSX or in Linux with none of the above.source ~/.profile

其他一些可选项,主要包括使用Lua5.2语言替代LuaJIT(bu),或者添加一些新的packages:

# run luarocks WITHOUT sudo$ luarocks install image$ luarocks list

运行 

th
如果出现以下输出则说明已经安装好Torch框架:

$ th  ______             __   |  Torch7                                    /_  __/__  ________/ /   |  Scientific computing for Lua.           / / / _ \/ __/ __/ _ \  |                                            /_/  \___/_/  \__/_//_/  |  https://github.com/torch                             |  http://torch.ch            th> torch.Tensor{1,2,3} 1 2 3[torch.DoubleTensor of dimension 3]th>

退出该交互直接Ctrl+C回车即可。

以后运行torch下的Lua程序直接 th XXX.lua 方式运行即可。


二、torch下图像分类

采用imagenet-multiGPU.torch分类器进行分类,其代码来自:https://github.com/soumith/imagenet-multiGPU.torch

可以选择AlexNet or Overfeat, VGG and Googlenet 进行训练,也可以使用其他自己设置好的模型,其初始设置为Alexnet训练Imagenet图像。

1、运行设备要求:设备安装好CUDA GPU,如果是Mac OSX,运行下面来获取GNU versions of wcfind, and cut

brew install coreutils findutils 

2、数据要求:直接下载 imagenet 数据(标配),如果是自己数据,安装imagenet格式组织,建立数据的文件夹,里面存放文件夹 train/ 和val/ ,分别放置训练数据和验证数据。其中,train/ 和val/ 文件夹下是不同类文件夹,里面是图片。

比如:有2类数据,猫和狗,那么在train/ 和val/ 下分别放cat/ 和dog/ ,里面放对应的图片。

不是固态硬盘或速度慢时,更改图片维度到256来加速,代码如下:

find . -name "*.JPEG" | xargs -I {} convert {} -resize "256^>" {}

3、进行训练:

打开opts.lua文件进行设置的更改,如文件夹修改等,自己组织的数据修改类别数nClasses,同时依据所需要的大致精度修改 nEpochs 次数(数据大时候55的次数训练时间太长了诶)

运行下面查看自己的设置是否正确

th main.lua --help

进行训练

th main.lua -data [imagenet-folder with train and val folders]

多GPU下在后面加上GPU的设置。制定某一模型也在后面设置,如:2个GPU,同时AlexNet + CuDNN,即可

th main.lua -data [imagenet-folder with train and val folders] -nGPU 2 -backend cudnn -netType alexnet

0 1