RでMXNet(6)

Windows10 64bit
Microsoft R Open 3.4.0

VGG16訓練後モデルを取得する方法

download.file("http://data.dmlc.ml/models/imagenet/vgg/vgg16-symbol.json","vgg16-symbol.json")
download.file("http://data.dmlc.ml/models/imagenet/vgg/vgg16-0000.params","vgg16-0000.params")

load

vgg16 <- mx.model.load("vgg16",0)
  • うまくloadできない時はBash on Ubuntu on Windowsからwgetでparamsファイルとjsonファイルを取得
  • これでうまくいく時がある

図示

graph.viz(vgg16$symbol)

f:id:touch-sp:20170630122807p:plain

クラス分類

library(EBImage)

my_image <- array(0, c(224, 224, 3, 1))
file <- "D:/rworks/dogcat/dog/dog.0.jpg"
img <- readImage(file)
resize_img <- resize(img, w = 224, h = 224)
my_image[,,, 1] <- resize_img@.Data
my_image <- my_image * 255
#入力は「RGB」(Kerasなどでは「BGR」である)
my_image[,, 1, 1] <- my_image[,, 1, 1] - 123.68
my_image[,, 2, 1] <- my_image[,, 2, 1] - 116.779
my_image[,, 3, 1] <- my_image[,, 3, 1] - 103.939

pred <- apply(predict(vgg16, my_image), 2, which.max) - 1
pred
[1] 192

結果をID、名前に変換

jsonファイルを取得。

download.file("https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json","imagenet_class_index.json")

取得したjsonファイルをいったん「メモ帳」で開いて最後に改行を加えて上書き保存。
その後Rから

library(rjson)
imagenet <- fromJSON(paste(readLines("imagenet_class_index.json"), collapse = ""))
imagenet[[as.character(pred)]]
[1] "n02096177" "cairn"

改行を加えていないと以下のエラーが出る。

incomplete final line found on 'imagenet_class_index.json'

または

imagenet_class_index.json' で不完全な最終行が見つかりました

訓練

と言いたいところであるが・・・。
GPU搭載パソコンを所有していないためここからは何もできない。
クラウドでやるにもお金がないし・・・。