1
1

More than 3 years have passed since last update.

極座標MNIST

Last updated at Posted at 2019-10-27

Abstract

人の視野は中心ほど精細である。画像データにも被写体を中心に置いたデータが多い。
そこで、中心ほど分解能が高まる極座標形式での画像解析によって、特徴点を抽出しやすくなると考えた。
簡易な実験としてMNISTを極座標変換しての試行を試したが、結果として精度の向上は見られなかった。

実験内容

MNIST画像をOpenCVのLogPolarで極座標化したものに、基本的な畳み込み演算処理を施した。

  • 元画像

MNIST.png
     ↓

  • 極座標化

PolarMNIST.png

  • 極座標変換ソースコード

import numpy as np
import matplotlib.pyplot as plt
from dataset.mnist import load_mnist
import cv2

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)

px_train = np.zeros((500,1,28,28))
px_test = np.zeros((100,1,28,28))
for i in range(500):
    px_train[i][0] = cv2.logPolar(x_train[i][0], (14, 14), 9, cv2.WARP_FILL_OUTLIERS)
    if(i < 100):
        px_test[i][0] = cv2.logPolar(x_test[i][0], (14, 14), 9, cv2.WARP_FILL_OUTLIERS)

畳み込み演算処理は「ゼロから作るDeep Learning ――Pythonで学ぶディープラーニングの理論と実装(
斎藤 康毅 著)」のものを流用。処理時間の関係上、MNISTの冒頭、訓練500枚・評価100枚のみで学習。

実験結果

  • 通常画像:精度83%

=============== Final Test Accuracy ===============
test acc:0.83
test1.png

  • 極座標画像:精度77%

=============== Final Test Accuracy ===============
test acc:0.77
test2.png

考察

使用したデータの平均を取った画像では外周の情報は少ないと考えられるが、今回の実験では有意な差異が見られなかった。
MNISTデータの使用画素領域が広い為という理由が考えられるが、極座標解析で検索しても目立った実験が見つからなかったのは実験結果が有意義でない為とも考えられる。

  • 使用データの画素平均
    Mean.png

  • 使用データの最大画素
    Max.png

今後はデータ圧縮と組み合わせて性能評価したい。

(2019/11/14更新)
特徴量として、ドット平均との二乗差の合計で対数を取ってみた。


x_spec = sum(np.log(np.exp(1) + (x_train[:] - np.mean(x_train, axis = (0, 1)))**2))

print(np.shape(x_spec))
plt.imshow(x_spec[0])
plt.show()

spec.png

やっぱり中心に近い部分の方が情報量多いと思うんだけどなぁ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1