2023-12-31
ディープラーニングのテストをしたいとき大量のサンプル画像が必要になるが、CIFARを使うことで画像を取得できる。
https://www.cs.toronto.edu/~kriz/cifar.html
airplane,automobile,bird,cat,deer,dog,frog,horse,ship,truckという10カテゴリの画像(32×32)がそれぞれ大量に用意されている。
これはPythonから直接ロードできるバイナリ形式で提供されているが、それぞれを各画像ファイルに落としてから見やすく使いたい場合がある。
その場合は画像抽出のPythonコードを書いて保存していく。今回これをGoogle Colaboratoryで行う。
Google ColaboratoryはGmail,Google Driveと同様Googleファミリーのサービスで、オンラインでPythonのコードが実行できる。
ファイルの読み書きはGoogle Driveを介して行うので、CIFARバイナリ元データ、および画像抽出出力データはドライブに保存することになる。
1、Google Colaboratoryにて画像抽出コードの下準備
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja
を開き、使用したい自分のGmail/Google Driveアカウントに切り替えて使い始める。
ファイル→ノートブックを新規作成で、Untitled.ipynbをsave-cifar10-images.ipynbに変更する。
左端のフォルダアイコンをクリックししばし待つと3つのアイコンが出るので右端のGoogle Driveフォルダアイコンをクリック
→このノートブックにGoogleドライブのファイルへのアクセスを許可しますか?→GOOGLEドライブに接続する。
Googleドライブをマウントしています...で完了するとディレクトリツリーが現れて、ドライブファイルが読み書きできるようになる。
drive/MyDrive/Colab Notebooks/save-cifar10-images.ipynbが作成されていることを確認する。
ColaboratoryのPythonコードからは、/content/drive/MyDrive/Colab Notebooks/ のようなパス指定でアクセスできる。
2、Google DriveにCIFAR10バイナリデータのアップロード
次に自分のGoogle Driveを開き、マイドライブ→Colab Notebooksフォルダを開く。ここにアップロードする。
CIFARのサイトからCIFAR-10 python versionをダウンロードする。
https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
tar.gzは7-Zipかなにかでフォルダ展開する。出来上がったcifar-10-batches-pyフォルダを上記Colab Notebooksフォルダにドロップしアップロード。
3、Google Colaboratoryにて画像抽出コードを書いて実行
Google Colaboratoryのsave-cifar10-images.ipynb編集画面に戻り、再生アイコンのところに以下抽出コードを貼り付ける。
今回は、Colab Notebooks/cifar-10-batches-py/data_batch_1のバイナリデータを抽出してColab Notebooks/cifar-10-images-1フォルダに保存していくサンプルとする。
Python | save-cifar10-images.py | GitHub Source |
from PIL import Image import numpy as np import os, sys input_dir = '/content/drive/MyDrive/Colab Notebooks/cifar-10-batches-py/data_batch_1' output_dir = '/content/drive/MyDrive/Colab Notebooks/cifar-10-images-1' label_file = '/content/drive/MyDrive/Colab Notebooks/cifar-10-batches-py/batches.meta' def read_bin(path): import pickle with open(path, 'rb') as f: r = pickle.load(f, encoding='bytes') return r # 保存先ディレクトリの作成とカテゴリディレクトリの作成 try: os.makedirs(output_dir) except: pass labels = read_bin(label_file) if b"label_names" in labels: labels = read_bin(label_file)[b"label_names"] else: labels = read_bin(label_file)[b"coarse_label_names"] for i in labels: try: dir=os.path.join(output_dir, i.decode('utf-8')) os.makedirs(dir) except: pass # 画像バイナリの読み込み images = read_bin(input_dir) files = images[b"filenames"] if b"labels" in images: image_labels = images[b"labels"] else: image_labels = images[b"coarse_labels"] image_data = images[b"data"] # 画像ファイルとして保存 for i,_ in enumerate(files): file = files[i] image_label = image_labels[i] image = image_data[i] path = os.path.join(os.path.join(output_dir, labels[image_label].decode('utf-8'), file.decode('utf-8'))) out_image_1 = np.reshape(image, [3, 32, 32]).transpose(1,2,0) out_image_2 = Image.fromarray(out_image_1) with open(path, mode='wb') as o: out_image_2.save(o) print("saved: {}".format(path))
再生アイコンを押すと実行され、以下のような出力とともにガンガン保存されていく。
... saved: /content/drive/MyDrive/Colab Notebooks/cifar-10-images-1/automobile/coupe_s_001419.png saved: /content/drive/MyDrive/Colab Notebooks/cifar-10-images-1/cat/tabby_cat_s_002128.png saved: /content/drive/MyDrive/Colab Notebooks/cifar-10-images-1/airplane/airbus_s_000788.png ...
Google Driveに戻ってColab Notebooks/cifar-10-images-1/フォルダの中身を見て大量に画像ができていることを確認する。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【Apache】サーバーに同時接続可能なクライアント数を調整する
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
Windows版Google Driveが使用中と言われアンインストールできない場合
【Linux】iconv/libiconvをソースコードからインストール
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【PHP】Mail/mimeDecodeを使ってメールの中身を解析(準備編)
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合