UMA、時々もえるゴミ

どこかピンぼけしている青写真

メディカルAI専門コース オンライン講義資料でお勉強してみた

新年明けましたね。いい感じの挨拶の言葉が浮かばなかったので、とりあえず気にせず頑張っていきましょう。

 

医療データにDeep Learningを適用して、いろいろと認識させるための教材が無料で公開されていたので、ガキ使を横目に勉強していました。

本当は新年明ける前に終えたかったのですが、途中でガキ使が終わっておもしろ荘とかいうネタ番組が始まっていたので、結果的に間に合いませんでしたね。

 

japan-medical-ai.github.io

 

私はDeep Learningは仕事でも使っており、それでご飯を食べている人間なのですが、医療データの扱いについては無知ですし、Deep Learningについても新たな発見があるかなと思って取り組んでみました。

 

コードのすべてがGoogle Colabで動くのが良いですね。

GPUを使って作業するので、ランタイムの「ランタイムのタイプを変更」を選んで、ハードウェアアクセラレータをGPUにするのを忘れないようにしましょう。

ここで5分つまづきました。もうちょっとでやる気をなくすところでした。

 

MRI画像や血液の顕微鏡画像、心電図の波形など様々なデータに対して、そのデータと実際に解くタスクに見合ったDeep Learning手法を適用するというのが実践編の流れです。

 

備忘録も兼ねたメモをここに残したいと思います。

 

まずは5章のDeconvolutionの設計に関して

 

カーネルサイズをstrideで割り切れる数にする(checker board artifactを防ぐため.こちらを参考のこと:Deconvolution and Checkerboard Artifacts
出力サイズは,stride×(input_size−1)+ksize−2×padとなるので,目的の拡大後サイズになるようパラメータを調整する

 

GANとかの画像生成でDeconvolutionを使うなんてことがありますが、artifactが目立ってしまい、いびつな画像ができてしまう問題があるようです。

このテクニックはそれを軽減できるのかもしれません。憶えておきます。

 

次は6章の物体認識用のネットワークであるSSDを学習させる部分の話です。

 

次にOptimizerを作成します.今回はMomentum SGDという手法を用いてモデルのパラメータの最適化を行います.その際に,モデルの中にある線形変換が持つバイアスのパラメータに対しては勾配が2倍の大きさになるようにupdate_ruleに対してフックを設定します.また,バイアスパラメータの場合にはweight decayは行わず,バイアスパラメータ以外のパラメータに対してはweight decayを行うように設定しています.これらは学習の安定化などのためにしばしば用いられるテクニックです. 

 

バイアス項はweight decay(重み減衰)させないほうがいいと言う話は聞いたことがあります。こうして再びその話を聞くということは、このテクニックにはそれなりの市民権があるのですね。

あとは、バイアスのパラメータの勾配を2倍にするというのは初耳でした。

 

8章の精度向上に向けては全体的にためになりました。今回のデータセットにおいては、1D Dilated Convolution+Dropout が一番精度向上に寄与していました。もちろん、確率的な操作が入るので精度向上の実感の度合いは人それぞれだと思います。

 

それ以外の手法は相対的に見ればそこまで大きな改善にはならなかった印象があります。

ただ、実装自体はそこまで難しくなく、気軽にチャレンジできる類のテクニックなのでぜひ活用したいと思います!

 

Unreal Engine4のお勉強 Part2

引き続き、この本を読みながらUnreal Engineの勉強をしていきます。

今回は6章(AIの実装)からラストまでをしました!

 

作れる!学べる!Unreal Engine 4 ゲーム開発入門

作れる!学べる!Unreal Engine 4 ゲーム開発入門

 

 さすがに本の内容を垂れ流すわけにはいかないので、ここでは本を読んでいく中でつまづいた点を紹介していきます。

 

1. AIキャラクターを配置してゲームを実行すると、ゲーム終了時にエラーが出る

本に書いてある通りにAIキャラクターを作成して、ゲーム上に配置して実行します。

プレイしてみると、ちゃんとプログラム通りに動いてくれて一見問題ないように見えるのですが、Escキーを押してゲームを終了させると...

 

f:id:slowsingle:20181123113148p:plain

 

こんな風にエラーが出てしまいます。ゲーム中はエラーが出ないのでスルーしてもよいのですが、何だか気持ち悪いですよね。

どうやらAIキャラクターに紐づけられたアニメーションに問題があるようです。本では、プレイヤーもAIキャラクターも同じアニメーションのブループリントを使っていました。これを別々のブループリントを使うようにしてAI向けにカスタマイズしましょう。

 

つまり、アニメーションBPも複製して、以下のように編集します。

 

・イベントグラフ

f:id:slowsingle:20181123113916p:plain

 

・アニムグラフ

f:id:slowsingle:20181123113956p:plain

 

難しいことは何もしていなくて、単純にジャンプに関するブロックを削除しているだけです。

AIキャラクターはプレイヤーを追いかけてくるだけでジャンプはしないので、ジャンプ処理は不要です。

 

あとは、AIキャラクターのアニメーションを、今回新たに作成したアニメーションBPに紐づける作業が残っています。

すでにプレイヤーとプレイヤーのアニメーションBPとを紐づける作業は行っています。本書の145ページあたりを見れば方法がわかります。

 

2. ゲームのリスタート

8章のゲームのクオリティを上げるという項目において、「ゲームのリスタート」を実装しています。

これはゲームクリア、またはゲームオーバーになったときに、もう一度ゲームをプレイするための機能を実装するものです。

 

本書では、下の図の状態から「Get Game Mode」から「Restart Game」にピンをつなげればOKなのですが、互換性がないとのエラーが出てつなげられません。

 

f:id:slowsingle:20181123115036p:plain

 

これはUnreal Engine4のバージョンの違いに問題があるようです。

 

unrealengine.hatenablog.com

 

「Restart Game」はGame Modeクラスにあるので、BP_MyGameModeの親クラスを「Game Mode Base」から「Game Mode」に変更します。

BP_MyGameModeのブループリントを開き、クラス設定をクリックします。そこから詳細タブに行って、クラスオプションの親クラスを変更します。

 

f:id:slowsingle:20181123115644p:plain

 

この変更によるコンパイルエラーは起きなかったので問題ないとは思いますが、念のためにここでコンパイルして確認しておくことをお勧めします。

リスタートの実装は以下のようになります。真ん中に「Cast To GameMode」ノードを追加する必要があります。

 

f:id:slowsingle:20181123115906p:plain

 

3. Win64へのパッケージ化

本書の最後でWindows(64ビット)のプロジェクトをパッケージ化し、他の環境でも実行できるようにします。

 

Visual Studioの環境(正確にはその中にあるC++のビルドツール)がないとパッケージ化できないので、前もってインストールしておく必要があります。

まあ、気にせずパッケージ化を進めると、足りないツールがあるのでインストールしてくださいとダイアログが出て、さらにリンクも現れるので、それに従えばよいと思います。

以下のページが参考になるかと思います。インストール時に何をインストールするかをこちらでカスタムして入れる必要がありますが、それをせずにインストールしてしまった場合でも後から入れなおすことができます。

 

パッケージ化できるようにする(Visual Studioをインストール) – unrealpocket

qiita.com

 

また、プロジェクトがあるフォルダのパスに日本語があると、それが原因でうまくファイルにアクセスできずパッケージ化に失敗することがあります。

特に指定していなければドキュメントフォルダにプロジェクトが格納されていると思いますので、これをC直下か日本語のないフォルダに移動させてください。

その後、移動させたプロジェクトを開いて、パッケージ化すれば以下のように新たにいくつかファイルが出来上がります。

 

f:id:slowsingle:20181123121001p:plain

 

MyProject.exeをダブルクリックすればゲームが始まります!

というわけで、無事に本を読み進めながらゲームを作ることに成功しました!

Unreal Engine 4のお勉強

別にゲームを作るわけでもないのに、お仕事でUnreal Engineを使うかもしれないので、ちょっとずつ勉強を始めました。

 

知りたいことだけかき集めて目的を果たすやり方がどうも性に合わない性格で、とにかく基本を学ばないと何もできないタイプの人間なので、基本的なところから始めます。

 

とりあえず、お供として以下の本を買いました。公式のチュートリアルが豊富なのがわかっていても、やっぱり手元に本があるとやる気が出てきます。

 

作れる! 学べる! Unreal Engine 4 ゲーム開発入門

作れる! 学べる! Unreal Engine 4 ゲーム開発入門

 

 

コードを書かずに、ブロックをつなげる形でゲームが作れるなんて面白いですよね。

昔、Pepperのプログラムを書いていた時期があったのですが、あのPepperもブロックをつなげていくことで、いろいろと動かすことができたりします。それを思い出しました。

 

f:id:slowsingle:20181118173529p:plain

 

f:id:slowsingle:20181118173901p:plain

↑のpepperの開発環境の画像は https://robotstart.co.jp/linkdev-pepper-nao.htmlから引っ張ってきました。

何をやってるのかがわかりやすいですね。

 

話を戻して、Unreal Engine の本を買って勉強を始めたのですが、いろいろとバージョンの違いによって、書籍通りにいかないところがありました。

調べたら、多くの方が同じ悩みを抱えていて、どうすればいいか解決策を提示してくれているサイトもあったので、それをここにまとめたいと思います。

 

1. アニメーションブレンド

f:id:slowsingle:20181118174429p:plain

 

142ページ辺りの話です。

ここで、各アニメーション(IdleとWalkとRun)を切り替えていくパラメータ名であるX軸ラベルやX軸範囲を指定する必要があるのですが、若干UIが異なっているため、どこをいじればいいんだ???と迷ってしまいます。

これについては以下のページに解決策が書いてありました。

 

バージョンアップで分からないことが - UE4 AnswerHub

 

Axis Settingsをいじればいいんですね。言われてみればそうか、と納得です。

 

2. 非破壊性メッシュを使ってアクタをバラバラにしたい

いわゆる爆弾がボカーン!って爆破するようなギミックを加えよう、っていうお話です。ページとしては196ページです。

書籍上では、配布している爆破させるモデルを読み込んでくださいと書いてあるので、言われるがままに読み込んでみましたが...

 

f:id:slowsingle:20181118175222p:plain

 

Bomb_Model~ と名の付くアセットが大量に現れました。書籍上では、1つのまとまったアセットとして読み込まれているのですが、何故かバラバラになっています。

爆破する前からバラバラになっているのはとても困ります。

 

unityの素材をUE4にインポートする際に分解されてインポートされる - UE4 AnswerHub

 

実際、このような問題はあるらしいですね。別のツールで読み込んでエラーがないか調べる必要がありそうですが、できればここで深みにハマりたくないので、別のものを爆破させることにしました。

 

historia.co.jp

 

爆破物の生成は上記のサイトを参考にしました。

また、今回使いたい機能はバージョンアップによりプラグイン化されているので、別途有効化する必要があります。

方法は以下のサイトでわかりました。

 

非破壊性メッシュの作成について - UE4 AnswerHub

 

それ以外では、書いてあることと違うじゃないか!的なつまづきはなかったように思います。

とりあえず5章まで進めることができました。

 

来週からは6章に進みます。6章ではAIの機能に関する説明が出てきます。

いわゆるNPCキャラの作り方講座みたいなものですね。楽しみです!

わからない単語を適当に調べてみた

この前、技術書典に行ってきまして、世の中のIT技術の流行り的なものを眺めてきたのですが、いくつか僕の知らないワードが飛び交っていたので適当に調べました。

 

いま、がっつり勉強しても身につかないし、ただ苦しいだけなので、もし必要になったときにすぐに知識にアクセスできるようにしたいと思ってます。

 

要はこの記事、ただのメモ書きです。

イメージだけでも頭の中に持ち帰れたならそれでいいかな、って感じです。

 

この記事を書いてるときはもう深夜0時ですからね。難しいことを考える時間じゃないです。

 

・Kubernetics 

これが一番わかりやすかった。

thinkit.co.jp

 

たくさんコンテナを起動したいけど、たくさんあるからどうやってコントロールすればいいかわからん。なんかいい感じにまとめてほしいっていうのを解決してくれるものらしい。
サーバのCPUとかメモリとかのリソースに応じたスケジューリングを立ててくれる。一番効率的な使い方を実践してくれるということかもしれない。

 

・React

これが一番わかりやすかった。

 

React.jsなので、javascriptで使うらしい。UIを作るときに使うライブラリらしい。
web系は全然わからないので、ほえーと感嘆するばかり。jQueryとかnode.jsとかも名前しか知らない。
目に見えるアプリケーションは色んな人にお披露目できるから面白いよね。

 

・Ansible

これが一番わかりやすかった。

www.slideshare.net

 

 

次点はこれ。

www.slideshare.net

 

サーバの構成管理ツール。
どうやってサーバを構成するかをコード化するので、これを実行すれば複数のサーバに同じ環境を構成できる。
コードが同じならば、何度実行しても同じ結果になる。
pythonで書かれてるけど、使うときにpythonの知識は必要ない。

 

HackMDに色々書いていたんですが、あまり見返さないので、だったらブログでいいじゃんと思いました。

名古屋

最近、ちょっとした理由があって名古屋に行きました。

色々と観光したんですが、もともと写真を撮る習慣がなかったので、ブログに載せられるようないい感じの写真がありませんでした。痛恨のミスを犯してしまった…。

 

と言っても万人向けの観光は風来坊で手羽先を食べたくらいで、それ以外は自分の行きたいところに行ってました。

平日金曜日に行ったので、そこまで混雑することもなく楽しめました。ひつまぶしだけはどこも大行列だったので諦めました。

 

んで、行きたいところっていうのは、メイド喫茶だったので、とりあえず3つほど行ってきました。

一番下のRitzはメイド喫茶じゃなくて、メイドがディーラーやってるカジノでした。もちろん賭博ではなく、シンプルに楽しむだけですが、マカオで大金を失った経験を持つ私としては、こういう甘口がほしくなる時もあるのです。結構勝てた気がするので満足でした。

 

・天空のカフェ escaflowra

・廃墟のエヴァレット

・Ritz

 

ブログ的にはちゃんと1つ1つリポートしていくべきなんでしょうけれど、一言でまとめれば「また行きます」に尽きます。ポイントカードは全店舗もらってきましたし。そこはぬかりなく。

名古屋に行く用事できないかな。気軽に行ける距離じゃないんですよね。こう、仕事の出張がね、名古屋だったら嬉しいよね。

 

そういえば、松坂屋鋼の錬金術師展が開催されていたので足を運んできました。青春ど真ん中の思い入れの深い作品の1つです。

Amazonでアニメが見れるので、次の休日に見ようと思います。

 

旅行っぽい記事なのに写真が1つもなかったぞい!

 

北京旅行

移動含めて5日間の北京旅行を無事終えて日本に帰ってきました。

北京にいる友人に会いに行ったのですが、空港のチェックインなど、色々と一人でやらないといけないことも多く不安でしたが、特に大きな問題もなく楽しく旅行できました。

 

旅行内容は月並みですが、万里の長城紫禁城天安門に行ってきました。

 

万里の長城。夏は暑いので行くなら春や秋がおすすめ。一度長城に入ると、水などを売っているショップがとても遠いため、水の準備には気をつけないといけない。 

f:id:slowsingle:20180814232718j:plain

 

紫禁城。広い。途中で迷子になった。清王朝の政治の中心。

f:id:slowsingle:20180814232734j:plain

 

天安門。テレビでしか見たことなかったので、マジであったのかと驚愕。

f:id:slowsingle:20180814232749j:plain

 

夏は東京と同じくらい暑いので水は常に携帯していました。どこで買うかにもよりますが、500mlのボトルウォーターが2~5元くらいで買えます。安い!

 

あと、友人にお願いして京劇のチケットをとってもらい、それを見に行きました。

京劇はいくつかのショートストーリーを複数本見るという構成のようです。私は今回が初めてで無知なので他にもバリエーションがあるかもしれません。

中国語は疎いので何を言っているのかあまりわからなかったのですが、中国語字幕もあるので漢字をみれば何となくわかったような気になれなくもないです。

ただ、ずっとポカーンとしていたわけじゃないです。あるストーリーは西遊記で、孫悟空猪八戒が悪者を倒すという劇で、アクションシーンがかなり派手なので私でも楽しめました。如意棒を回して敵を倒すシーンは圧巻でした。友人曰く、学生時代に古典芸能に触れる一環として如意棒の扱い方を習う授業があったようです。ちょっとうらやましい。

トリを飾る劇の名は「贵妃醉酒」。Google翻訳に書けると「ロイヤルワイン」と出てきましたが、当然のことながらワインのお話ではありません。「贵妃」とは楊貴妃のことで、端的に述べると楊貴妃が嫉妬でお酒を飲み酔ってしまうというストーリーです。あらやだ楊貴妃かわいい。

この楊貴妃を演じるのは名誉なことで、今回演じていた方も声量や声の高さがハンパなかったです。

ちなみに、写真撮影はダメらしいです。写真撮影をしようとすると、後ろにいるスタッフがスマホにレーザーポインタを当ててきます。撮影をしようしている人たちは自分のスマホにレーザーの光が当たると、スマホをそっとしまいます。つまり、写真撮影は実質できるということですね。友人もそうしていましたが、異国で面倒事に巻き込まれるのが嫌だったので私は我慢しました。

 

ご飯は基本、中辛〜大辛でした。

 

火鍋。右の見たまんま辛そうなやつは、友人曰く中辛だそう。日本人的には大辛なので注意をば。でも美味しいので、文句なしです。左のは全然辛くないです。こっちのほうが好きって人は多いかも。

f:id:slowsingle:20180814233639j:plain

 

蛙料理。味はチンジャオロースっぽいけど、品名は憶えていない。蛙は骨がありますが、簡単に取れるので食べやすく、とても美味しいです。

f:id:slowsingle:20180814233652j:plain

 

旅行の途中で、よくわからんネックレスを300元で買わされるハプニングもありましたが、楽しかったです。

次は上海あたり行ってみたいですね。どこかの3, 4連休で遊びに行きたいところです。

また火鍋を食べて、辛い〜と悶える未来が目に浮かびます。

今日も泳いできた

最近は水泳を週2ペースで楽しんでます。

通ってるジムにプールがあるのは知ってたので、キャップとかゴーグルとか適当に揃えてきました。

 

ただ、あれなんですよね。裸眼の視力が0.01なので周りがよく見えなくて不安でして、もし視界がもっとすっきりしていたらプールで泳ぐのがもっと楽しくなるんじゃね? と思ってるんですよ。

 

調べてみたら4桁台のお金を払えば手に入るらしい。

 

クレジットカードの返済にびくびくしていましたが、思ったほど我が人生、そこまで自転車操業してなかったみたいなので、財布の紐はゆるめられそうです。

今はまだ自転車にまたがってるだけです。漕いでないから大丈夫。きっとね。

 

 

中国旅行に向けての英語勉強も継続中。

少しでも英語喋れれば何とかなるやろ・・・。

まだ、そんなに英語喋れてる実感ないけど。

私が行く北京は、上海と比べるとそこまで日本語対応はしてないらしいですが・・・。

まあ、せっかくの海外旅行で日本語だらけなのもつまらないので、英語で頑張ってみて、ちゃんと通じればハッピー、なんかやらかしたら飲み会とかでの話のネタにしてハッピーな戦略で行きましょう。

 

まあ、実際に訪れようと思ってるところはザ・観光地ってところばかりなので、観光客はたくさんいそうですね。

普通に万里の長城とか紫禁城天安門広場あたりに向かう予定です。

海外だからってビクビクして挙動不審で共◯党とかに事情徴収されないよう、堂々と観光します!