質問編集履歴

9

ソースコード(最新)を追加

2024/02/15 15:28

投稿

python01
python01

スコア11

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.学習終了後、学習時に用いた検証画像で予測させた結果 追加

2024/02/14 23:19

投稿

python01
python01

スコア11

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
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-15/74530da1-8851-451f-9dcb-1eef8f8d2fda.png)
213
219
 
214
220
  ### 補足

7

5.学習終了後、学習時に用いた検証画像で予測させた結果 追加

2024/02/14 17:53

投稿

python01
python01

スコア11

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-15/74530da1-8851-451f-9dcb-1eef8f8d2fda.png)
213
+
201
214
  ### 補足
202
215
  Python 3.8.3

6

出力層を追加

2024/02/13 23:48

投稿

python01
python01

スコア11

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

画像修正

2024/02/13 13:12

投稿

python01
python01

スコア11

test CHANGED
File without changes
test CHANGED
@@ -78,7 +78,6 @@
78
78
 
79
79
  ##### 上記の詳細・結果
80
80
  1.テスト用画像(img00.jpg)を300*300のサイズに変更。
81
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-12/513e3e02-c426-44c0-acc6-1f660f41abf3.jpeg)
82
81
 
83
82
  2.model.summary()でモデルの情報を確認しました。
84
83
 

4

4.出力された数値に関してを追加

2024/02/13 13:08

投稿

python01
python01

スコア11

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
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/8b39c865-6ba4-45cb-9d06-adf77af0d099.jpeg)
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(gray_img, axis=-1) # チャンネルの次元を追加
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
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/1fcea792-67e5-4c1a-b2c0-0a7aedfb45f5.jpeg)
163
163
 
164
- ```_①の出力結果
164
+ 4.出力された数値に関して
165
- 1/1 [==============================] - 0s 117ms/step
166
- [[0.]]
167
- ```
168
- ↓①img00.jpgに白画像で保存した場合
165
+ 予測させた画像と出力された数値の一覧は下表の通りす。
169
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/3b71714b-791f-4092-b295-0f8c254c6278.jpeg)
170
166
 
167
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/82a68a0a-a319-4093-9077-e18bf3ca1a54.png)
168
+
169
+ 正しく予測できていれば、「True」が出力されると思っていましたが
171
- ```_②の出力結果
170
+ 数値での出力なので、解釈に困っています。
171
+ 出力値はねじの個数に反応してそうなのですが、
172
- 1/1 [==============================] - 0s 109ms/step
172
+ これがねじの個数を認識している数値なのか、そもそもねじを正しく認識できているのか不明です。
173
- [[0.]]
173
+
174
- ```
175
174
  ### 補足
176
175
  Python 3.8.3

3

混同行列での検証画像追加

2024/02/13 04:38

投稿

python01
python01

スコア11

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/8b39c865-6ba4-45cb-9d06-adf77af0d099.jpeg)
135
141
 
136
142
  ``` _画像前処理追加
137
143
  import cv2

2

試した事を追加(3.ご教示頂いたコードで試した結果)

2024/02/13 01:55

投稿

python01
python01

スコア11

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/1fcea792-67e5-4c1a-b2c0-0a7aedfb45f5.jpeg)
157
+
158
+ ```_①の出力結果
159
+ 1/1 [==============================] - 0s 117ms/step
160
+ [[0.]]
161
+ ```
162
+ ↓①img00.jpgに白画像で保存した場合
163
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-13/3b71714b-791f-4092-b295-0f8c254c6278.jpeg)
164
+
165
+ ```_②の出力結果
166
+ 1/1 [==============================] - 0s 109ms/step
167
+ [[0.]]
168
+ ```
130
169
  ### 補足
131
170
  Python 3.8.3

1

「試した事」に画像のプロパティを追加

2024/02/12 10:52

投稿

python01
python01

スコア11

test CHANGED
File without changes
test CHANGED
@@ -78,6 +78,7 @@
78
78
 
79
79
  ##### 上記の詳細・結果
80
80
  1.テスト用画像(img00.jpg)を300*300のサイズに変更。
81
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-12/513e3e02-c426-44c0-acc6-1f660f41abf3.jpeg)
81
82
 
82
83
  2.model.summary()でモデルの情報を確認しました。
83
84