Bapliscaのブログ

イベントやインターンの話など

横浜旅行 in Winter

Baplisca(@sooooouls) です。
12月9日 - 12月10日に横浜に行ってきました。

なぜ横浜?

夏に行ったインターン先の懇親会があったため、行くことになりました。その会社が交通費と後泊の費用を支給してくれたため、観光もかねて行きました。

12月9日

その日は、2限に講義があり、9時前の新幹線に乗って、東京駅の地下カフェで講義を聞きました。
カフェのwi-fiが1時間で切れる仕組みだったので講義を最後まで視聴することができませんでした。。
その後、みなとみらいに移動し、企業の懇親会に参加しました。
懇親会が終わった後、駅前のホテルに移動してのんびり過ごしました。


12月10日

ホテルの朝食を済ませて、部屋の中で1限の講義を聞きました。 その後チェックアウトして、電車で横浜中華街に移動し昼ご飯を食べました。 中華街を少し抜けると、山下公園があり、そこには船や実物大のガンダムが鎮座してました。 実物大ガンダムは、19日から一般公開される予定なので少しタイミングが悪かったですね。

gundam-factory.net

f:id:Baplisca:20201211221657j:plain
氷川丸 戦争中は病院船だったらしい
f:id:Baplisca:20201211221833j:plain
遠くから撮ったガンダム かなりでかい
その後水上バスに乗って、再びみなとみらいに着き、帰仙しました。
f:id:Baplisca:20201211222128j:plain
近くを通りがかった水上バス


終わりに

最近はインターンがあって家に引きこもりがちだったため、いいリフレッシュになりました。

ボイストラベラー 音声認識や周波数周りの技術選定の話

Baplisca(@sooooouls) です。
先日、技育展で「ボイストラベラー」という音声認識と周波数取得を組合せた世界初のゲームを紹介しました。
内容や感想はこちらの記事で書きました。

baplisca.hatenablog.com

ボイストラベラー  アイコン
ボイストラベラー アイコン


ゲーム内では、音声認識をするパートと周波数取得するパートに別れています。
この2つの機能をどの様に実装したか書いていきます。

はじめに

ゲームを作ってから結構時間が経っており、あいまいなところがあると思うので注意してください。 よって適宜調べながら、補完するのを推奨します。
それと、Unityの基礎的な話はここでは書きません。

技術選定の話

ゲームという性質上、高速な相互作用が必要です。 そこで基本指針としては、ユーザー目線に立った操作性と安定性と低遅延性を心がけました。

音声区間検出

音声認識と周波数取得、両方に共通するのは音声区間検出(VAD)です。 音声区間検出は、実際に取り出したい信号区間のみを検出し、雑音のみの信号区間を除去します。 これにより、音声認識と周波数取得の精度が上がります。 実装では、パワースペクトルとゼロ交差数を用いました。 パワースペクトルで、ある閾値以上の音を有声と判断します。 ゼロ交差数で、ある閾値以上の値を雑音として判断します。
この2つの技術で、音声区間検出を実現しています。 もっと詳しい説明を見つけたので紹介します。

www.ai-shift.co.jp

音声認識

使用技術の変遷は、UnityEngine.Windows.Speech → Julius(モジュールモード)→ Julius(ネイティブプラグイン)です。
UnityEngine.Windows.Speechは、Unityの音声認識APIなので手軽に実装できたので採用しました。しかし、実装してみると認識遅延が発生して、ゲームとしては使えませんでした。
Julius(モジュールモード)は、Juliusを裏で実行し、ソケット通信を行うのですが、頻繁にソケットエラーが起き、安定しませんでした。
Julius(ネイティブプラグイン)は、メインスレッドであるC#側から、C++で書かれたJuliusの処理を呼び出し、音声認識を実現しています。両者の欠点(遅延と安定性)をうまく補えたので採用しました。

周波数取得

初めは、AMDF(Average Magnitude Difference Function)で、自己相関関数を利用して周波数を取得してました。ほぼリアルタイムで周波数は取得できるのですが、精度があまり良くなかったです。例えば音階A4(440Hz)の信号を流し込むと、倍音のA5(880Hz)で判定されるケースがありました。
試行錯誤の末、最終的には、高速フーリエ変換FFT)を用いました。リアルタイムで精度もかなり高いです。

終わりに

「ボイストラベラー」は、現在Windows(exe版)のみを作成してます。UnityはMacAndroid、ブラウザ(WebGL)などのマルチプラットフォームに対応しているので、他プラットフォームでの公開も検討してます。

NSSOL (日鉄ソリューションズ)インターンに参加しました

Baplisca (@sooooouls) です。
先月NSSOLの研究開発職のインターンシップに参加したので、感想などを書きます。

www.nssol.nipponsteel.com

きっかけ

参加した経緯ですが、LabBaseからスカウトいただき、選考を受け、参加しました。

当日まで

私が配属されたのは研究開発職の主に組合せ最適化を行っているチーム (IMGroup) で、配属者は私の他にもうひとりいました。その方は私と同じ大学でかつ、研究科も同じだったので偶然にしては凄いなと思いました。
事前にZoomで3週間実施する2テーマの紹介を、配属先のメンターの方がしてくださいました。なんとメンターの方も大学のOBだったため親近感わきまくりでした。研究室で組合せ最適化の研究を行っているので、難しいテーマでもイケるやろと、難しい方を選択してしまったのですが、これが悪夢の始まりでした…

前日

初日と最終日は現地インターンだったため、移動しました。
インターン先が横浜みなとみらいなので、仙台から東北新幹線で東京駅、そのまま京浜東北線に乗り換えて、手配されたホテルにチェックインしました。 到着後お腹が空いたので、夜ご飯を探しました。 日給支払われるためちょっと贅沢してもいいよね!ということで、秀吉という回らないお寿司屋に行きました。おいしかったです。

f:id:Baplisca:20201006181225j:plain
特上寿司
f:id:Baplisca:20201006181508j:plain
アンコウ唐揚げ

当日

みなとみらいのシステム研究開発センターに行きました。 ちょっとした会社内見学と論文の概要説明をされた後、解散しました。 お昼ご飯は、近くのラーメン屋に行き「すごい煮干しラーメン」を食べました。

f:id:Baplisca:20201006182327j:plain
すごい煮干しラーメン

1週目

指定された論文を読みました。
論文は「Computing the Initial Temperature of Simulated Annealing」です。

link.springer.com

詳しい内容を書くと長くなってしまうので、元論文読んでください。
概要としてはシミュレーテッドアニーリング (SA)を実行する際のパラメータの一つである初期温度を初期解の近傍エネルギーから求めることです。 組合せ最適化問題の問題構造によって、適切な初期温度は変わるので、それを求めようという話です。
大学の研究では、SAの初期温度をとりあえず高く設定してましたが、高くすることで逆によくない最終解になる場合があるみたいです。初期温度を高くするとアニーリング時間が長くなったり、冷却を早くする必要があるので、時間効率の良い初期温度の推定は大事です。

1週目の最後にIMGroupの皆さんに論文紹介をしました。 発表後の質問で、クリティカルな質問が飛んできて泣きそうになりました。
(論文読んでないのになんでわかるのこの方たち…)
その質問もあったおかげで理解も深まりました。

2週目

今回の論文のロジックのプログラムを書きました。
その後、論文の結果には記されてなかった追加検証を行いました。
言語はJavaで指定されてたので、心配でしたが、普通に書けました。
書き方はほぼC#なので助かりました。
Javaもいいぞ…!
元論文が難しくて、理解が出来ない部分やプログラムの成果が出ないこともありましたが、メンターの力を借りて(借りすぎた)なんとかやり遂げました。

3週目

運悪く秋の長期連休が挟まったので、水曜日スタートでした。
水・木の二日と金曜日の午前を使ってスライドを作成し、金曜の午後にシステム研究開発センター全体に向けて成果を発表しました。

最後に

長期インターンだったため、成果や進捗が出ない時もありましたが、諦めずに頑張れてよかったなと思いました。 大抵のことは粘れば何とかなりますが、どうしようもない時は頼るのもありだと思ってます。 迎えてくださった人事の方、3週間相談に乗ってくださったメンターの方、IMGroupのみなさま、ありがとうございました。

※ この記事はNSSOL社員さんの許可 (検閲) のもと、公開しています

サポーターズ1on1に参加しました

Baplisca (@sooooouls) です。

先日サポーターズさんのエンジニア1on1に参加しました。

talent.supporterz.jp

きっかけ

サポーターズさんから、
「1on1参加しませんか?こちらのイベントは本来であればご参加いただいた皆様に10,000円の支援金をプレゼントさせていただいているのですが…Bapliscaさんのプロフィールと以前ご回答いただいたアンケートを拝見し、プログラミング経験が豊富で非常に優秀な方だと感じました。そのため、 もしBapliscaさんに下記イベントにご参加いただけましたら、特別に追加で5,000円の支援金をプレゼントさせていただきたく思っております。」
のようなメールをいただきました。
初めは詐欺メールかな?と思いましたが、しっかりとしたイベントでした。(疑ってすみませんでした)
申し込みは先着順ではなく、今までの経歴やアウトプット、どのようなエンジニアになりたいかをアンケートに書いて応募しました。
倍率は、100人応募して、40人合格くらいなので2.5倍です。
正直そこまでアウトプットをしてないので受かるか心配でしたが、2週間くらい待って、合格の通知が来たので参加することになりました。 サポーターズさんには先週の技育展に続いての参加でお世話になりっぱなしです。

talent.supporterz.jp

当日まで

スライドを作りました。
一応自己紹介は5分くらいと言われてたのですが、15枚くらいスライド作成しまいました。
まぁ早口で話せばなんとか…?

当日

午前

10時スタートだったのですが、直前まで寝ていました。
午前の部は、ZOOMの音声・映像チェック、企業の5分プレゼン×20企業、学生の自己紹介1分×40人です。
企業の5分プレゼン中に感想や面談志望度を提出する必要があるので、結構キツかったです。
学生は、高専から大学院生までいろいろな方が参加してました。
沖縄や北海道の方もいて、オンラインのいいとこなのかなと思いました。
移動がないことや直前まで寝れるのはいいぞ!
午前の最後に最終的な面接志望度を提出してお昼休みになりました。
お昼休み中にサポーターズさんが、企業と学生の志望マッチングしていました。
30分くらいでマッチング完了させてたので、凄いなと思いました。

午後

面談する企業が決まりました。
8ターン全て埋まってたが嬉しかったです(こなみ)
面談したのは、サイボウズさん、楽天さん、メルカリさん、DeNAさん、グリーさん、ピクシブさん、オープンワークさん、マネーフォワードさんです。
オンラインで自分の意見や気持ちを伝えられるか不安でしたが、概ね上手くいきました。
エンジニア面談ということあって、スライドのインターン歴や何を考えてアウトプットしたのか、これからエンジニアとしてどうなりたいかについての質問を多くされました。
面接ではなくて、面談だったので、発表中に相槌を打ってもらえて話しやすかったです。
アウトプットの「海洋生物たちの復讐」で、自機がシャリを飛ばして、敵がお寿司に変わるんですよ〜の話は受けが良かったです。

面談後にフィードバックをもらえて、「最も良かった点」では、「技術力」が6社で、「思考力」が1社、「コミュニケーション力」が1社でした。技術力は多分技育展で登壇した「ボイストラベラー 」が大きかったのかなと思ってます。UIやUXのこだわりやプログラム内部で高速化していたので…


あとは、自己紹介スライドを毎回発表するので、口が疲れます。(オンラインなので、録音して再生すれば…?)

まとめ

スライドをあらかじめ作って、企業に対するイメージやこれからどうなりたいかを意識して話せばなんとかなります。 少なくとも、私が面談した企業は優しかったので…

技育展に登壇しました

Baplisca (@sooooouls) です。

本日技育展に登壇しました。

 

「ボイストラベラー」という音声認識と周波数取得を組合せた世界初のゲームを紹介しました。

こはち (@takoroku66) 君と2人で制作したゲームになります。

 

f:id:Baplisca:20201004142659p:plain

アイコン

f:id:Baplisca:20201004143220p:plain

ポスター

 

発表は5分間だったため、全てをお話できず、スライドを厳選しました。

発表スライドはこちらです。

 

まとめ

チーム開発部門で発表させていただき、受賞はしませんでしたが貴重な経験をさせてもらいました。

来年も開催するみたいなので、今度はWeb系で制作物を公開したいと思っています。

関わった全ての皆さま、ありがとうございました。

AWS SAのインターンに参加しました

Bapliscaです。

昨日まで3日間のAWS SAのインターンに行ってきたのでその感想です。

 

下記は2年前のプロジェクト内容みたいです。

 

本来であれば、5日間だったみたいですが〇〇○の影響で3日間のリモート開催でした。

プログラム内容はNDAを交わしたので言えませんが、AWSの社員さんは賢く、説明が上手い印象を持ちました。

 

プログラムの最終日にOLP賞をいただくことができ、大変嬉しかったです。

ほんとにチームメンバーに恵まれたと思います。

ありがとうございました。

 

追記

日商品が送られてきました。

どうやって使うんでしょうか…

f:id:Baplisca:20200910110846j:plain

alexaの関連商品?

 

三菱UFJインフォメーションテクノロジー MUIT インターンに参加しました

Bapliscaです。

先日MUITのハッカソンインターン)に参加したので、その備忘録や感想などを書いていきます。

 

MUITは三菱UFJ銀行のシステム部門です。

ハッカソンの内容はhttp://www.it.mufg.jp/recruiting/fresh/internship/です。

そのプログラムの3Daysに参加しました。

内容は、グループワークで課題の分析、解決策の立案を行い、
問題を解決するアプリケーションを開発することです。

インターン全体では修士1年・学部3年が半々でした。

グループは4人編成で、私以外学部生だったのもありグループAのチームリーダーを務め役割分担することになりました。

これまでにゲーム制作でチーム開発の経験がありましたが、オンライン開催ということでオンライン上でのコミュニケーションが取れるか不安でしたが、Amazon Chimeとmiroを用いて円滑にやり取りできました…!

初めてmiroを使いましたが便利ですね!

オフラインでも使いたいツールです。

 

3Daysの流れは主に

1日目:会社説明・グループ内の自己紹介

2日目:サービス立案・開発

3日目:開発・発表

でした。 

 

1日目の会社説明で技術志向高めな印象を受けました。

参加前はお堅い印象がありましたが、技術に対し柔軟で、例えば顧客情報はオンプレミスでその他はAWSを活用しているみたいです。

 

実際に開発するにあたり、ターゲット層やサービス内容をグループ内で考えました。

今年のテーマは、「ポイ活でワクワク〇〇活」でした。

分かりやすい and キャッチな内容の「タピオカ×コロナ×ポイント」のビジネスモデルを考えました。

テーマは「ポイ活でワクワクタピ活」です!

その後、自身のスキルと相談しながら詳細設計を考えました。

基本的にはそれぞれの得意分野で開発するのですが、特に役割分担で気をつけたのが、常に全員が手を動かせるようなバージョン管理(github)や進捗報告です。 

進捗報告に関しては、日の始めや昼休み後に確認していました。

 

グループごとに社員さんがメンターとしてついてくれたので、技術的質問をいっぱいすることが出来ました。

僕の役割は、バックエンドでAWSAPI Gatewayを介したDynamoDBの設計で、かつメンターさんの専門分野でもあったためとても助かりました。

基本的なCRUD操作ならLambdaを介さずに実装できるのでとても便利でした。

http://acro-engineer.hatenablog.com/entry/2016/09/23/120000

認証部分はBasic認証だとセキュリティ的によくないのでAWS Cognitoを考えましたが、時間制約上実装まで至りませんでした。

フロントはWebとAndroidで、それぞれ言語やフレームワークは、HTML/CSS,JavaScript,Android Studio,Javaなどです。

 

3日目の最後では、10分くらいの発表を参加者全員・社員さんの前でやりました。

慌てて20~30分くらいでスライド作ったので、若干見栄えが悪いですが、一応共有します…

 

他のグループの発表も聞いて、ノーコードglide開発や自然言語処理モデルBERTを用いたグループがいたり、いろいろな発想・技術を吸収することが出来ました。

 

来年学部3年生・修士1年の方には是非お勧めしたいインターンです。

協力してくださった皆様、ありがとうございました。

 

※この記事はMUIT社員さんの許可のもと、公開しています