深層学習とその他

機械学習したいマン

imagenetとその使い方について

アドベントカレンダー17日目です。https://blog.hatena.ne.jp/looseleaf0727/looseleaf0727.hatenablog.jp/edit?entry=8599973812327479500

adventar.org

今日はimagenetの説明と、使い方について書いていきたいと思います。

imagenetについて

こちらのことです。 ImageNet f:id:looseleaf0727:20171217225557p:plain

画像のデータベースで、分類などの学習に使うデータを集めたりすることが出来ます。具体的にどのような種類の画像があるかは、上のExploreから見ていくことが出来ます。 f:id:looseleaf0727:20171217225713p:plain

Exploreに飛んだ画面です。 様々なジャンルのツリーがあり、そこから更にサブツリーがあります。 一瞬誤解をしてしまいそうですが、カッコの中の数字はサブツリーの数であり、画像の数ではありません。 今回はbeachを見てみました。 たくさんの画像が出てきますが、重複に気をつける必要がありそうです。 f:id:looseleaf0727:20171217230207p:plain

上の検索窓でbreadについて検索してみました。 たくさんのbreadに関する内容が出てきています。 この中から、必要に応じて見ていくわけですね。 f:id:looseleaf0727:20171217230952p:plain

試しにItalian breadを開いてみました。画像の一覧が表示されました。Downloadsを押すことでダウンロードができます。 f:id:looseleaf0727:20171217231837p:plain

Download URLs of images in the synsetからは画像がダウンロードできます。 Download Bounding BoxesはYoloのような物体の位置を検出する際に使うデータだと思います。 f:id:looseleaf0727:20171217232055p:plain

画像のダウンロードの仕方

先程のDownload URLs of images in the synsetをクリックするとこのような画面になります。これは画像のURL一覧です。なので、ここから画像をダウンロードしてあげる必要があります。 f:id:looseleaf0727:20171217232602p:plain

先程のリンクを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を使ってみなさんも分類問題でもやってみましょう。