naoya_t@hatenablog

いわゆるチラシノウラであります

Coursera: Robotics: 1. Aerial Robotics〈修了〉

全6部から成るCourseraのRobotics特別講座

  • Aerial Robotics
  • Computational Motion Planning
  • Mobility
  • Perception
  • Estimation and Learning
  • Capstone

の第1講 Aerial Robotics(4週間コース)を受講しました。ドローンに関する講座です。
f:id:n4_t:20180508220849j:plain

ドローンは安全性の問題や法整備など課題は多いし実社会での応用はまだまだこれからなのかなと思いますが、物流・農業・建築・災害救助をはじめ様々な分野での活用が期待されています。未来を感じます。

この講座では、クワッドローター(推進に4つの回転翼を用いるドローン)の飛行を制御するのに必要な物理学(力学)が学べます。最終週の課題では、空中の与えられた経由点のリストから飛行コースを計画し、計画した軌道に沿った飛行に必要な推力やモーメントの計算を行うプログラムを実装します。*1
f:id:n4_t:20180508133512g:plain

プログラミング実習ではMATLAB*2を使います。Webで使えるアカウントが1ヶ月無料でもらえる*3のでそれを使います。

講義は全編英語で行われています。(英語字幕可、日本語字幕はいまのところ無し)
先生の英語は若干訛りがあるけれどゆっくり目に話してくれているように思いますし、比較的聞きやすい英語だと思います。
TAの女性が担当している補足資料のビデオは綺麗な英語で聞きやすいですけれど割と早口です。

剛体力学(剛体の回転とかモーメントとか角運動量とか慣性テンソルとか)が分からない、あるいは苦手な人は先にさらっておくか、力学の教科書を手元に置いての受講をおすすめします。*4

*1:下のGIFアニメーションは最終週の課題で実装したプログラムに適当なコース(通過したい空中の点のリスト)を与えてみたシミュレーション結果です((GIFアニメを吐き出すようにシミュレータを若干改造しました。

*2:以前Andrew Ng先生の機械学習の講義Octaveを触ったことがあるのでなんとなくそんな感じかなと思って臨みました。でも課題であらかじめ与えられるプログラムファイルは手元のOctaveで動かせるかと思ったら動きませんでした。

*3:期限に間に合わなくて次月に繰越になってもまたもらえます

*4:物理学・力学については高校物理レベル+α の知識、具体的にはセンター試験の物理は満点取ったけど大学では力学とか電磁気学の授業をちょっと覗いただけで単位は取ってないはず…ぐらいの知識で講義に臨んでの感想です。

続きを読む

DL4US (Deep Learning for all of us) 修了

東大松尾研監修のディープラーニングのオンライン講座 DL4US を受講し、無事修了しました。
f:id:n4_t:20180424113723p:plain
内容の大部分は書籍やCourseraの講義、普段の業務などで既知のものでしたが、知識を更新しながらコードに落として確認していく作業は有益でした*1。最後の辺り、GANやVAE、深層強化学習の辺りは概念的には知っていましたが実際にコードを書いてみるのは初めてで楽しかったです。最終レポートの提出期限は2回延長されたのですがその締切時刻に間に合わず日が変わってからの投稿になってしまいましたがacceptして頂けました。(ありがとうございます)

*1:この分野は進化がとても速いので定期的に知識をアップデートしていく必要がありますね。

続きを読む

deeplearning.ai受講メモ (2/24更新)

【追記】2/19全講座修了しました!

f:id:n4_t:20170926194609p:plain
https://www.deeplearning.ai/

Andrew Ng先生のディープラーニング専門講座 deeplearning.ai を受講したメモ。久々のCoursera!

  1. Neural Networks and Deep Learning
  2. Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
  3. Structuring Machine Learning Projects
  4. Convolutional Neural Networks
  5. Sequence Models

Courseraの中でもこの講義は Specialization という枠組みで、基本有料(月$49.00;講義ビデオを視聴するだけで課題なしCertificateなしで良ければ無料)のコース。最初の1週間は無料*1

講義はすべて英語*2
1つ目のやつは日本語や中国語の字幕が用意されていたけど、後の方は英語字幕だけだった。

*1:無料になるのは講座単位ではなく Specialization の枠組み単位らしい

*2:Andrewの英語を聞くのって前に受けたMachine Learningコースぶりか?いやそんなこともないか

続きを読む

AtCoder Petrozavodsk Contest 001

apc001.contest.atcoder.jp
Petrozavodskって何だ?
というのはさておき。土曜深夜に5時間コンテスト。

寝ぼけててlong longにし忘れてWAみたいなのが多かったけど残り5分で5問目を通して5完。眠いけど頑張った。
ooooo----- (147th) 1616->1715 (+99)
f:id:n4_t:20180204054934p:plain
順位表では147なのに142ndなのはなぜだろう
f:id:n4_t:20180204054923p:plain
パフォーマンスは2216(黄)とな
続けて出てれば黄色(2000〜2399かな)までは行ける気がしてきた。
f:id:n4_t:20180204055105p:plain

続きを読む

Coursera: Introduction to FPGA Design for Embedded Systems

コロラド大学ボルダー校のTimothy Scherr先生による組み込みシステム向けFPGA設計入門の4週間コースをCourseraで受講しました。
f:id:n4_t:20180108232341p:plain

そもそもFPGAに関しては全くの初心者(電子回路とか論理回路については素人とまでは言わないけれど)で、中級者向けのこのコースについていけるのかは未知数でしたが、論理回路に関するなけなしの知識を総動員して最終週までたどり着けました。

Quizは満点が出るまでやり直して、無事100%で修了できました。(1/24)

受講の動機

去年の秋からCourseraの専門講義 deeplearning.ai を受講していて、第5講の開講が延期になって1ヶ月空いたので何か受けようかなと思ったのと、とある社内プロジェクトFPGAをいじることになったのとで受講を決めました。

概要

実際に手を動かしながら、FPGA開発の基礎を四週間で習得します。
プログラマブル・ロジック・デバイスの歴史
FPGAの選び方(各社のFPGAの特長やFPGAアーキテクチャの違い)
・開発環境の使い方(インストールから回路設計まで)
・回路設計ハンズオン(加算器からNios II*1を使った組み込みシステムまで)

生徒同士で採点し合うpeer assessmentの仕組みを採用しているコースなので、自動採点のみのコースと違って締め切りが重要になります。(システム的には課題の提出は可能ですが、採点してくれる生徒がいなくなってしまう為)

講義は全て英語で、とてもアメリカっぽい*2英語です。
英語字幕とトランスクリプションはありますが、日本語字幕は(現在のところ)用意されていません。

イントロダクションがスパイ・エージェント養成コースみたいな演出になっています*3が、ビデオを見ながらFPGA開発環境(IntelのQuartus Prime)をインストールして実際に使いながら進めていくハンズオン形式のチュートリアルといった感じでした。ビデオを適宜止めながら画面を操作するので、ビデオの長さ以上の時間がどうしてもかかります。

推奨環境

Quartus Primeの動作環境がWindowsLinuxRedHatもしくはCentOS)のみで、Macエミュレータを動かすのは非推奨、と明言されていましたが、残念ながら手元にはMacBookiPad Proしかないので、仮想化技術で行けるところまで行って、駄目なら駄目でその時考えることにしよう、と思って始めました。

Macでもなんとか最後まで受講できましたが、この講義に関してはWindowsマシンがあるならWindowsでの受講をお薦めします。

メモリは(WindowsにせよLinuxにせよ)8GB以上推奨、とのことです*4

Linux絡みの注意点

・講義でも使われている設計検証ツールModelSimの無料版は32bit版で、これを64bit環境で動かすのにあれこれ(デフォルトでは入っていないi686なものを)追加インストールする必要がありました。
・IP CatalogのライブラリからIP部品(乗算器、SQRTなど)を調達する時に出てくるMegaWizardが、先に進むごとに重くなって三ページ目ぐらいでフリーズします。これはCentOSのデスクトップ効果(ビジュアルエフェクト)を標準からCompizにするとなぜか直ります。(普通逆かなと思うんだけど)
・回路図でユーザ定義シンボルの右上に余計なテーブルみたいなのが表示されて、小さくはできるけど消し方が分かりませんでした。

macOS上で頑張りたい人のためのメモ

・最初Docker for Macで行けないか試しました。CentOSを入れて、画面はXQuartzに出してインストーラを走らせて、インストール自体は完了しますが起動しようとすると謎ダンプを表示して落ちます。(CentOSのバージョンを色々試したり、Xの画面が出なくて右往左往したりで半日ぐらい格闘してたと思います)。
・その後(Dockerは諦めて)VirtualBoxCentOS(6.9。依存ライブラリの都合上6.x系推奨)を入れた上で無事動きました。Dockerではハードウェア的な何かをチェックされて落ちたのでしょうか。
・メモリは8GB以上推奨とのことでしたが、3GB強程度の割当てで最後まで行けました。

以下受講記録

*1:IntelのソフトコアCPUで、XilinxでいうところのMicroBlazeに相当。RISCアーキテクチャCPUのFPGA実装。

*2:コロラドっぽいかはわかりません。

*3:Week 4でシステム設計ツールQsysを使って組み込みシステムを作る話のところで"By the time you are done, people may mistake you for Q!"って言ってるけどQって何?誰?と思った人。ジェームズ・ボンドのコードネームです。

*4:多分4GBなくても行けますが。

続きを読む

GCCのバグ?未定義動作?g++とclang++で違う結果になるコード

こないだAtCoderの過去問を解いてて
ローカルでは正解が出ているのにサーバ上でREが出まくってはまったのでメモ。

再現できる形で変形&単純化を繰り返した結果がこんな感じ

#include <vector>
#include <cstdio>

std::vector<int> a, b;

int f() {
  a.push_back(-1);
  b.push_back(-1);
  return (int)a.size();
}

int main() {
  int first = f();
  printf("a[0]=%d, b[0]=%d\n", a[0], b[0]);
  a[0] = f();
  printf("a[0]=%d, b[0]=%d\n", a[0], b[0]);
  return 0;
}
続きを読む