🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

OpenCV

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1167閲覧

openCVと機械学習を用いたリアルタイム推論

max12345

総合スコア20

Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

OpenCV

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/19 03:37

https://arkouji.cocolog-nifty.com/blog/2019/02/sony-neural-net.html
1つ目のURLで静止画で推論をしたところ、こちらでは上手く26ラベルの推論がそれぞれできました。

https://jump1268.hatenablog.com/entry/2021/01/04/144112
しかし、上のブログを参考にして、オリジナルデータからWEBカメラからリアルタイムで推論をしましたが、何度も試しても同じラベル(I)しか表示されません。考えられる原因は何でしょうか?(パラメーターは若干変化していますが。。)
#ネットワーク層と学習結果
イメージ説明
イメージ説明

#実行結果

1回目 \cache_00000000_00000000.npy 2021-01-19 12:21:49,952 [nnabla][INFO]: Using DataSourceWithMemoryCache 2021-01-19 12:21:49,952 [nnabla][INFO]: DataSource with shuffle(False) 2021-01-19 12:21:49,952 [nnabla][INFO]: On-memory 2021-01-19 12:21:49,952 [nnabla][INFO]: Using DataIterator 2021-01-19 12:21:54,181 [nnabla][INFO]: Parameter load (<built-in function format>): C:\Users\username\Desktop\output\yubidata.files\20210118_165022\results.nnp load model [0. 0. 0. 0.00002985 0.00000001 0.00000944 0. 0.00000086 0.848121 0.00000203 0.00003129 0.00002938 0. 0.12772788 0.00000001 0.0000142 0.00139796 0. 0. 0. 0.00000012 0.00000001 0.00000001 0. 0.02260908 0.0000269 ] 8 I 2回目 \cache_00000000_00000000.npy 2021-01-19 12:21:59,198 [nnabla][INFO]: Using DataSourceWithMemoryCache 2021-01-19 12:21:59,198 [nnabla][INFO]: DataSource with shuffle(False) 2021-01-19 12:21:59,198 [nnabla][INFO]: On-memory 2021-01-19 12:21:59,198 [nnabla][INFO]: Using DataIterator 2021-01-19 12:22:03,469 [nnabla][INFO]: Parameter load (<built-in function format>): C:\Users\username\Desktop\output\yubidata.files\20210118_165022\results.nnp load model [0. 0. 0. 0.0000274 0.00000001 0.00000936 0. 0.00000072 0.8445436 0.00000197 0.00002842 0.00002868 0. 0.13168676 0.00000001 0.00001226 0.00130046 0. 0. 0. 0.00000013 0.00000001 0.00000001 0. 0.02233552 0.00002472] 8 I

#プログラム

python

1import nnabla as nn 2import nnabla.functions as F 3import nnabla.parametric_functions as PF 4from nnabla.utils.data_iterator import data_iterator_csv_dataset 5import os 6import cv2 7from datetime import datetime 8import pandas as pd 9import matplotlib.pyplot as plt 10import numpy as np 11from PIL import Image 12 13 14 15def network(x, y, test=False): 16 # Input:x -> 3,250,250 17 # Convolution -> 16,250,250 18 h = PF.convolution(x, 16, (3,3), (1,1), name='Convolution') 19 # ReLU 20 h = F.relu(h, True) 21 # BatchNormalization 22 h = PF.batch_normalization(h, (1,), 0.9, 0.0001, not test, name='BatchNormalization') 23 # MaxPooling -> 16,125,125 24 h = F.max_pooling(h, (2,2), (2,2)) 25 # Convolution_2 26 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution_2') 27 # ReLU_2 28 h = F.relu(h, True) 29 # BatchNormalization_2 30 h = PF.batch_normalization(h, (1,), 0.9, 0.0001, not test, name='BatchNormalization_2') 31 # MaxPooling_2 -> 16,62,62 32 h = F.max_pooling(h, (2,2), (2,2)) 33 # Convolution_3 34 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution_3') 35 # ReLU_3 36 h = F.relu(h, True) 37 # Convolution_4 38 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution_4') 39 # ReLU_4 40 h = F.relu(h, True) 41 # Convolution_5 42 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution_5') 43 # ReLU_5 44 h = F.relu(h, True) 45 # MaxPooling_3 -> 16,31,31 46 h = F.max_pooling(h, (2,2), (2,2)) 47 # Affine -> 100 48 h = PF.affine(h, (100,), name='Affine') 49 # ReLU_6 50 h = F.relu(h, True) 51 # Affine_2 52 h = PF.affine(h, (100,), name='Affine_2') 53 # ReLU_7 54 h = F.relu(h, True) 55 # Dropout 56 if not test: 57 h = F.dropout(h) 58 # Affine_3 -> 26 59 h = PF.affine(h, (26,), name='Affine_3') 60 # SoftmaxCrossEntropy -> 1 61 #h = F.softmax_cross_entropy(h, y) 62 h = F.softmax(h) 63 return h 64 65 66 67 68 69 70class_names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 71cap = cv2.VideoCapture(0) # 任意のカメラ番号に変更する 72 73 74new_dir_path = "./realtime/" 75os.makedirs(new_dir_path, exist_ok=True) 76 77 #カメラスタート 78while True: 79 80 ret, frame = cap.read() 81 # フレームが取得できない場合はループを抜ける 82 83 84 cv2.imshow("camera", frame) 85 86 k = cv2.waitKey(1)&0xff # キー入力を待つ 87 if k == ord('p'): 88 89 # 「p」キーで画像を保存 90 91 date = datetime.now().strftime("%Y%m%d_%H%M%S") 92 path = new_dir_path + date +".png" 93 cv2.imwrite(path, frame) 94 image_gs = cv2.imread(path) 95 96 path = new_dir_path + date +".png" 97 dst = cv2.resize(image_gs,(250,250)) 98 cv2.imwrite(path, dst) 99 100 f = pd.DataFrame(columns=["x:data","y:data"]) 101 xdata = path 102 ydata = 0 103 new_name = pd.Series([xdata,ydata],index=f.columns) 104 f = f.append(new_name, ignore_index=True) 105 f.to_csv('valu.csv',index=False,header = True ) 106 107 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) 108 109 110 path = new_dir_path + "test" +".png" 111 cv2.imwrite(path, frame) 112 image_gs = cv2.imread(path) 113 114 path = new_dir_path + date +".png" 115 dst = cv2.resize(image_gs,(250,250)) 116 cv2.imwrite(path, dst) 117 118 f = pd.DataFrame(columns=["x:data","y:data"]) 119 xdata = path 120 ydata = 0 121 new_name = pd.Series([xdata,ydata],index=f.columns) 122 f = f.append(new_name, ignore_index=True) 123 f.to_csv('valu.csv',index=False,header = True ) 124 125 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) 126 127 np.set_printoptions(suppress=True) 128 #ネットワークの構築 129 130 nn.clear_parameters() 131 x = nn.Variable((1,3,250,250)) 132 t = nn.Variable((1,1)) 133 y = network(x, t, test=True) 134 135 nn.load_parameters('C:\Users\username\Desktop\output\yubidata.files\20210118_165022\results.nnp') 136 print("load model") 137 138 for i in range(test_data.size): 139 140 x.d, t.d = test_data.next() 141 y.forward() 142 143 print(y.d[0]) 144 print(np.argmax(y.d[0])) 145 print(class_names[np.argmax(y.d[0])]) 146 147 elif k == ord('q'): 148 # 「q」キーが押されたら終了する 149 150 break 151 152 # キャプチャをリリースして、ウィンドウをすべて閉じる 153cap.release() 154cv2.destroyAllWindows() 155 156

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

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

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

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

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

jbpb0

2021/01/19 05:04

https://teratail.com/questions/316247 のベストアンサーのコメントにも書きましたけど、段階的に確認していく方がいいですよ > 1つ目のURLで静止画で推論をしたところ、こちらでは上手く26ラベルの推論がそれぞれできました。 でうまくいった画像ファイルのパスを「...\valu.csv"」にエディタ等で書いて実行したら、うまくいくのですか? 当然、「...\valu.csv"」をプログラムが書き換えないように、2ヵ所の「f.to_csv(...」は無効(コメント化)にした場合
jbpb0

2021/01/19 05:17 編集

# 「p」キーで画像を保存 の2行下の path = new_dir_path + date +".png" から、1回目の test_data = data_iterator_csv_dataset(... までは、要らないのでは? なぜならば、その次の行から、2回目の test_data = data_iterator_csv_dataset(... までで、test_dataの中身が変わってしまい、1回目にtest_dataに入れたことは「無かったこと」になっているからです 【追記】このコメントは、質問してる内容とは無関係です
guest

回答1

0

ベストアンサー

下記のように変えたら、動きませんか?
こちらで実際に動かして確認してないので、何か修正ミスってるかもしれないけど

[変更1]

python

1def network(x, y, test=False):

↓ 変更する

python

1def network(x, test=False):

 
[変更2] 下記を削除する(2ヵ所どちらも)

python

1 f = pd.DataFrame(columns=["x:data","y:data"]) 2 xdata = path 3 ydata = 0 4 new_name = pd.Series([xdata,ydata],index=f.columns) 5 f = f.append(new_name, ignore_index=True) 6 f.to_csv('valu.csv',index=False,header = True ) 7 8 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True)

 
[変更3] 下記を削除する

python

1 x = nn.Variable((1,3,250,250)) 2 t = nn.Variable((1,1)) 3 y = network(x, t, test=True)

 
[変更4]

python

1 for i in range(test_data.size): 2 3 x.d, t.d = test_data.next() 4 y.forward() 5 6 print(y.d[0]) 7 print(np.argmax(y.d[0])) 8 print(class_names[np.argmax(y.d[0])])

↓ 変更する

python

1 x = nn.Variable((1,3,250,250)) 2 x.d = cv2.resize(frame, (250,250)).transpose(2,0,1).reshape(x.shape) 3 y = network(x, test=True) 4 y.forward() 5 6 print(y.d[0]) 7 print(np.argmax(y.d[0])) 8 print(class_names[np.argmax(y.d[0])])

投稿2021/01/19 06:04

編集2021/01/19 06:26
jbpb0

総合スコア7653

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

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

max12345

2021/01/21 09:35

おお!!! 検出率はかなり悪いですが、ついにA~Zのアルファベットがでるようになりました! 一番の山場は乗り越えたと思います。 あとはNNC側でもう少しネットワーク層を調整します。
max12345

2021/01/21 09:35

jbpd0さん本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問