こしあん
2019-05-13

pipからインストールしたTorchVisionにImageNetがないときの対応


TorchVisionの公式ドキュメントにはImageNetが利用できるとの記述がありますが、pipからインストールするとImageNetのモジュール自体がないことがあります。TorchVisionにImageNetのモジュールを手動でインストールする方法を解説します。

発生状況

  • Python3.7(pip環境でAnacondaの使用はなし)
  • PyTorch1.1+CPUバージョン
  • torchvision v0.2.2.post3

PyTorchとtorchvisionは以下のpipでインストール。公式サイトより

pip3 install https://download.pytorch.org/whl/cpu/torch-1.1.0-cp37-cp37m-win_amd64.whl
pip3 install torchvision

ImageNetがない

TorchVisionのドキュメントを見ると、Imagenet-12が使えるとの記述があります。

しかし、インストール直後に、

import torchvision

def test():
    data_train = torchvision.datasets.ImageNet("./imagenet", download=True)
    data_test = torchvision.datasets.ImageNet("./imagenet", download=True, split="val")

if __name__ == "__main__":
    test()

のようなコードを実行すると、

  File "***.py", line 4, in test
    data_train = torchvision.datasets.ImageNet("./imagenet", download=True)
AttributeError: module 'torchvision.datasets' has no attribute 'ImageNet'

のようにエラーが表示されてデータのダウンロードや読み込みがうまくいきません。

TorchVisionのディレクトリを見ると

Windows10環境の場合ですが、エクスプローラーで「torchvision」を検索すると以下のようなフォルダが出てきました。

imagenet.pyがない??

ディレクトリは、「C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37\Lib\site-packages\torchvision\datasets」にありました。これをdatasetsフォルダとします。

しかし一方で、公式のリポジトリを見ると、確かにソースは存在するのです。まぁごにょごにょな理由なのかもしれませんし、そのうち直るのかもしれません。

ここでは、公式からファイルを手動でコピーしてくる方法を取ります。

手動インストール

  1. datasetsフォルダに公式の「imagenet.py」をコピー
  2. _init_.pyを次のように変更して保存。from~とallの中身の2箇所を変更します。
from .lsun import LSUN, LSUNClass
from .folder import ImageFolder, DatasetFolder
from .coco import CocoCaptions, CocoDetection
from .cifar import CIFAR10, CIFAR100
from .stl10 import STL10
from .mnist import MNIST, EMNIST, FashionMNIST, KMNIST
from .svhn import SVHN
from .phototour import PhotoTour
from .fakedata import FakeData
from .semeion import SEMEION
from .omniglot import Omniglot
from .sbu import SBU
from .flickr import Flickr8k, Flickr30k
from .voc import VOCSegmentation, VOCDetection
from .cityscapes import Cityscapes
from .imagenet import ImageNet # ここを追加

__all__ = ('LSUN', 'LSUNClass',
           'ImageFolder', 'DatasetFolder', 'FakeData',
           'CocoCaptions', 'CocoDetection',
           'CIFAR10', 'CIFAR100', 'EMNIST', 'FashionMNIST', 'ImageNet', # ここに'ImageNet'を追加
           'MNIST', 'KMNIST', 'STL10', 'SVHN', 'PhotoTour', 'SEMEION',
           'Omniglot', 'SBU', 'Flickr8k', 'Flickr30k',
           'VOCSegmentation', 'VOCDetection', 'Cityscapes')

試してみる

先程のコードを実行してみると、

  0%|                                                                      | 77717504/147897477120 [00:16<23:36:47, 1738894.67it/s]

確かにダウンロードが始まりました。しかしとんでもない容量(Trainだけで147GB)なので、暇なときにダウンロードするのをおすすめします。

Related Posts

ディープラーニング=最小二乗法のどこがダメなのか解説する... あるニュース記事で、ディープラーニング=最小二乗法で三次関数なんていう「伝説の画像」が出回っていたので、それに対して突っ込みつつ、非線形関数という立場からディープラーニングの本当の表現の豊かさを見ていきたいと思います。 きっかけ ある画像が出回っていた。日経新聞の解説らしい。 伝説の画像にな...
TensorFlow/Kerasでの分散共分散行列・相関行列、テンソル主成分分析の実装... TensorFlowでは分散共分散行列や主成分分析用の関数が用意されていません。訓練を一切せずにTensorFlowとKeras関数だけを使って、分散共分散行列、相関行列、主成分分析を実装します。最終的にはカテゴリー別のテンソル主成分分析を作れるようにします。 何らかの論文でこれらのテクニックを...
Kerasで転移学習用にレイヤー名とそのインデックスを調べる方法... Kerasで転移学習をするときに、学習済みモデルのレイヤーの名前と、そのインデックス(何番目にあるかということ)の対応を知りたいことがあります。その方法を解説します。 転移学習とは 転移学習とは、ImageNetなど何百万もの大量の画像で事前学習させたモデルを使い、それを「特徴量検出器」として...
OpenCVで画像を歪ませる方法 PythonでOpenCVを使い画像を歪ませる方法を考えます。アフィン変換というちょっと直感的に理解しにくいことをしますが、慣れればそこまで難しくはありません。ディープラーニングのData Augmentationにも使えます。 OpenCVでのアフィン変換のイメージ アフィン変換というと、ま...
Pillow/PIL ImageOpsチートシート Pillow/PILの簡単かつ強力な処理を、実例とコードつきで解説します。 ImageOpsについて Pillow/PILにあるモジュールの1つ。ImageOpsの関数で簡単にいい感じに画像の補正や加工できます。この記事では2019年5月時点で用意されているImageOps以下の13個の処理を...

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です