会社とは関係なく、サーバを借りてOpenCVのモデルを作成した時の話をします。
問題
自宅PCはMac(Memory16G)しかないが、これだと遅いのでもっと早く学習したい。
選定
- Conoha: 今回はこれを使うことにした
- Amazon: 料金的にはConohaと大差なかったが通信量やEBSの料金などいろいろかかるのでやめた。VPS(Lightsail)は月額制っぽかったので、対象外
- さくらのインターネット: 月額なので、今回は対象外
構築作業
前提
-
ローカル
: 自分のPC -
Conoha
: Conohaの管理パネル -
Conoha - 1G
: Conohaの1Gのインスタンス。sshで作業 -
Conoha - 32G
: Conohaの32Gのインスタンス。sshで作業
インスタンスを起動する (Conoha)
32Gでインスタンスを作成します。
多分エラーが出るので、Conohaにお問い合わせをしてください。
作成できたら、作ったサーバインスタンスは一度削除してください。
事務作業(Conoha)
エラーが出た場合は、お問い合わせをします。
個人で上位プランを使ったことがない場合は制限をかけられているようなのでお問い合わせをしてください。
問い合わせ例:
一時的にハイスペックなサーバーを使いたかったので、32GのVPSに申し込もうとしたのですが、
「サービスの申し込み上限数に達しています。」
とメッセージが出て申し込みができません。
学習データを作る(ローカル)
回答が返ってくる間に学習データを作ってしまいます。
以下のような構成で作っていきます
opencv
├── data
│ ├── neg
│ └── pos
├── model
└── src
├── negative.dat
└── positive.dat
data/pos
は、正しいデータ
data/neg
は、NGデータ
を格納するところです。
positive.dat
には、data/pos
の
negative.dat
には、data/neg
の
特徴量をそれぞれ入れてください
学習データを作り終えたら、zipで圧縮しておいてください
事務作業(ローカル)
メールで、以下のような感じで返答があると思うので、回答します。
返答は素直に行いましょう
〇〇 様
いつもご利用いただき、まことにありがとうございます。
ConoHa お客様センターです。
お問い合わせの件につきまして、上位プランのお申し込みに
ついては弊社にて確認を行わせていただいております。
お手数ではございますが、下記内容につきましてお知らせください
ますと幸いでございます。
希望プラン:
リージョン:
追加希望台数:
ご利用用途:
恐れ入りますが、何とぞご確認くださいますようお願い申しあげます。
今後ともConoHaをよろしくお願いいたします。
希望プランなどは下記のとおりです。
希望プラン:
VPS・32G
リージョン:
東京
追加希望台数:
1台
ご利用用途:
機械学習(OpenCV)のモデルを自作するため。
自宅マシンのスペックだとかなり時間がかかってしまったので、CPUとメモリをたくさん積んだマシンが使いたかった
備考:
・法人利用(商用)じゃなくて、個人利用です
・1ヶ月まるまる使う予定はなく、数日〜1週間ほどの予定です
・モデル生成にだけ使うので、基本的にポートは全部閉じた状態。ローカルから学習データをアップデートしたりするのをscpでやろうと思うで、sshだけ例外的に開ける
・リージョンは価格を見て東京のほうが安かったので東京と書きましたが、シンガポールでもいいです。
・可能であれば、今後も必要なときだけ立ち上げて使いたい
32Gが使えるようになったら次の作業に移ります
インスタンスを起動する (Conoha)
1Gのインスタンスを起動する。OSはCentOS
でもubuntu
でもかまいません。
- この後インストール作業などを行うので、いきなり32Gもったいないです。
- 作業が全て完了してから32Gにプラン変更を行います
ユーザを作成 (Conoha - 1G)
ユーザを作成し、パスワードを設定(なんでもいいですがopencvなので、cvuserとした)
$ useradd cvuser
$ passwd cvuser
%wheel ALL=(ALL) ALL
がコメントされてないかを確認されていたら外す
visudo
作成したユーザをwheelグループに追加
$ usermod -aG wheel cvuser
$ groups
rootになれることを確認する
sudo su -
OpenCVに必要なパッケージをインストールする(Conoha - 1G)
インストール手順は、いかにまとめていますので、こちらを参照してください
https://qiita.com/usk81/items/98e54e2463e9d8a11415
以降は作成したユーザを使います
作成した学習データをアップロードする(ローカル)
圧縮したファイルをアップロードする
scp -l 6000 ~/Desktop/opencv/(作成した圧縮ファイル) cvuser@(conohaのインスタンスのIP):/home/cvuser
アップロードしたファイルを解凍する(Conoha - 1G)
以下のようになるように解凍します
/home/cvuser
├── data
│ ├── neg
│ └── pos
├── model
└── src
├── negative.dat
└── positive.dat
ベクトルファイルを作成する(Conoha - 1G)
cd src
# ベクトルファイルを作成する
opencv_createsamples -info positive.dat -vec positive.vec -num (任意の数) -w 48 -h 48
プラン変更を行う(Conoha)
サーバを停止する
注
sudo halt
してもconohaの管理パネルでサーバが落ちてると認識されなかったので、管理パネルからサーバダウンさせてしまっていいと思います。
プランを変更する(1G -> 32G)
サーバを起動する
学習を開始する(Conoha - 32G)
cd src
# sshのコネクションが切れてもいいようにnohupをつけて実行します
nohup opencv_traincascade -data /home/cvuser/model -vec positive.vec -bg negative.dat -numPos (opencv_createsamplesのnumの設定と同じ数値) -numNeg (negative.datのデータ数) -w 48 -h 48 -minHitRate 0.97 -numStages 10 -precalcValBufSize 12000 -precalcIdxBufSize 12000 > out.log 2> err.log &
学習後
急いで、1Gにプランを変更してください。
/home/cvuser/model
に学習したモデルが作成されているので、scpでダウンロードしてください
モデルを使ってみて問題なければいいですが、作り直すかもしれないので、作り直す必要がないことを確認してから削除してください。
完了
おつかれさまでした。
データ量にもよりますが、そこまで多くなければ、学習1回あたり1000円〜2000円の間ぐらいでできると思います。