質問: ### 前提・実現したいこと CNNに用いるデータセットを自身で作成しようと考えています。 最終的には、 A×AのRGBを持つカラートレーニング画像(x_train)がn個あるとき x_train.sahpe >>(n, A, A, 3) ラベルの数がm種類の時、 y_train >>([0, 1, 2, ... , m, ..., ]) y_train.shape >>(n,) というようにラベルデータとサンプルデータが別に扱えるような形状に仕上げたいと考えております。 (cifar10やMNISTのようなデータセットを作れると理想) データセットを作るプロトコルを考えましたが、このアプローチが現実的かどうか分かりません。 また、このアプローチを実際にコードに起こす段階でも行き詰っております。 ウェブ上で参照できる実装例にはウェブスクレイピングなどを用いたり、顔認識などによる自動切り取りを組み込んでいるものが多いですが、あくまでファイル上に保存された画像データをもとにした基本的な方法を知りたいです。 コードベースで教えていただけたら幸いです。 ### 試したこと データセットを作るプロトコルを考えました。 1画像をnumpyを用いてnumpy配列として読み込む。 (多量の画像を読み込む方法が不明) ↓ 2ラベル付けを行う (下記のサイトを参考にするも実装に失敗。) ↓ テストデータとトレーニングデータに分ける (下記のサイトを参考にするも実装に失敗) ↓ (x_train, y_train), (x_test, y_test)の形状に仕上げる しかし、まずこのアプローチの仕方が正しいのかすら分かりません。 こちらのサイト では、あらかじめフォルダを作成してそれをラベルとして使用しているのでしょうか
回答: 使用する Deep Learning のライブラリが要求する配列が最終的に作れればいいのですから、どのような形式でデータを保存しているかは重要ではありません。 質問者さんの好みの形式で保存しておけばよいです。 ライブラリが要求する配列はライブラリによって異なりますが、例えば Tensorflow/Keras の場合は 画像は (サンプル数, 高さ, 幅, チャンネル数) の numpy 配列 ラベルは (サンプル数,) の numpy 配列 > > 1画像をnumpyを用いてnumpy配列として読み込む。 > > (多量の画像を読み込む方法が不明) > > > OpenCV の cv2.imread() か PIL の PIL.Image.open() を使う。 ファイルパスのリストアップは glob > > 2ラベル付けを行う > > (下記のサイトを参考にするも実装に失敗。) > > > クラス分類であれば、フォルダごとに分けておくだけでもよい。 分ける作業 (ラベル付け) は基本手動でやる > > テストデータとトレーニングデータに分ける > > (下記のサイトを参考にするも実装に失敗) > > (x_train, y_train), (x_test, y_test)の形状に仕上げる > > > フォルダ分けした段階で分けておいてもいいし、読み込んだあとに train_test_split() などで分けてもよい。 sklearn.model_selection.train_test_split — scikit-learn 0.20.3 documentation