流れに従ひて己を失はず.

日々の研究について書きます

庵野秀明監督のカメラを追う

タイトルの通りです.以下のツイートにある,庵野監督によるカメラの動きを再現していきたいと思います.

カメラの位置姿勢推定については,カメラの内部パラメータとカメラの外部パラメータを求めることで可能です.内部パラメータは,庵野監督がiPhoneを使用しているという情報から求めていきます.外部パラメータは,別のツイートにもあるように,モニタ上の黒点は100mmごとに打たれた格子点とのことなので,この情報を使って求めていきます.

まず,内部パラメータの推定です.これはカメラの焦点距離や歪みなどの情報です.パッと調べた限りiPhoneの型番ごとのカメラパラメータが公開されていないっぽい(されてたら教えて下さい)というのと,swiftをいじればわかるっぽいんですがswift完全素人なので自分で推定するところからやることにします,監督の使用されているiPhoneと同じものを用意できればいいんですが,あんまりiPhoneのバリエーションに詳しくないので,ここは自分の持っているiPhoneと同じものを使っている,ということにして話を進めます(「プロフェッショナル仕事の流儀」でも使用されている姿がよく映っていたので詳しい方,わかれば教えて下さい.というか数値そのものご存知でしたら教えて下さい).いきなり監督のiPhone=自分のiPhoneというクソデカ仮定を置きましたが,まあスケールとか歪みとかがズレるくらいだろうということで気にせずいきます.
定番アイテムのチェッカーボードを使って,内部パラメータ推定を行います.といっても,Fig. 1のようなチェッカーボードの画像を何枚も撮って,OpenCVのcalibrateCamera関数に放り込むだけです.ここでの注意としては,iPhoneは写真撮影と動画撮影とで画角が変わってしまうので,ちゃんと条件を合わせるために動画で撮影します.今回は動画で撮影した後,適当にその中から画像形式で抜き出して先の関数の入力としました.

f:id:Yasutchi:20210731003435p:plain:w400
Fig. 1

次に,外部パラメータの推定です.これは,世界座標系における座標やベクトルをカメラ座標系での座標やベクトルに変換する回転と並進の情報です.Fig. 2に位置関係を示しました.ここでまず最初に世界座標系を決めなければいけないんですが,先述のモニタ上に配置された黒点を使います.画面横方向にx_w軸,縦方向にy_w軸,画面と垂直でカメラのある方向にz_w軸をとり,ちょうど水面から顔を出したマリの頭と重なる黒点を原点(0,0,0)として定めます.

f:id:Yasutchi:20210731015140j:plain:w400
Fig. 2.

カメラの画面内に世界座標上での位置が既知な点が4点以上あれば,カメラの位置姿勢を求めることができます (PnP問題).つまり,動画の各フレームで4点以上の黒点を検出し,それらがカメラ画像中でどの位置に写り込んでいるか,それらが世界座標系においてどの位置に配置された黒点か,を求めていきます.これらが分かれば,OpenCVのsolvePnPRansac関数とRodrigues関数を使って,回転行列と並進ベクトルを求めることができます.ここで求められた回転行列と並進ベクトルは世界座標系における座標やベクトルをカメラ座標系での座標やベクトルに変換するものなので,今回のようにカメラの位置姿勢が欲しい場合には下の式のように,逆行列を用いた式変形を行った後,カメラ座標系における位置(x_c,y_c,z_c)=(0,0,0)を代入することで位置が求まります.

{\displaystyle
\begin{pmatrix}
x_c\\
y_c\\
z_c
\end{pmatrix}
=
\boldsymbol{R}
\begin{pmatrix}
x_w\\
y_w\\
z_w
\end{pmatrix}
+
\boldsymbol{t},
}

{\displaystyle
\begin{pmatrix}
x_w\\
y_w\\
z_w
\end{pmatrix}
=
\boldsymbol{R}^{-1} 
\Biggl(\,
\begin{pmatrix}
x_c\\
y_c\\
z_c
\end{pmatrix}
-
\boldsymbol{t}\,
\Biggl).
}

カメラの姿勢については世界座標系におけるカメラの方向ベクトル\boldsymbol{v_w}を求めたいので,下式にカメラ座標系における方向ベクトル\boldsymbol{v_c} = (0,0,1)を代入することで求めることができます.

{\displaystyle
\boldsymbol{v_w}
=
\boldsymbol{R}^{-1} 
\boldsymbol{v_c}
.
}

さて,ここからはどのようにして動画の各フレームで黒点を検出するかです.そこまでフレーム数も多くはないので,チクチクと手作業でもいいんですができるだけ自動化してやっていきたいと思います.単純に二値化して黒い部分だけ抽出してもトレス線なども引っかかってしまうためうまくいきません.特徴点マッチングなんかもあんまりうまくいきそうにないので,今回は最初のフレームだけ各点の初期位置を登録して,それ以降のフレームでは前フレームの黒点位置の周囲のみを探索するようなトラッキングっぽい手法でやっていきます.Fig. 3に示すように,現在のフレームでの黒点位置は前フレームの黒点位置の周辺に来るはずです.なのでこの周辺範囲内でなら,黒点以外の余計なものが映り込む可能性がガクッと下がるので二値化処理でかんたんに黒点を見つけることができます.

f:id:Yasutchi:20210731015204j:plain:w400
Fig. 3.

ただ,このままだと最初のフレームに映っている黒点しか見つけられないので,この動画のように最初のフレームでは映っていなかった黒点が画面内に出て来るような場合に,これらを検出できません.そこで,一旦求めた現在のフレームでの外部パラメータを使って,見つけられている以外の黒点がカメラ画像平面でどの位置に来るかということをOpenCVのprojectPoints関数を使って再投影計算していきます.これによって,発見できていない黒点のカメラ画像中での位置が例えば(-100,-100)のように画角以外の場所であれば無視してOKですが,画角内部に収まるような場合にはこの周囲も同様に探索し,初めて画面に現れたような黒点も検出します.またこれによって,マリの頭と重なってしまいこの間検出できていなかった黒点もその後復活して検出できるようになります.
以上の手順によってカメラの位置姿勢の軌跡を計算できます.と言いたいところですが,実際には検出を間違えたところの補正を手作業でやっておりそれなりに疲れました.モーションブラーが乗ると黒点の黒が薄まって二値化がうまくいかなかったり,黒点とトレス線が非常に近い場合にもうまくいきませんでした.とはいえすべて手作業と比べたら断然楽です.

Fig. 4に1カット分のカメラ軌跡を示します.この動画中でマリは10回水面から浮上しますが,ここに示した結果は一番最初に浮上したカットにおけるカメラワークです.青で示した折れ線がカメラの位置の遷移で,青点が各フレームでの位置です.赤線で示したのがカメラの向いている方向です.画面横方向におよそ150mm,画面縦方向におよそ100mm,画面から離れる方向におよそ300mm移動していることがわかります.カメラの方向はほとんどモニタ画面に対して垂直ですが,位置の遷移とともに微妙に変化していることがわかります.

f:id:Yasutchi:20210731023232p:plain
Fig. 4.

Fig. 5に3カット分のカメラ軌跡を示します.上で合計10カットあると述べましたが,2番目と3番目のカットでは最初のフレームでカメラがモニタ画面に近すぎるため映り込んでいる黒点の数が十分でなく候補から外しました.また,5番目と7番目のカットではタイミングを図るためにカメラは動いていません.故に,前から使えるカット3つ分ということで,1,4,6番目のカットを使っています(8,9,10番目については時間の関係上検討していません).3つを比較しても再現性高くほぼ同じ軌跡を描いていることがわかり興味深いですね.

f:id:Yasutchi:20210731023254p:plain
Fig. 5.

ということで最初に述べた,庵野監督によるカメラの動きを再現,ができました.
もっといい方法があるぜ!とかのご意見や,実はカラー内部ではこうやっていてですね...といった極秘情報などお待ちしております.

参考:
カメラキャリブレーション — OpenCV-Python Tutorials 1 documentation
姿勢推定 — OpenCV-Python Tutorials 1 documentation

1年前の自分へ

(こちらは社会人学生 Advent Calendar 2020 - Adventarの5日目の記事です.)

1年前の自分へ
この文章を書いているのは2020年12月5日のお前だ.
この10月で博士課程4年生になった.ああ,そうだ4年生だ.気を落とすな...気持ちはわかる...3年では無理だった.そして来年2021年春でも無理そうなので2021年の秋修了を目指して頑張っているところなんだ.
いいか,お前にとって来年2020年は色々大変な年になるから心しておけ...ここにそのためのアドバイスを残すから参考にしてくれ.

お前はいまやっているシミュレーションもなんとなく上手くいっているし,後は実験装置組み上げてデータとって,4月くらいには論文出るなーとか思っているだろう.甘い!!!甘いんだよ...よく聞け,いま自分がこの文章を書いている2020年12月5日の時点で論文はまだ出ていない.ああそうだ...出ていないんだよ......
大きな理由は3つだな.
新型コロナウイルス
・シミュレーションバグ
キャリブレーションうまくいかない

じゃあ2020年を時系列順に説明していく.

1月:シミュレーションの結果を反映した試作品が出来上がる頃だな.実験装置の例の部分の作り方だが今手元に2案あるだろう.それな,手間のかかる方の案があるな,それでやれ.1つ目の案だと誤差が大きくて使えないんだ.なんとなーくうっすら勘づいていると思うが,やっぱり出来るだけ頑張る方法じゃないとダメ.1つ目の案をまず試した結果のこの試作品だが,結果これは使えなかった.

2月:サンフランシスコ開催の学会に行く*1.これはいい感じに出来る.準備もうまく出来るし,トラブルもない.展示も面白いし色々見て回れ.メーカーの人とも色々話せ.アルカトラズ島の見学ツアーは超おすすめなので絶対に行け.ハンバーガーとルートビアがうまいぞ.次のテーマのアイデア出しもあるからここでいろいろ考えておけ.

3月:このあたりから新型コロナウイルスというのが流行り始めていろいろ状況が怪しくなってくる.会社は基本的に在宅になる.ちなみに現時点の2020年12月でも在宅勤務中でこれは本当にありがたい.
いよいよ実験に着手するんだが,先に言ったとおり1つ目の案で作った試作品だと誤差があるから思い通りの実験ができない.結果も出ない.でもここでいろいろ試行錯誤したのは後々役に立つ.ああ,あと...3月な...ノートPC,「壊れるかもしれないけどこれ試してみようかな...」とか思うことするなよ?絶対にするなよ!!!いろいろ世の中が大変な時期にハードからの復旧は本当に大変になるからな!!!

4月:緊急事態宣言とかいうアニメとかでしか聞いたことのないような名前の状況に世の中がなる.基本的に外出が出来なくなる.家でゆっくり仕事と大学の事出来る〜とか一瞬考えてるだろうがそうはいかない.お前のもうすぐ2歳になる息子の保育園もせっかく4月から始まったと思ったら1週間で休園になるぞ.これがどういうことか.以下の時間割を見てくれ.

6:00-7:00 息子氏起床→自分も起床
7:00-8:00 朝ごはんとアンパンマンたいそう3セット
8:00-10:00 息子氏とプラレール→公園
10:00-12:00 妻と交代して在宅作業
12:00-13:00 お昼ごはん
13:00-15:00 在宅作業(息子氏昼寝)
15:00-17:00 息子氏と公園orプラレールor在宅作業(妻と交代)
17:00-19:00 お風呂,晩ごはん
19:00-20:00 アンパンマンたいそう3セット→息子氏は就寝
20:00-24:00 在宅作業
24:00-25:00 就寝

つまり自宅保育になり,同じく在宅勤務の妻と交代で息子氏と遊ばねばならん.息子氏の起きている間は必ず自分か妻が息子氏にマンツーマンディフェンスしないといかん.あと言っておくが一日中家でプラレールなんてのはだめだ.絶対に夜寝ない.雨が降っても公園にお散歩に行け.心配せんでも息子氏は行きたがるのでお付き合いするだけでいい.そして息子氏に少しでもお遊び疲れいただくのだ.そろそろ大人の速歩きじゃ追いつけない機動性だろ?もう一緒に外で遊ぶそれだけで大人はくたくたになる.日中にできる作業は限られると思ったほうがいい.寝食を忘れてコーディングなんてことはもう絶対できない.自分の体力を最大限残しつつ息子氏に夜ぐっすり寝ていただくラインを見極めろ.緊急事態宣言自体はGW明けに解除になるが,5月いっぱいまでは登園自粛期間なので2ヶ月間この生活になる.心して臨め...
もちろんだが大学も行けなくなるぞ.あと,もともとやっていたシミュレーションにバグが見つかる.あの気づいた瞬間にすーっと血の引く感じは本当に良くない.これを防ぐために何ができたかというと結構難しくて,もっとコードテストの勉強をしておけばよかったのかな,くらいしか無い.ユニットテストは通る系だったので結合のところで気を抜いていた.どうかお前は気づいてくれ.このせいでだいぶ巻き戻ってしまう.この件もあるし,大学にも行けないしなので,コードのリファクタリングと実験の組み直し,あとは関連する分野の勉強をすることになる.

5月:もういろいろキツくて記憶がないんだが,今メモを見ると実験装置の例の部分の作り方,やっとここで2つ目の手間のかかる方の案でいこうと決めているな.それでいい.あとはこのタイミングで実験装置全体の設計を十分時間をとってできたのが良かった.結果,組み上がる実験装置はいい出来になった.
もう日中は息子氏との外遊びに全振りしているからサングラス*2なんかを作っちゃう.めちゃくちゃ良かったので早く買え.

6月:このあたりで9月頭の特集号を狙うようなスケジュールを引く.息子氏の保育園が再開となる.保育士さんたちには最大限の感謝をしろ.圧倒的感謝で臨め.
息子氏が日中保育園に行くので時間はできるが,ここまでの2ヶ月の借金で仕事が忙しくなるのと,実験装置の一部を自作できないかな?とかいう,結果的に時間を無駄にする検討を挟んでしまい,あまり進捗がないまま1ヶ月が溶ける.自作できると試行錯誤のプロセスが楽にできる点は良いがクオリティが落ちる.今回はクオリティが大事だったからプロに任せたほうが断然良かった.

7月:このあたりからキャリブレーションが収束しない問題にぶち当たる.そう,最初に上げた遅延要因3つの内の3つ目.実験結果とシミュレーションのすり合わせが収束しない.原因は2つあって,最終的にそれに気づくのは1つ目が8月頭,2つ目が8月中旬になる.それまで本当にいろいろ試すもうまく行かなくて心が折れる.1つ目はアルゴリズム的な工夫で解決できて,2つ目は設計を少し近似でやってるところを厳密に直せば解決できる.頑張って早く気付け.息子氏に「なんでキャリブレうまくいかんのかな???」とか訊くといい.ヒントになる単語を口走る.
新型コロナウイルスの前はボルダリングで身体を動かせていたが,そうはいかなくなる.会社にも行かないので昼休みの懸垂もできない.屋内自転車ローラー環境を整備しろ.自分は7月にスマートローラー*3を買ってzwift環境を得たが,もっと早くてよかった.数年悩んでいた腰痛も消える.早く買え.

8月:大学に出られる環境が少しづつ整い,ちゃんと実機実験ができるようになる.いろいろ実験してやっとキャリブレーションがうまくいく.最終的な実験もうまくいく.だがちょっと遅すぎて目標だった9月の特集号には間に合わない.

9月:半期の締めだから仕事が忙しくなる.もともと僅かな隙間でやっている学生生活だからちょっと仕事が忙しくなると時間がなくなる.修士の頃だったら2日位かければサクッとできたことに平気で1ヶ月かかったりする.あと,さっき言ったzwiftだがな,あんまり追い込むと体調を崩す.いい汗かいたな〜くらいでやめておけ*4

10月:データ取りなどなどしていたら論文の第一稿が仕上がったのが10月中頃になってしまう.月の後半は新テーマのための予備実験の予備実験みたいなことをやってデータを取る.あとはその環境構築に1日くらい使う.

11月:なんやかんや論文の添削やり取りを指導教員としていたら1ヶ月経つ.新テーマのシミュレーションもちょこちょことできるがあまり進捗が出ない月になる.ちょっと気が緩んだ週があって,「俺の魂がやる気になるのを待つ」*5とか言っていたら数日溶かした.やれ!締切が先だからとか言って寝かしておくと間に合わなくなるぞ!やれ!!いいからやれ!!!手を動かせ!!!

...という感じ.
冒頭でまだ論文は出ていないと書いたが,いちおう投稿寸前のとこまでは来ている.そこは安心してくれ.
では健闘を祈る.

点と直線の距離計算

メモ

def line_point_dist(line_p1,line_p2,point):
    #line_p1:直線上の一点
    #line_p2:直線上の一点
    #point:距離を計算したい点
    u = np.array([line_p2[0] - line_p1[0], line_p2[1] - line_p1[1]])
    v = np.array([point[0] - line_p1[0], point[1] - line_p1[1]])
    dist = abs(np.cross(u, v) / np.linalg.norm(u))
    return dist

参考:
https://tokibito.hatenablog.com/entry/20121227/1356581559

同次連立一次方程式の非自明解を特異値分解から解く

mn列でランクrである行列 \boldsymbol{A} と,n次元のベクトル \boldsymbol{x} について,以下の等式が成立するとき,\boldsymbol{x}の非自明解(\boldsymbol{x} \neq 0)特異値分解から求める.

{\displaystyle
\boldsymbol{A}\boldsymbol{x} = 0. 
}

まず,\boldsymbol{x}は大きさが不定なので,条件として以下を加える.

{\displaystyle
\|\boldsymbol{x}\| = 1. 
}

ところで,この\boldsymbol{x}は以下の解と言いかえることができる.

{\displaystyle
\underset{\left\| x\right\| =1}{min} \left\| \boldsymbol{A}\boldsymbol{x}\right\|.     
}

また,\boldsymbol{A}特異値分解の結果を以下で表す.

{\displaystyle
 \boldsymbol{A} = \boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V^{\mathrm{T}}}.   
}

図で書くとこう.
f:id:Yasutchi:20200516010800j:plain

\boldsymbol{U}はユニタリ行列であり,ユニタリ行列による変換は等長変換であることに注意して,\left\| \boldsymbol{A}\boldsymbol{x}\right\|は以下のように変形できる.

{\displaystyle
\begin{align}
 \left\| \boldsymbol{A}\boldsymbol{x}\right\| &=  \left\| \boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V^{\mathrm{T}}}\boldsymbol{x}\right\| \\
&=  \left\| \boldsymbol{\Sigma}\boldsymbol{V^{\mathrm{T}}}\boldsymbol{x}\right\| \\
&=  \left\| \boldsymbol{\Sigma}\boldsymbol{y}\right\|. 
\end{align}
}

ただし,

{\displaystyle
 \boldsymbol{y} = \boldsymbol{V^{\mathrm{T}}}\boldsymbol{x},
}
としている.ここで,\boldsymbol{V}がユニタリ行列であることによる等長変換から,以下が成立.
{\displaystyle
\left\| y \right\| = \left\| \boldsymbol{V^{\mathrm{T}}}\boldsymbol{x} \right\| = \left\| x \right\| = 1.
}


以上から,

{\displaystyle
\underset{\left\| x\right\| =1}{min} \left\| \boldsymbol{A}\boldsymbol{x}\right\| = \underset{\left\| y\right\| =1}{min} \left\| \boldsymbol{\Sigma}\boldsymbol{y}\right\|.
}

ここで,\boldsymbol{A}の特異値を\sigma_1, \sigma_2,...,\sigma_rとし,\boldsymbol{y^{\mathrm{T}}} = [ y_1,y_2,...,y_n]とおくと,

{\displaystyle
 \left\| \boldsymbol{\Sigma}\boldsymbol{y} \right\| =  \sigma_1^2 y_1^2 + \sigma_2^2 y_2^2 + ... +  \sigma_r^2 y_r^2,
}
となる.

これを最小化する\boldsymbol{y} (ただし\left\| y \right\| = 1)の各成分y_i

{\displaystyle
  y_i = \left\{ \begin{array}{ll}
    0 & (i=1,2,...,r) \\
    \alpha_i & (i=r+1,r+2,...,n) \\
    &ただし,\alpha_{r+1}^2 + \alpha_{r+2}^2 +...+\alpha_n^2  = 1,
  \end{array} \right.
}
となる.

ここで,\boldsymbol{V}の各列をベクトル\boldsymbol{v_i}(i = 1,2,...,n)と表すと,\boldsymbol{V}がユニタリ行列であるから

{\displaystyle
\begin{align}
\boldsymbol{x} &= \boldsymbol{V}\boldsymbol{V^{\mathrm{T}}}\boldsymbol{x} = \boldsymbol{V}\boldsymbol{y} \\
&= \alpha_{r+1}\boldsymbol{v}_{r+1} + \alpha_{r+2}\boldsymbol{v}_{r+2} +...+\alpha_n\boldsymbol{v}_n.
\end{align}
}

参考:
https://www2.cs.duke.edu/courses/fall15/compsci527/notes/linear-systems.pdf
http://daily-tech.hatenablog.com/entry/2018/03/18/180439

ScipyのLevenberg-Marquardt法で大域的最適解に落ちるか試した(だけ)

scipy.optimize.least_squaresライブラリを使ってLevenberg-Marquardt法を試しました.

局所最適解はx=8, 大域的最適解はx=2.
深い考察はありません.

from scipy.optimize import least_squares
import numpy as np
from matplotlib import pylab as plt

### 関数
def func(param):
    if param>5:
        funcval= (param-8)**2+100
    else:
        funcval= (param-2)**2+10
    return funcval

data = np.ones(1000)
x = np.linspace(-15,15,1000)
for i in range(0,1000):
    data[i] = func(x[i])

plt.figure()
plt.plot(x,data)
plt.ylabel("y")
plt.xlabel("x")
plt.show()



###どの初期値から始めても大域的最適解に収束するか?
data = []

#設定
jac='2-point'
bounds=(-np.inf, np.inf)
method='lm'

for i in range(-1000,1000):
    param = i
    result = least_squares(func,param,jac,bounds,method)
    data.append([i,result.x[0]])
data = np.array(data)

plt.figure()
plt.plot(data[:,0],data[:,1])
plt.ylabel("estimated param")
plt.xlabel("initial value")
plt.show()

関数の形状
f:id:Yasutchi:20200427000226p:plain

初期値と推定解
f:id:Yasutchi:20200427000250p:plain

ロボットビジョンの基礎(コロナ社)を読んだ

今更ながら読みました.

エピポーラ幾何/カメラのR,t推定/カルマンフィルタ...
中途半端にわかった気になってわかっていなかったことが多すぎたのでこの機会に整理できてよかったという感想です.

読んだ目的は,これまでずっと回避してしまっていたカメラキャリブレーション周りの勉強.
基本的には外部パラメータ(カメラの並進と回転)を求めるところがキャリブレーションの内容としてメインで書かれています.途中式など詳細に解説されていて非常に勉強になりました.
ただ,内部パラメータ(収差や焦点距離などなど)を求めるところはさらっと流して書いてある程度でこの部分が個人的に結構気になる部分だったので,次はそこの勉強です.

学会発表準備

サンフランシスコでのSPIEという学会にて発表してきました.
自分の中で発表準備が過不足なくできたな,と思えたのでここにメモを残します.
SPIE Photonics West


原稿日本語版完成 2019/12/11
英語にすること前提で日本語で書いていく.

原稿完成+投稿 2020/01/08
英文化して,校閲出して,レビューしてもらって完成.

発表スライド骨子完成 2020/01/19
発表スライドのタイトルとそのスライドを端的に表す1文or2文(max20words)を書き出す.

発表スライド絵コンテ完成 2020/01/25
図や表の配置と箇条書きの文の配置を大雑把に決める.大まかに発表台本をイメージする.タイトルと端的表現文も直しながら.

発表スライド完成 2020/01/28
絵コンテで詰めきれていない細かいところを埋めていく.スライド全体のバランスを考えながら文字を足すor削る.

発表3日前 2020/02/02
台本の前半を作る.接続詞とかスライドとスライドの間や文章と文章の間のつなぎを考える.スライドにある単語や文章は,台本中で赤線を引いておく.→ 赤線が引かれていないところが覚えるべきところ.

発表2日前 2020/02/03
台本の後半を作る.後半は実験結果の内容がメインなので台本作成が楽.台本を横に置きつつ,スライドを見ながらの練習2回.スライドとスライドの間のつなぎの文句とかを覚える.

発表1日前 2020/02/04
移動中の行きと帰りに1回づつ頭の中で発表練習.スライドの内容を脳内再生しながら話す.覚えきれてない文章はあのスライドのあそこに書いてあるのを見ながらなら話せる,などを確認.気になった箇所は終わったあとで確認(練習中は一旦始めたら途中で止めない).ホテルの部屋で立って話す練習2回.発音が不安な発表に関係する単語を思いつくだけ調べる.昔ICCPという学会で発表したときフレネルレンズと言われているのに全く聞き取れなかった.終わって10日くらいしてからやっとわかった.

発表当日 2020/02/05
朝起きて1回練習.会場についてから外のベンチで1回練習.発音が不安なところは追加で練習.自分のセッションは他の人の発表を受けての質問があるかもしれないので予習もしてしっかり聞く.(先のフレネルレンズの話はICCPでの自分の発表の1つ前の発表で話されていた内容だったが,当時現場にいた自分は全然聞き取れていなくて理解できていなかった.)