質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3608閲覧

リサイズした画像を標準化なるものを行いたい

oinari03

総合スコア59

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/08/03 06:09

やりたいこと

・読み込んだ画像(複数を)リサイズ
・その画像一枚ずつに対して標準化なるものを施す ← ここができない
・最終的にテンソル型にして返したい (あわよくば...)

imgsの中には00001.jpg,00002.jpg・・・・とたくさんあります。
それを最終的には
標準化したデータを返り値としてほしい感じです。
→0~1の小さい値のはず!!(小数)
あわよくばそのデータをtensor化して返しせるとベストですが...

ぶっちゃけた話ですが、あんまし出力の結果も予想がつかないのでめちゃくちゃなこと言ってると思います。初心者過ぎて自分が何やろうとしているのかはっきりしていないパターンです。地獄です。

環境

wsl1
python 3.7

わかったこと

・scipyのzscoreを使えば標準化はたやすいものらしいということ

・numpy配列に対してzscoreが成り立つらしい

わからないこと

・opencvの画像データからshapeでh,w,cを取得することができるのはわかりました。

・これがndarry型と呼ばれているのもわかりました。

・だったらzscore(img)で計算できるのではないか?という疑問があります。
・だったらlistに入れればいいのではと思いましたがそれも違いました...

盛大な勘違いと無知があるのでお許しください。。。

書いたコード

この中には中途半端にコメントとコードを記載しているので不明点があればご指摘ください
コメントにあるコードは大体検証に使ってそのまま残しているものです。
i==0で止めているのは、複数あるデータの一枚目で止めているためです。

またchwのところはテンソル型にするのに便利だと聞いたからです。

python

1import os 2import glob 3import cv2 4import numpy as np 5from scipy.stats import zscore 6 7# 前処理 8 9imgs = glob.glob('./data/cat/*.jpg') 10 11# 呼び出したときtensor型Dataloaderに渡すためにしなきゃいけない 12# リサイズして画像の標準化をしたものを求める(tensor型で返す) 13def trans_square(imgs): 14 15 # array_list = [] 16 17 for i,img_list in enumerate(imgs): 18 img = cv2.imread(img_list) 19 img = cv2.resize(img,(256,256)) 20 21 22 23 # array_list.append(img) 24 # for array_i in array_list: 25 # img = zscore(array_i) 26 # print(array_i) 27 28 29 30 # 標準化(numpy配列を変換してくれるらしい...) 31 # これはnumpy配列か? 32 img = zscore(img) 33 34 35 # chwに変換 36 img = np.transpose(img,(2,0,1)) 37 # print(img) 38 c,h,w = img.shape 39 print("{},{},{}".format(c,h,w)) 40 41 42 43 44 # for j in nomlization: 45 # print(j) 46 if i ==0: 47 break 48 49 50 51 return img 52 53 54 55trans_square(imgs)

まとめ

複数ある画像データから画像をリサイズしました。これを標準化して
返り値を取得したいです。勝手な予想なのですがh,w,cの三つのように標準化した値もみっつあるのではないでしょうか。

となると、例えば0.1, 1, 0のような三つの値が出てくることが予想されます。
これらの値を取得してほしいです。

これはあわよくばですが,おそらくnumpy配列型になった標準化された画像データたちをテンソル化できる方がいれば最高です。

本当に初心者過ぎて申し訳ないですが、お力を貸していただければと思います....

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2020/08/03 06:16 編集

おそらく、標準化したデータをディープラーニングに使うのだと思いますが、ライブラリは Pytorch でしょうか?もしそうであれば、Pytorch の機能を使ったやり方を案内しますが。
oinari03

2020/08/03 09:54

お願いします!
oinari03

2020/08/03 09:55

ぱいとーちです!!
oinari03

2020/08/03 12:30

pytorchのを使おうと思っています。transpose.composeというものでしょうか.... その時にリサイズしたデータを標準化してどのように渡すのかというのが想像できません....
guest

回答1

0

ベストアンサー

(C, H, W) の正規化済みのテンソルを作りたいのであれば、以下の Transform を使えばできます。
正規化は transforms.ToTensor() でできます。

python

1from PIL import Image 2from torchvision import transforms as transforms 3 4img = Image.open("sample.jpg") 5 6transform = transforms.Compose( 7 [transforms.Resize((256, 256)), transforms.ToTensor()] 8) 9img_tensor = transform(img) 10print(img_tensor.shape) # torch.Size([3, 256, 256]) 正規化済み

Pytorch について詳しくないのであれば、1からコードを書くのではなく、クラス分類のサンプルや解説記事のコードをまずは動かしてみるなど、使い方を覚えたほうがいいと思います。


参考リンク

投稿2020/08/03 12:44

編集2020/08/03 12:45
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oinari03

2020/08/03 16:57

解答ありがとうございます。こちらのコードですが、画像を開いてimgに渡すところでcv2.imreadではだめなのでしょうか?なぜPILのopenを使っているのでしょうか
tiitoi

2020/08/03 17:00 編集

Pytorch の Transform が PIL の Image オブジェクトしか対応していないので、PIL を使って画像を開いています。OpenCV の imread() で開いた画像を渡したらエラーになります。
oinari03

2020/08/06 03:05

ありがたいです!! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問