R中栅格图像分类的RSNNS神经网络预测

Posted

技术标签:

【中文标题】R中栅格图像分类的RSNNS神经网络预测【英文标题】:RSNNS neural network prediction for raster image classification in R 【发布时间】:2016-06-26 20:38:34 【问题描述】:

我正在尝试使用R 中的RSNNS 包来利用神经网络的强大功能对大栅格进行图像分类。

至于模型的数据准备和训练,一切正常,准确度看起来很有希望。

随后,我尝试使用函数predict 对经过训练的模型对栅格值进行分类。拥有大量数据(尺寸为 10980x10980x16 的栅格堆栈),我正在逐块处理数据。这就是问题所在:

类值的预测非常慢。我正在开发一台功能强大的机器(Windows x64、32GB Ram、i7 3.4GHZ 四核),但这个过程几乎确实需要很长时间。我已经减小了块的大小,但所需的时间仍然是不可接受的。目前,我将数据分成每块 64 行的块。这将导致总共 172 个块。如果我假设每个块的处理时间是线性的(在我的情况下是 33 分钟!!!),那么我需要将近 95 个小时来处理整个图像。再一次,这是不对的。

我尝试过其他神经网络包,例如 nnet 在不到一分钟的时间内对这些更大的块进行分类。

所以,如果您对我做错了什么有任何指示,我将不胜感激。

这是一个类似于我的代码的工作示例:

library(RSNNS)

#example data for training and testing
dat <- matrix(runif(702720),ncol = 16)

#example data to classify
rasval <- matrix(runif(11243520),ncol = 16)

dat <- as.data.frame(dat)

#example class labels from 1 to 11
classes <- matrix(,ncol=1,nrow=nrow(dat))
classes <- apply(classes,1,function(x) floor(runif(1,0,11)))

dat$classes <- classes

#shuffle dataset
dat <- dat[sample(nrow(dat)),]


datValues <- dat[,1:16]
datTargets <- decodeClassLabels(dat[,17])

#split dataset
dat <- splitForTrainingAndTest(datValues, datTargets, ratio=0.15)

#normalize data
dat <- normTrainingAndTestSet(dat)

#extract normalization variables
ncolmeans <- attributes(dat$inputsTrain)$normParams$colMeans
ncolsds <- attributes(dat$inputsTrain)$normParams$colSds

#train model
model <- mlp(dat$inputsTrain, dat$targetsTrain, size=1, learnFunc="SCG", learnFuncParams=c(0, 0, 0, 0), 
             maxit=400, inputsTest=dat$inputsTest, targetsTest=dat$targetsTest)

#normalize raster data
rasval <- sweep(sweep(rasval,2,ncolmeans),2,ncolsds,'/')

#Predict classes ##Problem##
pred <- predict(model,rasval)

【问题讨论】:

【参考方案1】:

是的,不幸的是,RSNNS 在预测时可能非常慢。新版本 0.4-8(还没有在 CRAN 上,但你可以从 github 获得它)应该会加快速度,但普遍的问题是每一行数据都需要单独传递到 SNNS 内核中,并解决这个问题意味着在内核中重新实现一些东西。并非不可能,但有一些工作要做。

【讨论】:

以上是关于R中栅格图像分类的RSNNS神经网络预测的主要内容,如果未能解决你的问题,请参考以下文章

Package ‘RSNNS’

如何使用预训练的 .caffemodel 在 python 上对单个图像执行预测

如何在R语言中进行神经网络模型的建立

二预训练模型预测(Datawhale组队学习)

我应该如何使用预训练模型优化神经网络以进行图像分类

4. 使用预训练的PyTorch网络进行图像分类