2017年07月21日

Visual Studio Community 2017 + Anaconda 4.3.0 で Python環境の構築

AIとかDeep Learningが流行っていますね。色々なフレームワークが出来ていますが、Pythonを使ったものが多いので、Pythonの勉強をしてみることにします。環境としてはWindowsのVisual Studio使用です。

環境構築

まずはVisual Studioのインストールです。セットアップファイルが便利になっているので、インストールの時にPython開発にチェックしてインストールするだけです。どれを選べば良いのかいまいちわかりませんでしたが、Python 3 (3.6.0) (64ビット) Pythonネイティブ開発ツール、Anaconda3(4.3.0.1) (64ビット)辺りをインストールしました。

1. 新しいプロジェクトの作成→Python→PythonアプリケーションでPythonのプロジェクトを新規作成
2. ツール→Python→Python環境を選択→ドロップダウンリストから概要を選択→Anaconda3(2.7, 64-bit)を選択→新しいプロジェクトに対する既定の環境にする
3. プロジェクト→〇〇のプロパティ→全般→インタープリター:Anaconda 4.3.0(2.7, 64-bit)に変更

とりあえずはこのような感じです。最初Anaconda 4.3.0(3.6, 64-bit)のPython 3.6使用でやろうとしていたのですが、import numpy as npとすると、ImportError: DLL load failed: と出てうまくいきませんでした。[1]によると2.7にしましょうとありましたので、特にこだわりもないので2.7にしました。おそらく3.6でも動かせるのだと思いますので、必要があればやり方を調べたいと思います。

4. 文字コードの設定として1行目を下記のようにする
  # -*- coding: utf-8 -*-

後は[2]などを参考にMatplotlibを使って関数の描画や画像の表示を試してみました。

実行結果
figure_1.png figure_1-1.png
[2]の本を一通りやれば大体イメージは掴めそうですかね。

[1] NumPy library ImportError: DLL load failed: The specified procedure could not be found
[2] 斎藤 康毅 著,"ゼロから作るDeep Learning", オライリー・ジャパン
web拍手 by FC2
posted by シンドラー at 19:13 | Comment(0) | TrackBack(0) | Machine Learning | このブログの読者になる | 更新情報をチェックする

2017年07月12日

自己組織化マップを使った256色画像への減色

またあまり用途のない減色のテストです。以前はc-means法で減色していたのですが、時間がかかるのでもう少し別の方法で試してみることにしました。SOMも特に早い手法ではありませんが、c-means法と比べるとかなり速いです。SOMについては以前の記事でテストだけしていましたが、かなり前だったので書き直しました。

今回256色のパレットをSOMで学習しますので、マップとしては16x16となります。入力次元はRGBの3次元で、入力画像として512x512のLenna画像を使いました。

工夫した点?は下記のとおりです。
・最大試行回数maxTの1/3までは5x5のガウスフィルタ、残りの2/3は3x3のガウスフィルタを使用
・減衰係数alpha=0.1*exp(-2.3*(t/maxT))で計算し、初期0.1〜最終0.01ぐらいの係数になるように設定
・更新式はf(t+1)=(1.0-alpha*gauss)*f(t)+alpha*gauss*v(t)として、アルファブレンドで更新
・1回の更新は画像の全画素を使用するのではなくランダムに指定した数だけ選ぶ

実行結果
1回の更新で100画素ランダムに選んでマップ更新というのを500回繰り返した結果です(計50,000回の更新)。最初の数回は疑似輪郭が目立ってますが、Lenna画像は使用されている色が偏っている方なので、200回ぐらいの繰り返しで十分収束していそうです。

ただ、パレットの右下とか使われていなそうな領域が残っているので、必ず最も色が近いところを更新するのではなくもう少し何かランダム性を入れてもいいのかもしれません。
web拍手 by FC2
posted by シンドラー at 22:41 | Comment(0) | TrackBack(0) | Neural Network | このブログの読者になる | 更新情報をチェックする

2017年07月05日

凸多面体の内外判定について その2

とりあえず画像処理ソフトの方に組み込んで試してみました。

実行結果

いつ作ったのか覚えてないですが、良さそうな画像があったので試してみます。
circles.png
入力画像

drag_test_006.png
一番大きい円の色と思われる辺りを囲んだ結果

drag_test_007.png
右下の円の色と思われる辺りを囲んだ結果

HSV変換した分布領域を多面体で囲んで、領域内の色は白、それ以外は黒で2値化しています。色が似ていても(線形分離可能であれば)うまくいきそうです。複数領域選択とかできればもっとやりやすそうですが面倒ですね。

web拍手 by FC2
posted by シンドラー at 19:32 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2017年07月04日

凸多面体の内外判定について

2値化の範囲を決定する際に、数値で刻んで矩形領域を設定するのは効率が悪いし自由度も低いので、その辺をマウスでできるようにしようかなと思いました。

直方体の8頂点をマウスでドラッグできるようにするのですが、自由に動かすと凹面ができてしまいますので、各面の中心に頂点を追加して、面が凹面になる場合にはこの中央点を移動させて無理やり凸面に修正するようにしました。

マウスドラッグで頂点移動はこれまでもやってきたような行列変換でできます。

drag_test_001.png
drag_test_002.png
drag_test_003.png
PPTで作ってみましたが見づらいですね。

実行結果
drag_test_004.png
透視投影変換を基準にしているので直感性は低いかと思います。こういう矩形の選択には正射影が向いていそうです。

続いて点の内外判定についてです。直方体の頂点を移動させた凸多面体ですので、それぞれの面が構成する平面と点の内外判定を行えば判定できると思います。点と平面の距離などは以前のスライドに追記しました。


実行結果
drag_test_005.png

ちゃんと選択した範囲のみ青くなっているので合っているとは思います。点群がRGBやHSVなど画素の色を3次元空間に投影したものを考えていて、それをこういうやり方で範囲選択できれば2値化がうまくできるのではないかと思っていますが、それはこれから試してみる予定です。

web拍手 by FC2
posted by シンドラー at 21:46 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする