Darknetの設定中の"policy"

cfgファイルの中にpolicyというのがあって,よくわからなかったので調べてみた.
policyは学習率を決定するパラメータらしい.

darknetのnetwork.cを読むと,以下のようになっている.

switch (net->policy) {
    case CONSTANT:
        return net->learning_rate;
    case STEP:
        return net->learning_rate * pow(net->scale, batch_num/net->step);
    case STEPS:
        rate = net->learning_rate;
        for(i = 0; i < net->num_steps; ++i){
            if(net->steps[i] > batch_num) return rate;
            rate *= net->scales[i];
        }
        return rate;
    case EXP:
        return net->learning_rate * pow(net->gamma, batch_num);
    case POLY:
        return net->learning_rate * pow(1 - (float)batch_num / net->max_batches, net->power);
    case RANDOM:
        return net->learning_rate * pow(rand_uniform(0,1), net->power);
    case SIG:
        return net->learning_rate * (1./(1.+exp(net->gamma*(batch_num - net->step))));
    default:
        fprintf(stderr, "Policy is weird!\n");
        return net->learning_rate;
}

何も指定しないと,学習率は一定.
これはconstantを指定したときと同じ挙動.

stepの場合,scaleパラメータで指定した値のbatch_num/net->step乗の割合で学習率を減衰させていく.

OpenPoseの使い方メモ

OpenPoseとは

OpenPoseはDeep Learningを使って単眼カメラから人体姿勢を推定するライブラリで,CVPR2017でRealtime Multi-Person 2D Pose Estimation using Part Affinity Fieldsというタイトルで発表されたもの.

OpenPose

公式ページの情報を要約すると,画像,ビデオ,webcam,IPカメラから18点のキーポイントが検出可能.各種フォーマットで結果を保存可能.

他にも,左右の手から21点,顔から70点のキーポイントを検出するオプションもある.

これらはUbuntu,Windows,Nvidia Jetson TX2で動作する.

 

というわけで,色々な用途に使えるので,よく使うオプションのメモ.

実行方法

例えば,USBカメラを使う場合は以下の通り.

./build/examples/openpose/openpose.bin

ディレクトリ内の画像を一括で処理する場合

./build/examples/openpose/openpose.bin -image_dir /path/to/image

ビデオに対して処理する場合

./build/examples/openpose/openpose.bin -video /path/to/vieo

IPカメラの場合

./build/examples/openpose/openpose.bin -ip_camera (RTSPかHTTPでURLを指定)

姿勢推定結果の画像を保存したい

以下のオプションを追加

-write_images /path/to/directory

元画像を保存したい

以下のオプションを追加

-render_pose 0 -write_images /path/to/output_directory

ちなみに,-render_pose 1 でCPUを使った描画になり,デフォルトの -render_pose 2 よりも高速.

姿勢推定結果の座標値を保存したい

以下のオプションを追加

-write_keypoint /path/to/output_directory

デフォルトではyml形式で保存される.ファイルは,-write_imageをした時の画像と同じ番号が割り振られるので,画像とほぼ同じファイル名で1画像1ファイルで保存されていく.

Part Affinity Fieldsの情報を保存したい

以下のオプションを追加

--heatmaps_add_PAFs true -write_heatmaps /path/to/output_directory

デフォルトではPNG形式で保存される.ファイルは,-write_imageをした時の画像と同じ番号が割り振られるので,画像とほぼ同じファイル名で1画像1ファイルで保存されていく.
全チャネルを横に並べた横に非常に長い画像が生成される.

Fedora 23でchainerインストール

今,Fedora 23はgccのバージョンが5.3.1なので,そのままchainerをインストールしようとすると,コンパイルエラーが発生する.

原因は,以下の2点

  • CUDAがgcc 4.9までしか対応していないこと.
  • enumの扱いが変わったこと.

CUDAのgcc対応

コードを見ると,

/usr/local/cuda/include/host_config.h

の115行目に,GCCのバージョンが4.9より大きいとエラーになるような #error が書かれている.
仕方ないので,これをコメントアウトして次のようにするとコンパイルが通るようになる.

#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
   ↓
//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

enumの扱い

元々enumはint型として扱えていたが,それができなくなっている.なので,

typedef enum enum_etype{
    a = 1
    b = 2,
    c = 3
} Etype;

int main(){
    Etype x = 0;
}

のようなコードはコンパイルエラーになる.これを防ぐにはgccのオプションに"-fpermissive" をつければ良い.

なので,chainerをインストールする際に,

alias g++="g++ -fpermissive"
pip install chainer

としたらいけた.正しいやり方かどうかわからないけど.

風邪ひき

風邪をひいた.前日までの沖縄出張気温20℃から,京都気温0℃雪の急激な変化で案の定という感じ.

ルルのドリンクと,葛根湯とバファリンExを飲んで寝たけど完治せず.のど飴なめてしのいでる.

以下,いくつか気になった記事を紹介.

Deep Learning論文紹介「Learning Recurrent Neural Networks with Hessian-Free Optimization」

Reccurent Neural Networksを使ったDeep Learningの話.詳しいことは論文を読んでみないとわからないけど,HFの勉強はきちんとしてみたい.

開幕したソチ五輪、生中継はネットとアプリで見られます

話題のソチオリンピックがネットで生中継で観れるっぽい.あまり家でテレビ見ることが無いけど,ネットで見れるなら便利だな.東京五輪でもネット中継見れるのかな?

JALの不正ログイン事件について徳丸さんに聞いてみた

僕もJALユーザなので気になる記事.この前の不正ログイン事件についての解説.

【5分で読める便利ツール紹介】ImageMagickでコマンドライン上から軽快に画像変換

知り合いの @payashim さんのブログから.convertコマンドは便利.よくzshのfor文と組み合わせて

for img in *.jpg; do; echo $img; convert $img ${img:r}.png; done

などして一括で画像変換したりする.