TensorFlowを使って画像の回転角度を予測するRotNetの導入手順を記載します。
RotNetは画像の正しい向きを予測し、正しい向きに補正することを可能にします。
RotNetは画像の正しい向きを予測し、正しい向きに補正することを可能にします。
左:回転画像、右:補正後の画像
出典: https://d4nst.github.io/2017/01/12/image-orientation/ |
RotNetとは?
畳み込みニューラルネットワークを用いて画像の特徴を学習し
画像の内容を解釈しながら画像の回転角度を検出します
このことにより
従来技術が画像内の直線を垂直、または水平になるように補正することに対し
RotNetでは画像内の内容の特徴を見て補正するため
上下反転に補正してしまう等のエラーを減少させることが可能となります
例えば下記のような手紙の画像の向きを修正する場合を考えます
この画像を従来技術の機械学習を用いない手法で補正する場合
単に文字列の向きを水平に保つことを考えるため
下記のようなエラーが起こり得ます
対してRotNetの場合
上記のような手紙を学習させておくことで正しい向きの手紙の特徴を学習します。
正しい文字列の向きを考慮した上で、画像全体の向きを予測するため上記エラーを減少させます。
注意点としてRotNetは手紙に何が書かれているかを分かっていません
あくまで、向きがわかるだけです
日本人の方が、ロシア語の手紙を見て内容は分かりませんが
なんとなくロシア語の文字を見て手紙の向きは分かる事と似ています
以降では、実際に動かしてみたいと思います。
RotNetの導入手順
GitHub: d4nst/RotNetのコードを実行環境に配置していきます
導入環境を汚さないためにminicondaを使って仮想環境上に構築していきます
conda環境作成
conda create -n RotNet python=3.7 -y conda activate RotNet cd RotNet mkdir workspace cd workspace
この環境にRotNetを導入していきます
code clone
git clone https://github.com/d4nst/RotNet.git cd RotNet
次にpipで必要なライブラリをインストールします
# proxy配下の場合 export HTTP_PROXY=http://"username":"passward"@"proxy":"port" export HTTPS_PROXY=http://"username":"passward"@"proxy":"port" pip install -r requirements.txt conda install tqdm
GPUを使用したい場合上記requirements.txtにtensorflow-gpuが含まれていないため
別途インストールが必要です
# 2度手間ですが念のため一旦アンインストールします pip uninstall tensorboard tensorflow tensorflow-estimator keras keras-applications keras-preprocessing conda uninstall cudatoolkit cudnn # tensorflow-gpuをインストール conda install tensorflow-gpu keras
次に学習済みモデルをダウンロードします
cd /RotNet/workspace/RotNet mkdir models # 下記からzipをダウンロードし解凍します # https://drive.google.com/open?id=0B9eNEi5uvOI1SjQ5M2tQY3ZMM1U # models直下に下記モデルを配置してください # rotnet_mnist.hdf5
以上で環境整備は完了です
MNISTの予測
先ほどダウンロードしたモデルを使って実際に予測させていきます
MNIST画像の回転角度を検出させ、正しい向きに補正させます。
といってもすでにコードが用意されているので
RotNet/test/test_mnist.ipynb をRun all cellsで実行するだけです
すると下記のような出力が得られると思います
出典: https://d4nst.github.io/2017/01/12/image-orientation/ |
Originalの列はMNISTの元画像です
RotatedはOriginalをランダムに0~359°に回転した画像です
CorrectedはRotatedの回転角度をモデルが予測し補正した結果の画像です
Correctedの画像上部のAngleはOriginalとの回転角度の差異を表示しています
概ね良好な結果ではないでしょうか?
以上がRotNetの導入手順となります
学習用コードも提供されているため、独自の画像を学習させ
目的に沿った画像の回転角度を補正するモデルを生成することも可能です
まとめ
本記事では、画像認識AIであるRotNetを紹介させて頂きました。
実装量が少ないためTensorFlowを初めて触る方や、機械学習がどのように実装されているか見てみたい方におすすめのモデルです。
いきなり非常に実装量の多いモデルを見て挫折してしまうよりも、このような比較的実装量も少なく、学習時間も短いモデルに挑戦して、感覚を掴むことも重要かもしれません。
機械学習フレームワークやモデルが違ったとしても、機械学習の流れそのものは大きく変わりません。
まずは、この流れを理解することをお勧めします。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
リンク
リンク
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
0 件のコメント :
コメントを投稿