回答編集履歴
1
a
answer
CHANGED
@@ -10,4 +10,44 @@
|
|
10
10
|
> 私はDeep Learningの学習を始めたばかりのため、原因が分かりませんでした。モデルの正答率に対して実際にモデルの画像を分類させたときの正答率が低い原因を教えていただきたいです。
|
11
11
|
|
12
12
|
MNIST と画像の性質が異なるような場合、精度がでないことが考えられます。
|
13
|
-
推論しようとしている画像 img2 がどのような画像か cv2.imwrite() で保存して、質問欄に貼ることはできますか?
|
13
|
+
推論しようとしている画像 img2 がどのような画像か cv2.imwrite() で保存して、質問欄に貼ることはできますか?
|
14
|
+
|
15
|
+
## 追記
|
16
|
+
|
17
|
+

|
18
|
+
質問者さんが推論しようとしている画像
|
19
|
+
|
20
|
+

|
21
|
+
MNIST の画像
|
22
|
+
|
23
|
+
見ていただければわかると思いますが、推論しようとしている画像が学習にしようした MNIST の画像と性質が大きく異なっていますね。
|
24
|
+
多少の違いであれば大丈夫なのですが、学習したデータと性質が大きくかけ離れている場合、推論はうまくいかないでしょう。
|
25
|
+
|
26
|
+
以下のように、画像処理で見た目を MNIST の画像に近づけたところ、6 と正しく認識されました。
|
27
|
+
|
28
|
+
```
|
29
|
+
import cv2
|
30
|
+
import matplotlib.pyplot as plt
|
31
|
+
|
32
|
+
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
|
33
|
+
img = cv2.resize(img, (28, 28))
|
34
|
+
|
35
|
+
# 表示
|
36
|
+
plt.imshow(img, cmap='gray')
|
37
|
+
plt.show()
|
38
|
+
|
39
|
+
img = cv2.bitwise_not(img) # ネガポジ反転
|
40
|
+
_, img = cv2.threshold(img, 110, 255, cv2.THRESH_TOZERO) # 110 未満の輝度値を0
|
41
|
+
img = cv2.morphologyEx(img, cv2.MORPH_DILATE, np.ones((2, 2), np.uint8)) # 膨張演算で白い線を太くする。
|
42
|
+
|
43
|
+
# 表示
|
44
|
+
plt.imshow(img, cmap='gray')
|
45
|
+
plt.show()
|
46
|
+
|
47
|
+
x = img.reshape(1, -1) # (H, W) -> (1, H * W)
|
48
|
+
pred_label = model.predict_classes(x)
|
49
|
+
print(pred_label) # 推論結果 6
|
50
|
+
```
|
51
|
+
|
52
|
+

|
53
|
+
前処理した結果
|