鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

WordPressでブログを公開する① 「S3ユーザ作成」

WordPressのブログを作って公開したい!
今回はAWS、S3で配信します。ググるといっぱいヒットするので
やり方を調べながら手を動かしてみる。

まず最初に、S3操作に限定したのAWSユーザの作成から行います。

AWSのコンソールへログインして、IAMで検索します。
すると「IAM Manegement Console」が開きます。
メニューから「ユーザ」を選択します。

f:id:kechiya:20200424194149p:plain
IAM User Create Menu

次に、ユーザ名を入力します。S3Userと名ずけました。


f:id:kechiya:20200424194313p:plain
IAM User

次に、グループを作成します。S3Groupと名ずけました。

f:id:kechiya:20200424194451p:plain
IAM Group Create

グループを作成するときには、アタッチするポリシーを選択する必要があります。S3FullAccessポリシーを検索して選択します。

f:id:kechiya:20200424194753p:plain
IAM Policy

次に、タグを追加します。ここは特に何も入力しませんでした。

f:id:kechiya:20200424195050p:plain
Tag

最後に、ユーザの追加対象のグループの確認画面です。

f:id:kechiya:20200424195238p:plain
IAM Group Confirm


作成し終わると、アクセスキーが発行されます。これは後でWordPress StaticPress S3で入力します。

f:id:kechiya:20200424200002p:plain
IAM

ムームードメインでドメインをとって、証明書をAWSで発行する方法

1 Certificate Managerで証明書のリクエスト をサブドメインで行う。DNS検証を選ぶ
2 1でCNAMEの値が発行されるので、その値をムームードメインのCNAMEに入れて保存する
3 ムームードメインDNSを一旦、AWSのものへ変更する
4 Route53でHostedZoneを追加する
5 Certificate ManagerでRoute53でのレコードの作成ボタンを押す
6しばらくすると検証保留中から発行ずみになる? 
7 ムームードメインDNSムームードメインのものに戻す
8

S3でstaticなページを配信する時の権限

S3で静的ページをホスティングする時。
S3への直接アクセスはさせず、CloudFrontを介して配信する。
そうしないと、DOS攻撃を受けてクラウド破産を招くかも?
S3で直接アクセスを許さないように設定するには、以下のように設定してみた。

S3の権限設定

f:id:kechiya:20200401141521p:plain

CloudFrontの設定

オリジン設定で
Create a New IdentityはYESを選択
Grant Read Permissions on BucketはYes, Update Bucket Policyを選択

新しいバケットアクセスのアイデンティティが作られてバケットアクセスできるようになる。

エンドウ君リリース作業

スナップエンドウ検出アプリエンドウ君のリリース作業をまとめておこう。

darknetjsのインストール

コンパイラを最新にしないとビルドが通らないので以下のツールのdevtoolset-7をインストール。
www.hpc-technologies.co.jp

インストール後は以下で有効化

scl enable devtoolset-7 bash


そして、darknetjsをインストール
www.npmjs.com

cmakeのインストール

ソースからインストールする
cmake.org
uchy.me

git 2系のインストール

blog.1q77.com

opencvのインストール

docs.opencv.org

ld.so.confの編集

qiita.com

opencv4nodejsのインストール

npm installでインストールする前に環境変数の設定

export OPENCV4NODEJS_DISABLE_AUTOBUILD=1
export OPENCV_LIB_DIR =/usr/local/lib64

メモリ不足発生した場合

qiita.com

スナックエンドウ検出アプリ作成中

連休は、ずっとスナックエンドウアプリしてました。

機械学習

自身のノートPC(MacBookAir2016 8Gメモリ)では100エポックで10時間かかることが判明。
Google Colab(GPU)でも、何時間もかかりしかもkillされてしまうので、無料タイプでは厳しい感じがしました。
できなくはないけれど重みファイルを保存して途中から繰り返せば、2週間くらいでは終わるとは思います。

データ作成部分のバグでした

元となるデータの作成部分がバグつていたため、学習に時間がかかっていたようです。
直したら、GoogleColabでは3時間程度で終わるようになりました。

サンプル数

サンプル数がとても少ないので集めるところをしっかりしないと。
収穫時に使うアプリなので、取った後に並べるとちょっとバリエーションが足りない感じとは思います。

f:id:kechiya:20200224101524p:plain

検出アプリ

Express+express-ws+darknet.js+opencv4nodejsという構成です。
プラウザでビデオ画像をサーバにWebsocketで送り、jpg画像をdarknetで検出して
検出したBox領域をopencvで囲って返すというアプリです。
エンドウではまだ動かせていませんが、darknet付属のモデルでは動くところまで確認しました。

Darknetでスナックエンドウをリアルタイムに検出する

スナックエンドウの学習については、ほぼ目処がついたので
フロント部分の開発にも着手。

darknetコマンドをnode.jsで発行して返してあげる必要があるけれど
マルチプロセスで対応する必要があります。
detectコマンドはデフォルトではpredictions.jpgを出力するので
outオプションで出力するjpgの名前を指定する感じにする予定です。現在コーディング中。

./darknet detect cfg/endo_kun.cfg  cfg/endo_kun.weights out.jpg -out xxxxxxx

Google ColabでDarknet学習。

yoloのcfgの編集方法

filterの数の編集をしないとエラーになります。
https://nmxi.hateblo.jp/entry/2019/02/28/104546

yolov3-tiny-train.cfgの編集

akifukka.hatenablog.com

学習用の定義はgithubで準備しておく。

%%bash
cd  darknet
rm -rf endo_kun
git clone https://github.com/dokechin/endo_kun
mkdir endo_kun/backup
./darknet detector train endo_kun/data.txt endo_kun/yolov3-voc-train.cfg yolov3.weights

瞬時に学習が終了してしまう。なんで?

Loading weights from yolov3.weights...Done!
Saving weights to endo_kun/backup/yolov3-voc-train_final.weights

stackoverflow.com

答えらしきものがありました。あらかじめ学習された重みファイルを使うときには、学習を飛ばす?
「-clear 1」をつけたらなんかうまくいく?らしい。とりあえずつけて動かしたらすぐに終わることはなくなりました。
<<追記>>そもそも、初期の重みファイルを指定しなければ、大丈夫でした。

出力される重みファイルのバックアップ先はgoogledriveにしておく

Colab側でマウントするとともにdarknetのbackupの値も、マウント先に変更しておく。
12時間ルールで消えてしまうため。

学習している間に、タイムアウトしてしまう

90分ルールというのがあるので対応をする。
今のChromeで使用するときは、
初回は短い時間でリロード時間を設定して、ダイアログで「はい」を選択すると
次回からはダイアログが出なくなるみたい。

qiita.com