以前こんな記事を書いていました
blog.hatappi.me
CIFAR-10は10クラス, CIFAR-100は100クラスからなる画像セットです
CIFAR-10 and CIFAR-100 datasets
それぞれはPython(Pickle), Matlab, binaryで提供されます
前の記事でも書いたのですが、Rubyで扱うとなるとbinaryから読み込んで取り出す必要があります
それでも良いのですが、もうちょっと扱いやすくしたいところ
ということでred-datasetsというgemにPRを送りました
github.com
red-datasetsはRed Data Toolsで作成しているRuby向けにwikipediaやirisのdatasetsを提供するgemになっています
red-datasetsの0.0.4から今回のCIFARを取り出すものが入っています
使い方
gem install red-datasets
やGemfileにgem 'red-datasets'
を追加します
# CIFAR-10 sample > require "datasets" > cifar = Datasets::CIFAR.new(n_classes: 10, type: :train) > cifar.each do |record| p record.pixels # => [59, 43, 50, 68, 98, 119, 139, 145, 149, 143, .....] p record.label # => 6 end > cifar.to_a.size # => 50000
red-datasetsで提供されるdatasetsはここでEnumerable
をincludeしているので.first
とか.map
が使えるようになっています
newの際に使用できるオプションは次のようになっています
キー | 指定できる値 | 備考 |
---|---|---|
n_classes | 10 or 100 | CIFAR-10, 100のどちらを使用するか デフォルトは10 |
type | :train or :test | train用、test用のdatasetsのどちらを使用するか デフォルトは:train |
CIFAR10, 100をeachなどで取り出す際にそれぞれはDatasets::CIFAR::Record10
, Datasets::CIFAR::Record100
というインスタンスがかえってきます
それぞれは下記のように取り出すことが出来ます
CIFAR-10
Datasets::CIFAR::Record10.new | 取り出すことの出来る値 |
---|---|
.data | imageのbinary(String) |
.pixels | RGBそれぞれが0~255の範囲で1024個が1次元で提供されている |
.label | ラベル |
CIFAR-100
Datasets::CIFAR::Record100.new | 取り出すことの出来る値 |
---|---|
.data | imageのbinary(String) |
.pixels | RGBそれぞれが0~255の範囲で1024個が1次元で提供されている |
.coarse_label | 粗いラベル 例:) insects |
.fine_label | 細かいラベル 例:) bee |
まとめ
red-datasetsの0.0.4からCIFAR-10, 100が使えるようになりました!!