質問編集履歴
9
ソースコード(最新)を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -70,6 +70,33 @@
|
|
70
70
|
print(test)
|
71
71
|
```
|
72
72
|
|
73
|
+
```_ソースコード(最新)
|
74
|
+
import cv2
|
75
|
+
import numpy as np
|
76
|
+
|
77
|
+
#モデルを読み込み
|
78
|
+
loaded_model = models.load_model('./model/model-40.h5')
|
79
|
+
|
80
|
+
# 画像の読み込み
|
81
|
+
test_img = cv2.imread("img01.jpg")
|
82
|
+
|
83
|
+
# 画像のリサイズと前処理
|
84
|
+
resized_img = cv2.resize(test_img, (300, 300))
|
85
|
+
gray_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY)
|
86
|
+
normalized_img = gray_img / 255 # 正規化
|
87
|
+
|
88
|
+
input_img = np.expand_dims(normalized_img, axis=-1) # チャンネルの次元を追加
|
89
|
+
|
90
|
+
# モデルの予測
|
91
|
+
prediction = loaded_model.predict(np.array([input_img]))
|
92
|
+
|
93
|
+
#結果を出力
|
94
|
+
threshold = 0.5
|
95
|
+
y_pred = prediction >= threshold
|
96
|
+
print(y_pred)
|
97
|
+
print(prediction)
|
98
|
+
```
|
99
|
+
|
73
100
|
### 試したこと・調べたこと
|
74
101
|
- [x] teratailやGoogle等で検索した
|
75
102
|
- [ ] ソースコードを自分なりに変更した
|
8
5.学習終了後、学習時に用いた検証画像で予測させた結果 追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -209,6 +209,12 @@
|
|
209
209
|
・逆さ画像は学習させても認識できない。
|
210
210
|
→学習画像数が不足している?それともこの段階で認識できないのはおかしい?
|
211
211
|
|
212
|
+
<前処理>
|
213
|
+
・学習時の前処理は正規化、リサイズ、グレースケール化を実施。
|
214
|
+
モデルロード後の前処理も同じ処理を実施。
|
215
|
+
※コードは次のURLに記載:https://teratail.com/questions/ohu1ivc9a3j5ah
|
216
|
+
|
217
|
+
|
212
218
|

|
213
219
|
|
214
220
|
### 補足
|
7
5.学習終了後、学習時に用いた検証画像で予測させた結果 追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -169,6 +169,7 @@
|
|
169
169
|
数値での出力なので、解釈に困っています。
|
170
170
|
出力値はねじの個数に反応してそうなのですが、
|
171
171
|
これがねじの個数を認識している数値なのか、そもそもねじを正しく認識できているのか不明です。
|
172
|
+
⇒学習時の検証画像のみでの結果を確認しました(試した事5に記載しています)
|
172
173
|
|
173
174
|
```CNNの出力層
|
174
175
|
#畳み込み層~プーリング層
|
@@ -198,5 +199,17 @@
|
|
198
199
|
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
|
199
200
|
```
|
200
201
|
|
202
|
+
5.学習終了後、学習時に用いた検証画像で予測させた結果
|
203
|
+
検証画像を一つずつ予測させた結果は下表の通りです。
|
204
|
+
学習時の前処理と検証時の前処理が異なる?
|
205
|
+
|
206
|
+
<結果>
|
207
|
+
・予測は8割程度合っている。
|
208
|
+
→学習の検証で用いた画像をそのまま使っているので、結果が異なる事はおかしい?
|
209
|
+
・逆さ画像は学習させても認識できない。
|
210
|
+
→学習画像数が不足している?それともこの段階で認識できないのはおかしい?
|
211
|
+
|
212
|
+

|
213
|
+
|
201
214
|
### 補足
|
202
215
|
Python 3.8.3
|
6
出力層を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -170,5 +170,33 @@
|
|
170
170
|
出力値はねじの個数に反応してそうなのですが、
|
171
171
|
これがねじの個数を認識している数値なのか、そもそもねじを正しく認識できているのか不明です。
|
172
172
|
|
173
|
+
```CNNの出力層
|
174
|
+
#畳み込み層~プーリング層
|
175
|
+
model.add(Conv2D(filters=16,kernel_size=(7,7),strides=(2,2),padding='same',activation='relu',input_shape=(300,300,1)))
|
176
|
+
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))
|
177
|
+
|
178
|
+
model.add(Conv2D(filters=32,kernel_size=(3,3),activation='relu',padding='same'))
|
179
|
+
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))
|
180
|
+
|
181
|
+
model.add(Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same"))
|
182
|
+
model.add(MaxPooling2D(pool_size = (2,2), strides =(2,2)))
|
183
|
+
|
184
|
+
model.add(Conv2D(filters=128, kernel_size=(3,3), activation="relu", padding="same"))
|
185
|
+
model.add(MaxPooling2D(pool_size = (2,2), strides =(2,2)))
|
186
|
+
|
187
|
+
model.add(Conv2D(filters=256, kernel_size=(3,3), activation="relu", padding="same"))
|
188
|
+
model.add(MaxPooling2D(pool_size = (2,2), strides =(2,2)))
|
189
|
+
|
190
|
+
#全結合層
|
191
|
+
model.add(Flatten())
|
192
|
+
|
193
|
+
model.add(Dense(units=64,activation='relu'))
|
194
|
+
model.add(Dropout(rate=0.2))
|
195
|
+
model.add(Dense(units=1,activation='sigmoid'))
|
196
|
+
|
197
|
+
#コンパイル→ニューラルネットワークモデルの生成終了
|
198
|
+
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
|
199
|
+
```
|
200
|
+
|
173
201
|
### 補足
|
174
202
|
Python 3.8.3
|
5
画像修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -78,7 +78,6 @@
|
|
78
78
|
|
79
79
|
##### 上記の詳細・結果
|
80
80
|
1.テスト用画像(img00.jpg)を300*300のサイズに変更。
|
81
|
-

|
82
81
|
|
83
82
|
2.model.summary()でモデルの情報を確認しました。
|
84
83
|
|
4
4.出力された数値に関してを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -133,13 +133,14 @@
|
|
133
133
|
しかし、学習させたねじ画像と、何もない画像の2種類で
|
134
134
|
試したところ、どちらも同じ出力であった為、
|
135
135
|
正しく判断できていないようです。
|
136
|
+
→正規化でうまく数値の出力はできるようになりました。
|
136
137
|
|
137
138
|
尚、学習させたモデルを混同行列で検証した結果は下記通りで、
|
138
139
|
学習自体は問題なくできてそうです。
|
139
140
|
|
140
141
|

|
141
142
|
|
142
|
-
``` _画像前処理追加
|
143
|
+
``` _画像前処理・正規化追加
|
143
144
|
import cv2
|
144
145
|
import numpy as np
|
145
146
|
|
@@ -152,25 +153,23 @@
|
|
152
153
|
# 画像のリサイズと前処理
|
153
154
|
resized_img = cv2.resize(test_img, (300, 300))
|
154
155
|
gray_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY)
|
156
|
+
normalized_img = gray_img / 255 # 正規化
|
155
|
-
input_img = np.expand_dims(
|
157
|
+
input_img = np.expand_dims(normalized_img, axis=-1) # チャンネルの次元を追加
|
156
158
|
|
157
159
|
# モデルの予測
|
158
160
|
prediction = loaded_model.predict(np.array([input_img]))
|
159
161
|
print(prediction)
|
160
162
|
```
|
161
|
-
↓①img00.jpgにねじ画像で保存した場合
|
162
|
-

|
163
163
|
|
164
|
-
|
164
|
+
4.出力された数値に関して
|
165
|
-
1/1 [==============================] - 0s 117ms/step
|
166
|
-
[[0.]]
|
167
|
-
```
|
168
|
-
|
165
|
+
予測させた画像と出力された数値の一覧は下表の通りです。
|
169
|
-

|
170
166
|
|
167
|
+

|
168
|
+
|
169
|
+
正しく予測できていれば、「True」が出力されると思っていましたが
|
171
|
-
|
170
|
+
数値での出力なので、解釈に困っています。
|
171
|
+
出力値はねじの個数に反応してそうなのですが、
|
172
|
-
|
172
|
+
これがねじの個数を認識している数値なのか、そもそもねじを正しく認識できているのか不明です。
|
173
|
-
|
173
|
+
|
174
|
-
```
|
175
174
|
### 補足
|
176
175
|
Python 3.8.3
|
3
混同行列での検証画像追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -129,9 +129,15 @@
|
|
129
129
|
|
130
130
|
3.ご教示頂いたコードで試した結果
|
131
131
|
エラーの発生はなくなりました。
|
132
|
+
|
132
133
|
しかし、学習させたねじ画像と、何もない画像の2種類で
|
133
134
|
試したところ、どちらも同じ出力であった為、
|
134
135
|
正しく判断できていないようです。
|
136
|
+
|
137
|
+
尚、学習させたモデルを混同行列で検証した結果は下記通りで、
|
138
|
+
学習自体は問題なくできてそうです。
|
139
|
+
|
140
|
+

|
135
141
|
|
136
142
|
``` _画像前処理追加
|
137
143
|
import cv2
|
2
試した事を追加(3.ご教示頂いたコードで試した結果)
test
CHANGED
File without changes
|
test
CHANGED
@@ -127,5 +127,44 @@
|
|
127
127
|
_________________________________________________________________
|
128
128
|
```
|
129
129
|
|
130
|
+
3.ご教示頂いたコードで試した結果
|
131
|
+
エラーの発生はなくなりました。
|
132
|
+
しかし、学習させたねじ画像と、何もない画像の2種類で
|
133
|
+
試したところ、どちらも同じ出力であった為、
|
134
|
+
正しく判断できていないようです。
|
135
|
+
|
136
|
+
``` _画像前処理追加
|
137
|
+
import cv2
|
138
|
+
import numpy as np
|
139
|
+
|
140
|
+
#モデルを読み込み
|
141
|
+
loaded_model = models.load_model('./model/model-40.h5')
|
142
|
+
|
143
|
+
# 画像の読み込み
|
144
|
+
test_img = cv2.imread("img00.jpg")
|
145
|
+
|
146
|
+
# 画像のリサイズと前処理
|
147
|
+
resized_img = cv2.resize(test_img, (300, 300))
|
148
|
+
gray_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY)
|
149
|
+
input_img = np.expand_dims(gray_img, axis=-1) # チャンネルの次元を追加
|
150
|
+
|
151
|
+
# モデルの予測
|
152
|
+
prediction = loaded_model.predict(np.array([input_img]))
|
153
|
+
print(prediction)
|
154
|
+
```
|
155
|
+
↓①img00.jpgにねじ画像で保存した場合
|
156
|
+

|
157
|
+
|
158
|
+
```_①の出力結果
|
159
|
+
1/1 [==============================] - 0s 117ms/step
|
160
|
+
[[0.]]
|
161
|
+
```
|
162
|
+
↓①img00.jpgに白画像で保存した場合
|
163
|
+

|
164
|
+
|
165
|
+
```_②の出力結果
|
166
|
+
1/1 [==============================] - 0s 109ms/step
|
167
|
+
[[0.]]
|
168
|
+
```
|
130
169
|
### 補足
|
131
170
|
Python 3.8.3
|
1
「試した事」に画像のプロパティを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -78,6 +78,7 @@
|
|
78
78
|
|
79
79
|
##### 上記の詳細・結果
|
80
80
|
1.テスト用画像(img00.jpg)を300*300のサイズに変更。
|
81
|
+

|
81
82
|
|
82
83
|
2.model.summary()でモデルの情報を確認しました。
|
83
84
|
|