TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

機械学習

tanh vs sigmoid

AlphaGoのValue Networkの出力にはtanhが使用されている。 一方、将棋AIでは評価関数から勝率に変換する際、sigmoidが使われている。tanhとsigmoidのどちらがよいか、dlshogiの学習で検証してみたが、Policy NetworkとValue Networkのマルチタスク学習を行っ…

elmoのアピール文書を読む

世界コンピュータ将棋選手権で優勝したelmoのアピール文書を読んでいますが、結構難しいです。 勝率が二項分布に従う場合、評価値はロジスティック分布に従う(※1)だろう、 ということでロジスティック回帰を適用しています(※2)。 この部分は、ある局面の勝敗…

Bonanzaメソッドの解説

昨日、電王戦 Ponanza×佐藤天彦名人の第1局をニコニコ生放送で見ていました。コンピュータ将棋には以前より興味があり、初めの頃から電王戦はウォッチしていました。名人に勝ったPonanzaは、次はディープラーニングを使うということですが、昨日の対戦で使わ…

3Dモデルから学習データを生成する その2(トゥーンレンダリング)

前回に続きBlenderを使用してMMDの初音ミクの3Dモデルから、マンガキャラクターの顔パーツ検出用学習データの生成を試みる。BlenderでMMDのモデルを読み込むとそのままでは、シェーディングが有効になっており、レンダリングを行うと陰影のある画像となる。 …

3Dモデルから学習データを生成する

以前よりDCNNによるマンガキャラクターの顔パーツ検出に取り組んでいるが、学習データを手作業で準備するのが大変なので自動化できる方法を模索している。写真を線画化するする方法や、Free-Form Deformationを使う方法を試しているが、ここでは3Dモデルから…

写真を線画化する

マンガの顔パーツ検出を試みているが、マンガの顔画像と検出点がセットになった教師データを大量に入手することができない。自分で入力したデータで検出精度の実験を行って、ディープラーニングを使うことで、単一のコミックの画像であればかなりの精度で検…

TensorFlowをWindowsにインストール

以前の日記で公式バイナリをインストールする方法を書いていましたが、バージョン1.0がリリースされたことで内容が古くなったので、書き直します。公式のページを見ればわかる内容なので、あまり価値のある内容ではないですが。 前提ソフトウェアとして、以…

DCNNによるマンガキャラクターの顔パーツ検出(追試3)

前回に続き、学習のハイパーパラメータの影響を考察する。今回は、ミニバッチサイズを変更した場合の影響について調べた。ニューラルネットワークの学習は、通常ミニバッチ単位で更新を行う。 ミニバッチのサイズは、大きくすると勾配のばらつきが安定するた…

DCNNによるマンガキャラクターの顔パーツ検出(追試2)

前回の日記で初期値の変更や正則化やBatch Normalization、フィルター枚数などを変更した場合の効果について調べた。ここでは、さらに畳み込み層のゼロパティングの有無とカーネルサイズの影響について調べた。 ゼロパティング 畳み込み層のパディングは、一…

DCNNによるマンガキャラクターの顔パーツ検出(追試)

前回の日記では正則化など行わずにRMSpropを使用して学習を行ったが、初期値の変更や正則化やBatch Normalizationなどを行った場合にどうなるか試してみた。 初期値の変更 ChainerのConvolution2Dのパラメータの初期値は、デフォルトではHeの初期値で初期化…

DCNNによるマンガキャラクターの顔パーツ検出

以前の日記でdlibを使用してマンガのキャラクターの顔パーツ検出を行った。しかし、dlibの方法は、マンガキャラクターには有効ではなく、顔パーツを検出できなかった。そこで、DCNNを使用して顔パーツ検出(顔器官検出)ができるか試してみた。 dlibで実装され…

TensorFlowをGPUを有効にしてWindowsでビルドする(続き)

※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。GPUをGeForce 1080に交換したので、前回の日記でWindowsでGPUを有効にしてビルドしたTensorFlowを動かしてみた。結果は以下の通り、GPUで実行できた。 tensorflow\mod…

TensorFlowをGPUを有効にしてWindowsでビルドする

※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。TensorFlowはビルドツールのBazelがWindowsに対応していないため、Windowsではビルドができなかった。Bash on Windowsを導入することで、Ubuntuのパッケージをバイナ…

顔認識用の学習データを準備する際の小技

画像から顔画像のみを切り出して、顔認識用の学習データを準備したい。画像データが大量に必要になるので、data augmentationで実行時に動的に増幅することを考慮する。data augmentationとして、回転、拡大縮小、平行移動をアフィン変換で行う。切り出した…

dlibの顔のパーツ検出をマンガで試してみた(追試)

昨日の日記でdibでマンガの顔器官検出を試したころ、全く検出できなかった。HOG特徴+SVMであらかじめ顔検出をして切り出した画像を対象とした場合どうなるか追加で検証を行った。画像の切り出しは、顔検出スクリプト(detect_object_detector.py)を修正して、…

dlibの顔のパーツ検出をマンガで試してみた

前回の日記でサンプルで試した顔器官検出を、マンガの画像で試してみた。 学習データ準備 サンプルでは特徴点が68個あるが、入力するのが大変なので、顔の輪郭5点と左右の眼それぞれ4個ずつの13個とした。前回説明した通り、imglabツール(前の日記参照)の引…

dlibで顔のパーツ検出を行う

前の日記で、dlibの顔検出を試したが、dlibには目、鼻、口、輪郭といった顔のパーツを検出する機能も実装されている。 英語では「Facial Landmark Detection」という用語が使われている。 日本語では「顔器官検出」と訳すようだ。ここでは、サンプルを試す手…

dlibでマンガの顔認識をやってみた

昨日の日記でBash on Windowsを使ってdlibで顔検出を行うことができたので、自分で用意した画像を使って、顔検出ができるか試してみた。↓この記事のようにアニメの画像での顔認識を試した例はいくつかありましたが、マンガでの例がなかったので試してみまし…

Bash on Windowsでdlibを使って顔検出する

最近、物体検出に興味がありネットの記事を調べていたら、こちらの記事で使われていたdlibによるHOG特徴量+SVGが検出精度が高いらしい。bohemia.hatenablog.comdlibはC++の総合的な機械学習のライブラリで、Python用のインターフェースも用意されている。自…

ChainerでAlphaGoのSL policy networkを定義

AlphaGoのSL policy networkをとりあえず定義だけ作ってみました。AlphaGoの論文から、SL policy networkは以下のようになると理解しています。 layer1は、5*5のフィルターk枚、ReLU関数 layer2~12は、3*3のフィルターk枚、ReLU関数 layer13は1*1のフィルタ…

【囲碁プログラム】 rollout/tree policyをAdaGradで学習

※学習のやり直しを行った記事はこちらプロの棋譜からrollout/tree policyを学習してもGnuGoに対して勝率が30%程度であまり高くなっていない。学習に確率的勾配降下法(SGD)を固定の学習係数(0.001)とL1正則化係数(0.0000001)を使っていたので、 学習方法を変…

WindowsでChainerをGPUを使って動かす

※最新の情報はこちらの日記を合わせて参照ください。WindowsでChainerをGPUを使って動かすことができたので、手順をメモっておきます。使用したソフトのバージョンは以下の通りです。 Windows 10 Home 64bit Python 3.5.1(Anaconda 4.0.0 64bit) CUDA 7.5 cu…

【囲碁プログラム】 tree policyの学習

AlphaGoの論文にあるtree policyをプロの棋譜から学習を行った。rollout plicyから追加される特徴は以下の3つ。 Self-atari … 次に取られる手 Last move distance … 直前の2手からのマンハッタン距離 Non-response patter … 12point diamondパターン Last mo…

【囲碁プログラム】 プレイアウトにパターン適用

昨日はhttp://www.computer-shogi.org/wcsc26/を中継で観ていました。 コンピュータ将棋はまだまだ進化しているようで熱くなりますね。 チェスのStockfishの技術が将棋にも応用されているみたいです。さて、AlphaGoとイセドルの対局を観てから作り始めた囲碁…

【囲碁プログラム】 rollout policyの学習

インターネット上から入手した5万局くらいのプロの棋譜から、プレイアウトの特徴量を学習させてみた。 勝ったほうの手のみを学習することにしたので、勝敗データがない棋譜は除外した。特徴量は、AlphaGoの論文にあったrollout policyの特徴量とした。 ただ…

Chainerで3層パーセプトロンの誤差逆伝播を実装してみた

前回の記事で、numpyを使って行列演算で3層パーセプトロンを実装しましたが、同じことをChainerを使って実装してみます。 import numpy as np import chainer from chainer import Function, Variable, optimizers from chainer import Link, Chain import c…

Pythonで3層パーセプトロンの誤差逆伝播を実装してみる

入力層、隠れ層、出力層で構成される単純なニューラルネットワークで、 誤差逆伝播を計算します。隠れ層の活性化関数はsigmoid、 出力層の活性化関数はsoftmaxとします。誤差関数(損失関数)は、交差エントロピーを使用します。それぞれの式は以下の通りです…

音声スペクトルモニター(Audio Spectrum Monitor)バージョンアップ

Androidアプリ「音声スペクトルモニター(Audio Spectrum Monitor)」をバージョンアップしました。ピッチの解析精度を上げるために、機械学習を使ってパラメータの調整を行いました。声の音声データに加えてアコギの音も学習データとして使用したので、 ギタ…

モンティ・ホール問題

パターン認識と機械学習 上を読み進める前に確率の基礎がわかる本を探したら、プログラミングのための確率統計という本がわかりやすそうなので読み始めた。例題として モンティ・ホール問題 - Wikipedia がでてきたので、理解を深めるために(というか興味本…

パターン認識と機械学習

1章を読んでいるところだが、はじめは理解しながら読んでいたが、 確率密度の説明でヤコビ行列がでてきて理解が追いつかなくなった。読み進めるには前提知識が足りてない気がする。 もうしこしやさしい副読本も必要かな。 機械学習を使いたいと思っている機…