ChainerCVで画像を出力する方法
ChainerCVで画像を出力する手順です。
目次
画像を出力する
Chainerで画像を分類するような学習をさせているときに、ときどき画像を出力したくなることがあります。例えば、テストデータで不正解になったときの画像がどういうものだったのか見たいというような場合ですね。
学習用のデータがndarrayで出来ているので、ndarrayを操作すればいかようにもなります。
でもChainerCVに便利機能がありますので、そちらを使った方が楽です。
ChainerCVのバージョンは、0.13です。
matplotlibを通じて出力する
ChainerCVのVisualizationクラスのvis_imageを使うと、matplotlibでプロットができるようになります。つまり、matplotlibで表示したりファイル出力ができるということです。
chainercv.visualzations.vis_image(img, [ax])
変数 |
型 |
内容 |
---|---|---|
img |
ndarray |
Chainerの様式の画像を表すndarrayオブジェクト。 |
ax |
Axis |
省略可。既定値はNone。matplotlibのaxisオブジェクト。 |
axを指定しない(Noneにする)と、新しく描画されます。
このメソッドを実行してからplt.show()すると、画像が表示されるわけです。
試してみましょう。
プロ生ちゃんの画像をデータセットとして読み込んで、それをmatplotlibで表示してみます。
元画像はこれです。 プロ生ちゃんのサイト からダウンロードしたイラストをクロップしてリサイズして背景色を付けました。この画像をkei.pngという名前で保存して、同じフォルダにkei.txtというラベルデータのテキストファイルを置いておきます。
コードはこういう感じです。
from matplotlib import pyplot as plt
from chainer.datasets import LabeledImageDataset
from chainercv.visualizations import vis_image
dataset_object = LabeledImageDataset('kei.txt')
image_data, label_index = dataset_object[0]
vis_image(image_data)
plt.show()
データセットといいながら、画像は1枚だけですけどね。
データセットとして画像を読み込むと、データセットはタプルのリストになります。タプルはイメージデータのndarrayとそのラベルインデックスの対になっています。
ですから、データセットのインデックス0を2つの変数に代入すると、画像部分とラベル部分に分けられます。
画像部分を取り出したら、それをvis_imageメソッドに入れて、plt.showします。
そうすると、こんな感じで表示されます。
matplotlibが描画しているので、もちろんファイルに保存もできます。
ダイレクトに出力する
matplotlibを通さずファイルに出力したい場合は、ChainerCVのUtilsクラスのwrite_imageメソッドが使えます。
chainercv.utils.write_image(img, file, [format])
変数 |
型 |
内容 |
---|---|---|
img |
ndarray |
Chainerの様式の画像を表すndarrayオブジェクト。 |
file |
str, file |
ファイル名。またはファイルオブジェクト。 |
format |
str |
省略可。既定値はNone。ファイルフォーマット。 |
formatは、file引数がファイル名でなくファイルオブジェクトのときだけ指定できます。bmpかjpegかpngのいずれかです。
では試してみましょう。
from chainer.datasets import LabeledImageDataset
from chainercv.utils import write_image
dataset_object = LabeledImageDataset('kei.txt')
image_data, label_index = dataset_object[0]
write_image(image_data, 'out.png')
データセットの読み込みは、前と同じです。
出力される画像はこうなります。
軸とか余白とかを考えなくて良いので、こちらの方が好きです。
公開日
広告
Chainerカテゴリの投稿
- ChainerCVで使える画像のデータ拡張
- ChainerCVで画像を出力する方法
- ChainerCVのResNetを使う
- ChainerCVのSSDに学習させてみた
- ChainerCVのデモンストレーションプログラムを読んでみた
- ChainerCVのデモンストレーションプログラムを読んでみた(推論編)
- Chainerが出力するネットワーク構造図をGraphvizで見る
- Chainerで数字を分類してみた
- ChainerのSSDのデモで物体検出をしてみる
- Chainerのチュートリアルを試してみた
- Chainerのチュートリアルを試してみた(ChainerCVでデータ拡張編)
- Chainerのチュートリアルを試してみた(データ拡張編)
- Chainerのチュートリアルを試してみた(トレーナー編)
- Chainerのチュートリアルを試してみた(畳み込みを深くする編)
- Chainerのチュートリアルを試してみた(畳み込み編)
- Chainerのデータセットの作り方(ラベル付き画像編)
- VoTTのPascal VOC出力をChainerCVのデータセットとして読み込んでみた