🎄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回答

1517閲覧

USBカメラ×Neural Network Consoleを用いたリアルタイム推論のエラー

max12345

総合スコア20

Neural Network Console

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

OpenCV

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

機械学習

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

コードレビュー

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

Python

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

0グッド

0クリップ

投稿2021/01/13 05:18

編集2021/01/14 06:44

https://teratail.com/questions/315284#reply-439497 
URLを参考にして、プログラムを実行すると、以下のエラー文がでて推論できません。考えられる原因はなんでしょうか。 

#エラー文
File "C:\Users\username\Desktop\output\capture.py", line 106, in <module>
y = network(x, t)

File "C:\Users\username\Desktop\output\capture.py", line 16, in network
h = PF.binary_connect_affine(x, name='BinaryConnectAffine')

TypeError: binary_connect_affine() missing 1 required positional argument: 'n_outmaps'

#プログラム

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 14def network(x, y, test=False): 15 # Input:x -> 3,250,250 16 # BinaryConnectAffine -> 100 17 h = PF.binary_connect_affine(x,(100), name='BinaryConnectAffine') 18 # BatchNormalization 19 h = PF.batch_normalization(h, (1,), 0.9, 0.0001, not test, name='BatchNormalization') 20 # ReLU 21 h = F.relu(h, True) 22 # BinaryConnectAffine_2 23 h = PF.binary_connect_affine(h,(100), name='BinaryConnectAffine_2') 24 # BatchNormalization_2 25 h = PF.batch_normalization(h, (1,), 0.9, 0.0001, not test, name='BatchNormalization_2') 26 # ReLU_2 27 h = F.relu(h, True) 28 # BinaryConnectAffine_3 29 h = PF.binary_connect_affine(h,(100), name='BinaryConnectAffine_3') 30 # BatchNormalization_3 31 h = PF.batch_normalization(h, (1,), 0.9, 0.0001, not test, name='BatchNormalization_3') 32 # ReLU_3 33 h = F.relu(h, True) 34 # BinaryConnectAffine_4 -> 26 35 h = PF.binary_connect_affine(h, (26), name='BinaryConnectAffine_4') 36 # BatchNormalization_4 37 h = PF.batch_normalization(h, (1,), 0.9, 0.0001, not test, name='BatchNormalization_4') 38 # Softmax 39 h = F.softmax(h) 40 # CategoricalCrossEntropy -> 1 41 #h = F.categorical_cross_entropy(h, y) 42 return h 43 44 45 46 47class_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'] 48cap = cv2.VideoCapture(0) # 任意のカメラ番号に変更する 49 50 51new_dir_path = "./realtime/" 52os.makedirs(new_dir_path, exist_ok=True) 53 54 #カメラスタート 55while True: 56 57 ret, frame = cap.read() 58 cv2.imshow("camera", frame) 59 60 k = cv2.waitKey(1)&0xff # キー入力を待つ 61 if k == ord('p'): 62 63 # 「p」キーで画像を保存 64 65 date = datetime.now().strftime("%Y%m%d_%H%M%S") 66 path = new_dir_path + date +".png" 67 cv2.imwrite(path, frame) 68 image_gs = cv2.imread(path) 69 70 path = new_dir_path + date +".png" 71 dst = cv2.resize(image_gs,(250,250)) 72 cv2.imwrite(path, dst) 73 74 f = pd.DataFrame(columns=["x:data","y:data"]) 75 xdata = path 76 ydata = 0 77 new_name = pd.Series([xdata,ydata],index=f.columns) 78 f = f.append(new_name, ignore_index=True) 79 f.to_csv('valu.csv',index=False,header = True ) 80 81 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) 82 83 84 path = new_dir_path + "test" +".png" 85 cv2.imwrite(path, frame) 86 image_gs = cv2.imread(path) 87 88 path = new_dir_path + date +".png" 89 dst = cv2.resize(image_gs,(250,250)) 90 cv2.imwrite(path, dst) 91 92 f = pd.DataFrame(columns=["x:data","y:data"]) 93 xdata = path 94 ydata = 0 95 new_name = pd.Series([xdata,ydata],index=f.columns) 96 f = f.append(new_name, ignore_index=True) 97 f.to_csv('valu.csv',index=False,header = True ) 98 99 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) 100 101 102 #ネットワークの構築 103 nn.clear_parameters() 104 x = nn.Variable((1,3,250,250)) 105 t = nn.Variable((1,1)) 106 y = network(x, t) 107 108 nn.load_parameters('‪C:\Users\username\Desktop\output\yubidata.files\20210113_161413\results.nnp') 109 print("load model") 110 111 for i in range(test_data.size): 112 113 x.d, t.d = test_data.next() 114 y.forward() 115 print(y.d[0]) 116 print(np.argmax(y.d[0])) 117 print(class_names[np.argmax(y.d[0])]) 118 119 elif k == ord('q'): 120 # 「q」キーが押されたら終了する 121 122 break 123 124 # キャプチャをリリースして、ウィンドウをすべて閉じる 125cap.release() 126cv2.destroyAllWindows()

#ネットワーク構造
イメージ説明
#学習結果
イメージ説明
#学習時に使った画像のパス AからZのフォルダ
イメージ説明
#CSVファイルの中身 変更後
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

考えられる原因

「n_outmaps」を指定してないから
TypeError: binary_connect_affine() missing 1 required positional argument: 'n_outmaps'

投稿2021/01/13 05:33

jbpb0

総合スコア7653

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

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

max12345

2021/01/13 05:50

どこに付け加えてるのか困っています
max12345

2021/01/13 06:20

難しいですね。。(汗)
jbpb0

2021/01/13 06:29

exampleのコードの 「PF.binary_connect_affine(c2, 50)」 とか 「PF.binary_connect_affine(c3, 10)」 とかの「10」とか「50」みたいに、適切な数値を書いたらいいのではないんですか?
max12345

2021/01/13 08:02

h = PF.binary_connect_affine(h, (26,), name='BinaryConnectAffine_4')の数字を変えてみても同じでした
jbpb0

2021/01/13 08:04

4カ所の「PF.binary_connect_affine(...」の全てに数値入れました?
max12345

2021/01/13 08:32 編集

4か所に数値をいれると以下のエラーがでます。 File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\get_file_handle.py", line 25, in get_file_handle_load f = zipfile.ZipFile(path, 'r') File "C:\Users\username\anaconda3\lib\zipfile.py", line 1250, in __init__ self.fp = io.open(file, filemode) OSError: [Errno 22] Invalid argument: '\u202aC:\Users\username\Desktop\output\yubidata.files\20210113_161413\results.nnp'
jbpb0

2021/01/13 08:43

質問のコードを見ると、「results.nnp」を読んでいるのは y = network(x, t) よりも後だから、数値を入れたことによってnetwork()のエラーが無くなって次に進んで、別のエラーが出た、ということでは?? (この質問は解決した) あと、新たなエラーは、「C:\...」の左に「\u202a」という余計なものが付いてるからでは??
max12345

2021/01/13 10:16

プログラムには\u202aと入れていないのですが、なんでなんでしょう。?
jbpb0

2021/01/13 10:30 編集

上記のエラーが出てるところで、質問に挙げてるコードの〇行目のここを実行してるとき、的なのも書かれてるはずですが、そこも含めてエラーを全部書いてください 【追記】これはもう要らないです
jbpb0

2021/01/13 10:29 編集

https://teratail.com/questions/295060 と似てますけど、この方はコピペしてたのを手入力で入力し直したら直った、とのこと ソースファイルに、見えない文字が紛れ込んでるのかな
max12345

2021/01/14 03:59

h = PF.binary_connect_affine(x, (100), name='BinaryConnectAffine') h = PF.binary_connect_affine(h, (100), name='BinaryConnectAffine_2') h = PF.binary_connect_affine(h, (100), name='BinaryConnectAffine_3') h = PF.binary_connect_affine(h(26,),name='BinaryConnectAffine_4') に設定すると動きました。 ですが、全部認識結果が「I」になります。 1回目 \yubidata.files\20210112_183426\results.nnp load model [0.0515764 0.03382783 0.03344674 0.04046948 0.04542958 0.03339774 0.02917062 0.03195586 0.06075697 0.05417511 0.03260745 0.02741679 0.03162789 0.05240215 0.02787241 0.04017822 0.02635443 0.04595985 0.03558886 0.0456812 0.03325438 0.03321949 0.03107332 0.038652530.04287406 0.04103065] 8 I \yubidata.files\20210112_183426\results.nnp 2回目 load model [0.0515764 0.03382783 0.03344674 0.04046948 0.04542958 0.03339774 0.02917062 0.03195586 0.06075697 0.05417511 0.03260745 0.02741679 0.03162789 0.05240215 0.02787241 0.04017822 0.02635443 0.04595985 0.03558886 0.0456812 0.03325438 0.03321949 0.03107332 0.03865253 0.04287406 0.04103065] 8 I
jbpb0

2021/01/14 04:07

1回目と2回目は、入力画像は違うのですか? 結果が全く同じですけど
jbpb0

2021/01/14 04:12 編集

>h = PF.binary_connect_affine(h(26,),name='BinaryConnectAffine_4') に設定すると動きました。 は、 h = PF.binary_connect_affine(h,(26),name='BinaryConnectAffine_4') ではないですか? 「26,」のカンマが無いと動かないのですか? PF.binary_connect_affine()のことを良く知らないので、外していたらごめんなさい
max12345

2021/01/14 04:19

↑そこは、誤字です。すみません。  何度撮っても全く同じ結果になります。
jbpb0

2021/01/14 04:21

> def network(x, y, test=False): でtestのデフォルト値がFalseなので、推論時はtest=Trueにしないといけないのではないでしょうか? y = network(x, t) ↓ y = network(x, t, test=True)
jbpb0

2021/01/14 04:29

> 何度撮っても全く同じ結果になります。 カメラのレンズを隠して、撮影画像が真っ黒になるようにして、やってみてください もしそれでも同じ結果になるなら、根本的に何かおかしい ただし、グラフを見ると学習はできているようなので、学習と推論のネットワークが同じものなら、ちゃんと画像を入力したら、その画像に応じた結果が出てくるはずですよね (学習させたネットワークは、今推論に使ってるのと同じネットワークですよね?) カメラで撮影した画像ではなく、学習に使った画像をどれか1枚選んで入力させたら、出力は変わりますか? もしそれでもダメなら、学習時と条件が違うことになるので、その原因を探して直さないと
max12345

2021/01/14 04:29

訂正しました。 すると、今度はすべてMに推論されます。 load model [9.7630862e-03 9.3023442e-02 7.2787539e-04 1.6614092e-04 2.2879975e-02 9.7277027e-04 4.3072455e-02 1.1534660e-02 9.7264547e-04 7.1016606e-03 2.4919666e-03 2.0865960e-01 3.0631697e-01 1.1173449e-03 2.1491932e-02 1.2046617e-01 2.7991775e-02 1.9179404e-03 1.7600974e-05 4.8410583e-02 9.7565830e-04 7.0870705e-03 6.6945809e-03 2.2743765e-02 3.7295003e-03 2.9672911e-02] 12 M
jbpb0

2021/01/14 04:55

コードに2回出てくる 「f.to_csv('C:\Users\username\Desktop\output\valu.csv',index=False,header = True )」 を両方ともコメント化したら「valu.csv」が更新されないので、既存の「valu.csv」が使われますから、そこに学習時に使った画像のパスを書いておけば、それでの推論がされるはずですよね その結果はどうなりますでしょうか? 学習に使った画像はたくさんあると思うので、それらをいろいろ変えて推論させたら、ちゃんと画像に応じて結果が変わりますでしょうか? もしそれでうまくいかないなら、カメラで撮影した画像でも当然うまくいきません
max12345

2021/01/14 05:37

#をつけてコメント化する #f.to_csv('valu.csv',index=False,header = True ) ここまではわかりましたが、学習時に使った画像のパスはこのすぐ下に書くのですか?
jbpb0

2021/01/14 05:43

pythonのコードではなく「valu.csv」に書きます 最後に実行したときの「valu.csv」が残ってますよね それをエディタ等で開いて、そこに書いてある(最後にカメラ使って推論したときの画像パス)を、学習時に使った画像のパスに書き換えて、保存 (ファイル名や拡張子や、ファイルの文字コードや改行コード等は変えずに、内容のパスだけ書き換えて保存する)
max12345

2021/01/14 06:46

CSVファイルの中身を変更しました。 またエラーが。。。 ``` File "C:\Users\username\Desktop\output\capture.py", line 79, in <module> test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_iterator.py", line 581, in data_iterator_csv_dataset return data_iterator(ds, File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_iterator.py", line 406, in data_iterator ds = DataSourceWithFileCache(data_source=data_source, File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source.py", line 453, in __init__ self._create_cache() File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source.py", line 326, in _create_cache self._store_data_to_cache_buffer(self._position) File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source.py", line 275, in _store_data_to_cache_buffer self._save_cache_to_file() File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source.py", line 209, in _save_cache_to_file pool.map(get_data, [(pos, q) for pos in self._cache_positions]) File "C:\Users\username\anaconda3\lib\multiprocessing\pool.py", line 364, in map return self._map_async(func, iterable, mapstar, chunksize).get() File "C:\Users\username\anaconda3\lib\multiprocessing\pool.py", line 771, in get raise self._value File "C:\Users\username\anaconda3\lib\multiprocessing\pool.py", line 125, in worker result = (True, func(*args, **kwds)) File "C:\Users\username\anaconda3\lib\multiprocessing\pool.py", line 48, in mapstar return list(map(*args)) File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source.py", line 198, in get_data d = self._data_source._get_data(pos) File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source_implements.py", line 430, in _get_data return tuple(self._process_row(self._rows[self._order[position]])) File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source_implements.py", line 407, in _process_row values[variable] = self._get_value( File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source_implements.py", line 425, in _get_value with self._filereader.open(value) as f: File "C:\Users\username\anaconda3\lib\contextlib.py", line 113, in __enter__ return next(self.gen) File "C:\Users\username\anaconda3\lib\site-packages\nnabla\utils\data_source_loader.py", line 176, in open f = open(filename, 'rb') FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\username\Desktop\output\A_1.png' ```
jbpb0

2021/01/14 07:07 編集

> FileNotFoundError: [Errno 2] No such file or directory: そんなファイル無い、って言われてますけど、 > 'C:\Users\username\Desktop\output\A_1.png' は合ってますか? 質問で画像で挙げてるcsvだとフォルダの区切りは「\」(円マーク一つ)ですが、今回修正した「valu.csv」もそれと同じですか?
jbpb0

2021/01/14 07:56

下記のコミュニティに参加して質問する方が、NNCに詳しい方からアドバイスをもらえると思いますよ https://dl.sony.com/ja/community/
jbpb0

2021/01/14 09:23

teratailで質問を続ける場合でも、元々の質問の binary_connect_affine() でエラーが出る件は解決したのだから、ここで続けるのではなく、別の質問にしてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問