Pynote

Python、機械学習、画像処理について

Keras - 画像を扱う utility 関数について

概要

Keras で画像を扱う際の utility 関数について紹介する。
画像をファイルから読み込み ndarray として取得する、画素値が [0, 1] に正規化された画像をファイルに保存するといった場合に利用できる。

キーワード

  • keras.preprocessing.image
  • array_to_img()
  • img_to_array()
  • save_img()
  • load_img()
  • 概要
  • キーワード
  • 関数一覧
    • PIL 形式から ndarray に変換する。
    • ndarray から PIL 形式に変換する。
    • 画像をファイルから読み込み、PIL 形式で返す。
    • 画像を表す ndarray をファイルへ保存する。
  • 使用例
  • 参考
続きを読む

Keras - Keras 実装で学ぶ ResNet

概要

ResNet を Keras で実装する方法について、keras-resnet をベースに説明する。

  • 概要
  • ResNet
  • 実装
    • 必要なモジュールを import する。
    • compose() について
    • ResNet の畳み込み層
    • shortcut connection
    • building block
    • bottleneck building block
    • residual blocks
    • ResNet
  • 使用方法
  • 参考
続きを読む

Keras - Keras の ImageDataGenerator を使って学習画像を増やす

概要

CNN の学習を行う場合にオーグメンテーション (augmentation) を行い、学習データのバリエーションを増やすことで精度向上ができる場合がある。
Keras の preprocessing.image モジュールに含まれる ImageDataGenerator を使用すると、リアルタイムにオーグメンテーションを行いながら、学習が行える。

キーワード

  • ImageDataGenerator
  • オーグメンテーション (augmentation)
  • 概要
  • キーワード
  • ImageDataGenerator
  • 基本的な使い方
  • オーグメンテーションの種類
    • 回転する。
    • 上下反転する。
    • 左右反転する。
    • 上下平行移動する。
    • 左右平行移動する。
    • せん断 (shear transformation) する。
    • 拡大縮小する。
    • 各画素値に値を足す。
    • 明度を変更する。
    • 外挿方法
    • 定数倍する。
    • コールバック関数による前処理を行う。
    • データセット全体で各チャンネルごとの画素値の平均を0にする。
    • データセット全体で各チャンネルごとの画素値の分散を1にする。
    • 白色化を行う。
    • サンプルごとの画素値の平均を0にする。
    • サンプルごとの画素値の分散を1にする。
  • 生成した画像をフォルダに保存する。
  • 参考
続きを読む

Deep Learning - ResNet の仕組みについて

概要

画像認識のコンテスト ILSVRC 2015 にて、top5 error rate で3.57%を記録し、優勝した CNN ネットワークモデルである。
下記、2論文に基づいて紹介する。

  • 概要
  • ResNet が考案された背景
  • 劣化問題
  • residual network
  • ResNet
    • ネットワーク構成
    • shortcut connection
    • residual block
  • 実装
  • 参考
続きを読む

Keras - Keras のファイルの形式について

概要

Keras で保存した重みファイルから直接重みを読み出す方法について

  • 概要
  • 試した環境
  • MNIST のクラス分類器を CNN で作成する。
    • MNIST データセットを読み込み、前処理を行う。
    • モデルを作成する。
    • モデル構成を表示する。
    • モデルの学習を行う。
  • save_weights() で保存した場合
    • HDF5 ファイルの中身を表示する。
  • save() で保存した場合
続きを読む

OpenCV - Watershed アルゴリズムで物体の輪郭抽出を行う

概要

OpenCV の Watershed アルゴリズムで物体の輪郭抽出を行う方法について紹介する。

  • 概要
  • 試した環境
  • 手順
    • 画像を読み込む。
    • 大津の手法で2値化する。
    • opening 処理でノイズを除去する。
    • そのまま輪郭抽出を行った場合 (失敗例)
    • sure background を抽出する。
    • sure foreground を抽出する。
    • 前景か背景か判断できない領域を抽出する。
    • 各領域にラベル付けを行う。
    • watershed アルゴリズムを適用する。
    • watershed アルゴリズムの結果を元に輪郭抽出を行う。
  • 参考
続きを読む

環境構築 - Ubuntu 16.04 に NVIDIA ドライバをインストールする方法について

概要

Ubuntu 16.04 に NVIDIA ドライバを導入する方法を紹介する。

  • 概要
  • 試した環境
  • 手順
    • GPU が対応している NVIDIA ドライバのバージョンを調べる。
    • レポジトリを追加する。
    • apt-get でインストールできるドライバ一覧を検索する。
    • NVIDIA ドライバをインストールする。
    • 再起動する。
    • インストールが正常に完了したか確認する。
続きを読む