以前こんな記事を書いていました
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が使えるようになりました!!