imagenetとその使い方について
アドベントカレンダー17日目です。https://blog.hatena.ne.jp/looseleaf0727/looseleaf0727.hatenablog.jp/edit?entry=8599973812327479500
今日はimagenetの説明と、使い方について書いていきたいと思います。
imagenetについて
こちらのことです。 ImageNet
画像のデータベースで、分類などの学習に使うデータを集めたりすることが出来ます。具体的にどのような種類の画像があるかは、上のExploreから見ていくことが出来ます。
Exploreに飛んだ画面です。 様々なジャンルのツリーがあり、そこから更にサブツリーがあります。 一瞬誤解をしてしまいそうですが、カッコの中の数字はサブツリーの数であり、画像の数ではありません。 今回はbeachを見てみました。 たくさんの画像が出てきますが、重複に気をつける必要がありそうです。
上の検索窓でbreadについて検索してみました。 たくさんのbreadに関する内容が出てきています。 この中から、必要に応じて見ていくわけですね。
試しにItalian breadを開いてみました。画像の一覧が表示されました。Downloadsを押すことでダウンロードができます。
Download URLs of images in the synsetからは画像がダウンロードできます。 Download Bounding BoxesはYoloのような物体の位置を検出する際に使うデータだと思います。
画像のダウンロードの仕方
先程のDownload URLs of images in the synsetをクリックするとこのような画面になります。これは画像のURL一覧です。なので、ここから画像をダウンロードしてあげる必要があります。
先程のリンクをwgetしてリンク一覧を持ってきます。
wget http://image-net.org/api/text/imagenet.synset.geturls?wnid=n07687626
これでリンク集が手に入りました。あとはこのリンクから画像を拾うだけです。今回はpythonを使って拾いました。引数でリンクのファイルを渡すと拾ってきてくれます。保存ディレクトリは指定してないので、必要があれば修正してください。
import os import sys import codecs import urllib.request f = codecs.open(sys.argv[1], 'r', 'utf8', 'ignore') for line in f.readlines(): try: img = urllib.request.urlopen(line[0:-2]) localfile = open(os.path.basename(line[0:-2]), 'wb') localfile.write(img.read()) img.close() localfile.close() except Exception as e: print(e)
注意点
拾ってきた画像の中ではリンクが参照できず、エラーの画像などが入っている場合が多いです。ざっくりと確認して弾くのがいいと思います。
まとめ
imagenetを使ってみなさんも分類問題でもやってみましょう。