オッサンはDesktopが好き

自作PCや機械学習、自転車のことを脈絡無く書きます

iPhone Lidarでサドル高を測ってみた

 こんちには.changです.

 iPhoneライダーを使って自転車のサドル高を測ってみました. 精度は必ずしも十分と言えませんが,ポジションを3D計測するという新分野の可能性を感じました.

1. iPhone Lidar

 AppleがハイエンドのiPhoneおよびiPadに採用している3Dセンサです. iPhone 12およびiPad Pro 2020年モデルから導入されました. 3D分野に一応居る為,気にしています. iPhoneを新調した*1のも,Macを買った*2のも半ばこの為だったりします.

 ところがというか,,,3Dデータを活用したいシーンが日常には無いです. iPhoneを新調してから半年近く経つのですが,殆ど使っていません😓 流石に勿体無いと思って,今回無理やり使ってみることにしました.

2. サドル高

 自転車のサドル高には,ライダーの体格に応じた適正値があります. また,多くの自転車乗りの方には,普段から乗り慣れている高さがあると思います. 不意にサドル高が変わって元に戻せなくなったりすると,違和感を感じるものです.

 ロードバイクの場合,出先でサドル高を変えることは殆どないと思います. ライドに出る前に,家で,メジャー等を使って合わせるだけで事足ります. マウンテンバイクの場合は少し違くて,険しい降りを走る時や,バニーホップ等のBMX系トリックを練習するときにサドルを下げます. ドロッパーシートポストがあれば良いのですが,生憎,僕は持っていません. また,メモリの付いていないシートポストで,六角レンチで高さ調整をしています. (下りが終わって)サドル高を元に戻したつもりが,高すぎたり低すぎたりしてイライラすることが頻繁にあります.

 ライドにメジャーは持って行きませんが,スマフォは必ず携帯します. 今回,そのスマフォを使ってサドル高を測れないか試してみようと思います.

※ シートポストに印をつけておけばいいじゃん,というツッコミは置いておきます🤫

3. 実験方法

(1) 使用アプリ: 3D Scanner App

f:id:changlikesdesktop:20220223104641j:plain:w200
3D Scanner App

 未だ種類が少ないLidarアプリの中で,一番真面目に作っている印象を受けるアプリです. 無償にも関わらず,使いきれない程の機能があります.

(2) 正解値

 基準となる正確値は,普段から使用しているメジャーで取得しました. チバサイクルさんのブログで紹介されていた定義*3に従って,サドル上面からBBまでを測りました. 59 cmでした.

f:id:changlikesdesktop:20220223111310p:plain:w400
メジャーを用いたサドル高計測

(3) 計測手順

 屋外で計測するのが最終目標ですが,計測を安定させる為に今回は屋内で計測しました. スタンドに固定した状態で10回計測し,その都度サドル高を算出しました.

 サドル高の算出には,3D Scanner AppのTape Measureを使いました. ↓な感じで計測の開始点(サドル上面)と終了点(BB回転中心)を指でタップし,距離計測しました.

f:id:changlikesdesktop:20220223110403j:plain:w400
3D Scanner AppのTake Measureを用いたサドル高計測.左: Tape Measureを選択,中: サドル上面をタップ,右: BB回転中心をタップ

4. 結果と考察

(1) 計測結果

 10回分の計測結果です. 数値は59〜63 cmの範囲でばらつきました. 平均値は61.1 cmでした.

f:id:changlikesdesktop:20220223113751p:plain:w400
サドル高の計測結果

(2) 測定精度

 計測値のばらつきが最大で40 mmというのは,正直大きいです. サドル高へのこだわりは人それぞれかと思いますが,僕の場合にはサドル高が10 mm変わったら気持ちが悪いです. 膝関節が大きく伸びるポジションを取っている所為もありますが,下手したらペダリング出来なくなります. 残念ながら,iPhoneライダーによるサドル高計測は要求精度を満たさないという結果になります.

(3) 点群のばらつき

 計測値のばらつきにはいくつかの原因が考えられます. もっとも大きいと考えられるのが,取得する点群のばらつきです.

 測っていて分りましたが,スマフォの走査の仕方によってかなり結果が変わります. 例えば,下図左の様にサドルやシートチューブにフォーカスしてスキャンするよりも,下図右の用に少し遠目から,バイク全体を撮像した方が精度が良くなります. iPhone Lidarは,カメラ画像の変化からセンサの相対位置変化を算出していると思われます. この為,カメラに多少複雑な構造物や背景が写っていた方が,高精度になると考えられます. 意外に思われるかも知れませんが,バイクと関係のない背景(それも白壁とかではなく複雑な)を映り込ませるのも良いと思います. この辺の癖を理解し,再現性のある測り方を身につける必要がある訳ですが,,,少しナイーブ過ぎるかもですね💦

f:id:changlikesdesktop:20220223122549p:plain:w400
左: サドルとシートチューブに寄った計測,右: 自転車全体を捉え,ついでに背景も写り込んだ計測.右の方が画像の変化が豊富になり,高精度に計測できます

(4) 正確なサドル高って?

 今回のトライで認識させられたことがあります. 今までやってきたメジャーによる計測が決して十分では無いという事です.

 先に紹介したチバサイクルさんの記事には,「サドル高さは自転車のBB(ボトムブラケット)中心部分からシートチューブに沿って、サドル座面中央部までの距離を指す」とあります. 「シートチューブに沿って」というのは,鉛直面に沿ってという意味かと思います. つまり下図に描いた様に,サドル側の計測ポイントは実際のサドル面上には無く,サドル上から横にはみ出した空間上に在るのです. メジャーでこれを正確に捉える事は可能なのでしょうか❓

f:id:changlikesdesktop:20220223124553p:plain:w200
サドル高の3次元的定義.サドルの計測ポイントは空間上?

 この事は.iPhoneライダーの計測結果がメジャーよりも全体的に大きめになった結果とも関係しています. 3D Scanner Appでは点が存在しない空間上のポイントからTapeMeasure出来ませんでした. このため,算出されたサドル高はクランクの表面からサドル上面までの直線距離になっています. iPhoneライダーとメジャーでは,測定対象がそもそも異なるのです.

※ ちなみに上図の橙色のサドル高(メジャー)と白色のサドル高(iPhone Lidar)の差は,理論上0.5 cm程度したありません. 今回の検証でiPhone Lidarから得られたサドル高は,やはり全体的に大きめだったと言えます.

 今まで,メジャーで何を測っていたんだ?と疑問になってしまいました.

5. 追加調査: TrueDepth

 3D Scanner AppにはTrueDepthという機能があります. おまけで遊んでみました.

 通常のスキャンでは下図左のようにスマフォの画面を見ながら測ります. 一方TrueDepthでは,自撮り側のカメラを使って下図右の様に目測で測ります. 当然測るのが難しく,撮り直しが何度か発生しました. しかし,自撮りカメラ(=近い焦点で分解能が高い)を使うので,1 m以下の狭いエリアの計測では再現性が上がると感じました. 引き続き調べていこうと思います.

f:id:changlikesdesktop:20220223131458p:plain:w300
左: 通常スキャン,右: TrueDepth.TrueDepathは計測画面が見えないので難しいが,精度は上がる気がします

f:id:changlikesdesktop:20220223131008p:plain:w400
TrueDepthを使ったサドル高の計測.こっちの方が再現性があるかも???

6. むすび

 iPhone Lidarを使うかは兎も角,ポジションを3次元的に管理する重要性を感じました. 色々とヒントになった気がしています😀😀😀

練習中にチームメートが落車してしまいました

 タイトルの通り,チーム練習中に落車が起きてしまいました. 大事には至らなかったですし,既に,スタッフさんが走り方の改善点をまとめて下さいました. 敢えて僕が掘り下げる事は無いと思います. ですのであくまで自分用のメモとして,考えた事を記録します.

落車の概要

 事故が起きたのは,市街地ではあるものの,車や歩行者が少ないエリアでした. ローテションもしていました.

 右前方の脇道から,自分達の前に出てくる車がいました. 僕は2番手を走っていて,車が見えていました. 1番手を走っていたチームメートの声掛け(「ブレーキ!」)を受けて減速しました. 続いて3番手が減速した後,4番手が3番目のリアホイールにハスって落車しました.

 出てきた車に対して,僕自身は大きな危険を感じていませんでした. 無理な運転で曲がって来た訳では無かったと思います. 実際,1番手から3番手までは余裕で減速出来ていました.

 一つ気になっているのが,チームメートが右折車だったと言っていたのに対して,僕は左折車だったと認識している事です. 事実は分かりません. 問題なのは,余裕を持って走っているつもりでも車のウィンカーまでは見えていなかったと言うことです.

 落車したチームメートからは,車が見えていなかったのかも知れません. 「気付いたら転んでいた」と言っていました. 車が前の走者の死角に入ったのかも知れません. また,隊列の後方で追い抜きがあった様で,そちらに気を取られていた可能性もあります.

 落車したチームメートは,安全に対する配慮が人一倍高いライダーです. チームの中では最も若いですが,いつも冷静で,「2段階で曲がりましょう」と声を掛けてくれます. 彼が転んだのが信じられません. 翻れば,この規模の落車はいつでも起こり得ていたという事です.

スピード

 所属先はガチのレーシングチームではありません. ただ,僕を含めてイベントに参加するメンバーがいるので,ライドをすればレースを意識したトレーニングになります. スピードを出さないという訳にはいきません.

 普段から,スピードを出すエリアと出さないエリアを分けて走っています. 市街地ではローテーションしませんし,スピードも控えています. 今回もそれが出来ていたつもりですが,結果的には不十分だったのかも知れません.

 直近の半年程で感じていた事ですが,チームのレベルがどんどん上がっています. コロナ禍でグループライドを控えていた時期もありましたが,今はほぼ毎週集まって練習しています. 日毎に平均速度が速くなり,余裕が減っている印象を持ちます. 僕を含めて,何人かのメンバーがディスク車に乗り換えた事も,スピードが上がった要因の一つかも知れません.

 チームの雰囲気も,以前とは少し変わったかも知れません. コロナ禍になる前は,当時のスタッフさん(元プロ選手)にメンバーがひたすら食らいついていく感じでした. スタッフさんに守られていたと言えます. 今は一寸違くて,現在のスタッフさん(元プロ選手)を含めて,メンバーの実力が高レベルで拮抗しています. なので,走っていて最高に楽しいです. 一方で,安全に配慮する余裕が少なくなっている事も事実なのでしょう. 自分達の力でスピードが出せるという事は,自分達を守る技量も自分達に求められるという事です.

ハンドサイン & 声掛け

 グループライドの基礎として,多くのYouTube動画でハンドサインが紹介されています. 勿論正しいです. ただ,ローテーションをしてスピードが上がっていると,ハンドサインをする余裕が無い場合があります. 片手をハンドル(=ブレーキ)から離すことが,むしろ危険になったりもします. また,ハンドサインは直後のライダーにしか見えないので,後ろまで波及するのに時間が掛かります. 実際,レース中の減速時にはハンドサインは出さず,「ブレーキ!」と声掛けをするのが一般的です. ハンドサインを出すか声掛けをするかを迷う位だったら,声掛けを習慣化する方が良いと思っています.

 今回も声掛け出来ていたのですが,もしかしたら隊列の後方には聞こえなかったり,時間的余裕が無かったのかも知れないです. 僕自身も,自分がブレーキを掛けることを優先して声を出すタイミングが遅れる経験があります. 危険を察知した瞬間に大きな声を出す習慣を身に付けていこうと思います.

ディスクブレーキ

 プロの集団と同様,チーム内にリム車とディスク車が混在している状況にあります. 僕自身はリム者とディスク車を両方持っています. たまにリム車でチーム練習に参加すると,確かに怖さを感じます. ただ,それは一時的にディスク車からリム車に乗り換えるているからだと考えます. もし,普段からリム車に乗っていて,それがディスク車よりも危ないというなら,どうにもならないです. チームには学生さんもいる訳で,誰しもがニューモデルに乗り換えられる事は出来ないです.

 事実としては,転んだチームメートはリム車に乗っていました. 車載動画を見ると,リム車に乗っている別のチームメートがブレーキを掛けた僕のバイクに突っ込みそうになるシーンもありました. 自分達が思っている以上に,リム車とディスク車のブレーキ応答には差があるのかも知れません.

 残念ながら,これは慣れるしか無いのでしょう. プロのレースでも,リム車の使用を禁止することはしないでしょう. メーカーが新モデルを出すのを防ぐ事も不可能です. 競技を長くやっていれば,機材が変化していくのは当たり前です. 難しいのは,新しい機材が古い機材よりも絶対的に優れている筈は無い事です. ディスク車が一長一短だから,使用しないプロチームが出る訳で... アマチュアとは言え,こうした複雑なシーンへの対応を強いられてしまうのが実際です.

ルート

 改めてですが,市街地は危険だと思いました. 落車が起きたのは,踏む区間を終えた後の謂わば移動区間ですが,それでも避けるべきでしょう. 車載動画でも,歩行者や障害物との距離が小さ過ぎるシーンがありました. 路面凍結が怖くて山を避けた事情もあって難しいところですが,,,郊外で安全に走れるルートを再度探そうと思います.

補給

 コロナ禍になって,練習中にカフェやコンビニに入るのを控えています. 今回も,自販機で休憩しました. 結果,トレーニングの後半で糖分が不足している傾向があると感じます. 補給食を携帯して,休憩時は勿論,走行中や信号待ち時にも(安全に配慮しながら)摂取するべきだと思います. ダイエットが必要なメンバーはいません. 採り過ぎて困ることは無い筈です.

車載カメラ

 カメラが趣味のチームメートが,毎回の練習を車載カメラに収めてくれます. 今回,その方に無理を言って,撮れていた動画を全て見せて貰いました.

 落車の瞬間はバッテリー切れで映っていませんでしたが,前後2台のカメラで2時間ずつの映像は貴重な情報源でした. ドライビングレコーダを載せる乗用車も当たり前になっています. 自身でも購入を検討しようと思いました.

むすび

 前半にも書いた様に,この規模の事故はいつ起きても不思議では無いと思います. 残念ながらと言うか,自分達が虜になったスポーツはそういうものです. 個人の責任としてリスクを受け入れる必要があります. その上で,今回は運が悪かったと片付けずに,考え続ける事が重要だと思います.

 この先,自身が落車に遭う事もあるでしょう. 機材のメンテナンスと自身の体調管理を,今まで以上に徹底しようと思いました.

 転んだチームメートが,昨日ストラバにログを上げてくれて安堵しています. このチームで,これからも楽しく走って行きたいです.

Super Cycle Enduro in 下総,チーム1.5h: 優勝

 こんちには.changです.

 Super Cycle Enduro in 下総の1.5 hにチーム参戦しました. 結果は優勝! 自身にとっての初勝利になりました.

準備

 オフシーズン中なので,レースを意識したトレーニングはしていません. 土曜日はマウンテンバイクに乗っていますし,ロードの距離も短くしています.

 ロードの距離を短くしているのは,高強度を重視しているからです. 去年末に走った袖ヶ浦では,高強度態勢の低さで惨敗しました*1. 一昔前の冬場と言えば乗り込み(中強度,長時間)だったので,この時期に距離を減らすのは怖いというか,勇気が要ります. でも,昨今はオフシーズン=シクロクロス(高強度,短時間)が当たり前です. 1.5 hを2人というのは自分にとっては短いですが,シクロクロスの代わりだと考えれば丁度良いと思い,出場を決めました.

 正直,このクラスではそこそこ戦える自信があります. チーム編成は違いますが,前回も3位に入ってます*2. タッグを組むチームメートも調子が上がっていたので,作戦を間違えなければ勝てると思っていました. ところがと言うか,,,当日の移動中の車の中でチームメートから「勝つつもりでしょ?プレッシャーだな」と言われて少し恥ずかしくなりました. 一人で盛り上がってスミマセン...

レース展開

 チームメートはスプリンターで,僕は耐久タイプである事から,特に相談するでも無く1走目を貰いました.

 チーム戦の順位は,ピットイン後の集団復帰の仕方で決まります. 単独でレースインする2走目がラップロス無く集団復帰する為には,1走目が集団から抜け出る必要があります. 下総のピットエリアは草むらで,交代に時間が掛かります. 集団から1周(約2分)差をつけて交代するのが理想だと思っていました.

 更に今回は,ターゲットとなる選手(チーム)をマークすることも意識しました. 自分達の順位が全く分からずに走った前回の反省からです. スタートリストで,ソロでの優勝経験者が含まれるチームがいる事を知り,間違いなくここがライバルだと思いました. 欲張って逃げを狙うよりも,この選手から後れを取らない事を優先するつもりでした.

 で,いざスタートしてみるとですね,,,ターゲットを全く見つけられません(><). このイベントのゼッケンは凄く見難いんです. おまけに,(ターゲットを)YouTubeでチェックしたときとはジャージもバイクも違っていたみたいです.

 仕方が無いので普通にレースをするのですが,全体的にまったりな展開で,集団のペースが上がりません. 前回もそうだったんですが,人数の多いチームが蓋をするんですね. ポチポチとはアタックする選手がいたので,協調して逃げようと試みましたが,上手く行きません. 抜け出せないなら,せめてペースを上げて集団の人数を減らそうと思ったんですが,複数人でコントールするチームに対して1人で戦うのはキツかったですね. 結局,何もできずに1h近く経ってしまい, 交代することにしました.

 交代後も集団のペースは上がらなかった様です. 集団を待つ(=1ラップ捨てる)という判断をしたのですが,なかなか追いついて来ません. 結局,チームメートが集団に合流したのはラスト10分になってからでした.

 あっという間にゴールスプリントでした. ゴール前の位置取りはかなりシビアだった様です. 当たり前ですが,ソロ勢は殺気立ちますよね. 以前に川崎を走ったとき*3に「ソロ勢のレースをチーム勢は邪魔するな」と筧五郎さんに言われた経験もあって,遠慮してしまったと言っていました. この辺は難しいですよね...

 チームメートも僕も消化不良な感じではあったのですが,リザルトを見たら「勝ったみたい」と.

分析

f:id:changlikesdesktop:20220124205307p:plain:w400
走行ログ

 平均速度が36.7 kmなので,遅いですね. NP 220Wだからパワーはまあまあかなぁ... マウンテンバイクにはパワーメーターが付いてないので検証出来ませんが,シクロクロスってどの位の出力になるのでしょう???

 チームメートも同じ事を言ってました. チーム練の方がはるかに速いしキツいですwww

レース中の選手観察

 今回は周りの選手を観察することを意識しました. レース中に強いと思った選手が2人いて,交代時に「〇番と×番が強い」とチームメートに伝えていました. その御二方がソロの2位と3位に入っていたのですが,,,勝った選手をマーク出来ていなかったのです. 積極的な走りをしてはいましたが,ハマっている印象を受けなかったんですね. 表彰式をみたら,とても若くて小柄な方でした. 高校生とかでしょうか? 身体が未だ出来上がってないから,オッサンの目には強く見えなかったのかもですね. 観察眼については反省ですが,蛹のような才能を目の当たりにするのは嬉しいですね.

むすび

 草レースではありますが,あっけなく勝てたという印象です. プロ選手がインタビューで「勝つときはあっさり」みたいな事を言うのを聞きますが,同じ様な感覚なのでしょうか. 僕とプロ選手と比較するのはあまりに乱暴ですが,勝負の場に立つベースが出来てきたのかも知れません.

 最初で最後の勝利かもです. 勝利の実感は,時とともに大きくなる様な気がしています.

 今季のレーススケジュールを検討中です. シーズン前半の目標は富士チャレ200 kmになりそうです. 下総の最終戦(3/19)をその準備で走ろうと思っています.

2021年を振り返って

 早いもので2021年も終わります. 取り留めのない雑記になりそうですが,今年を振り返ってみようと思います.

1. 研究

(1) 自転車レースAI(強化学習)

 年の初めから,自転車ロードレースっぽいことを強化学習にやらせるトライをしました*1*2*3*4. 試みとしては面白かったと思いますし,予想していた以上の成果が出ました. スリップストリームの習得から初めて,最終的にはスプリントトレインっぽい事まで学習させました. もっと複雑な学習に挑戦しても良かったのですが,個人でやっている研究ということもあり,美味しいところだけやってそのままにしています. またモチベーションが沸けば,続きを作るかも知れません.

 ”美味しいところだけ”という言い方をしました. AIレースを実際の(=人間が行う)レースに近づけようとすると,おそらく,スプリント勝負をするAI,逃げを打つAI,,,みたいのをそれぞれ別ネットワークでトレーニングして,それらを選択して発動させる監督AIを更に別ネットワークで作ることになると予想します. 一つのAI(=ニューラル・ネットワーク)に幾つもの戦略を学習させたり,戦略を選択させることは難しいからです. 個々のAIにはシンプルな事をやらせてそれらの組み合わせで複雑さを出す,というのが僕が辿り付いたAI開発のポイントです. 専門性の高い素材を組み合わせて成果を出すというのは,部位ごとに機能を分担させている人間の脳や,分業制が基本の社会構造と近しいと言えます.

 ここで問題になるのが,実現させたい複雑さがシーンごとに異なることです. 今回は自転車レースでした. 逃げ,スプリントといった既知の戦略が発生しやすいようなお膳立て(=プログラミング)を重ね,AIレースを実際に近づけました. これに価値を見出して下さる方もいらっしゃるかも知れませんが,僕自身はやる程に魅力を感じなくなりました. 特定の目的に特化した作り込みは,別の目的では使えないことが多いからです. Alpha Go Zeroは素晴らしい技術ですが,囲碁という特定の目的に特化して作り込まれた,所謂,弱いAIです. 弱いAI(=或る目的に特化したAI)を追求することは強いAI(=汎用的なAI)の実現には結びつかないのです.

 自転車レースAIを作った目的は,人間のレースを模擬することではありませんでした. 予備知識を持たない強化学習が行うレースから,現存しない未知の戦略を創発出来るかを試したかったのです. 未知の戦略を実際に見つけるところまでは行きませんでしたが,その片鱗は感じました. 同時に,リアルに近づけようとAIを作り込んでしまうと,創発の可能性が低くなる事も理解しました.

 後述する学会発表でも言いましたが,AIの機能を追求すると,AIが意中の答えを出す為のお膳立てばかりをすることになります. 結果,汎用性が下がってしまいます. 企業的な目線で費用対効果を期待できるケースは決して多くありません.

 高々32×12 pixelの画像空間内でのレースなんておもちゃだ,と感じる方は多いと思います. でも,そのおもちゃで遊んでみるのがAI研究の意義だと,僕は考えています.

(2) AI事業の未来

 2021年は,職場でもAI研究をメインでやりました. その所為もあり,これって金になるのか?と今まで以上に考えるようになりました.

 先日の記事*5でも書きましたが,ディープ・ラーニングは差別化が難しく,尖っていくのが難しい素材です. また,尖っていこうとしてプログラムを作り込んでしまうと,上述した様に汎用性が下がってしまいます. それでも長期的な事業性があるようなテーマ,例えば,監視カメラ等であれば価値があります. ただ残念ながら,画像系は飽和しかかっていると感じます.

 画像系が頭打ちという考えから,今年はGoogleのTensorflow 3Dにかなりの時間を使いました. 職場でやっているので詳しくは書けませんが,Googleの作り込みが良い感じで甘くて,尖っていける余地があります. でも,Googleが本格的に3Dに投資して来ると,画像と同様にプラットフォーム化されてしまう可能性があります. その点,git hubのソースが長いこと更新されない事から,Googleの入れ込み具合はそこまでではないのかも知れません. iPhone Lidarも思ったほどの盛り上がりを見せません. 程よくニッチな状態がこのまま保たれると有難いと思っています.

 AI事業という広い捉え方をすると,ディープ・ラーニングとか強化学習といった流行りネタは飛び道具にしかなりません. 扱えるデータ構造が限られるからです. また,データ活用の仕方はシーンによって異なりますし,日々ダイナミックに変化します. その意味で,古典的な多変量解析をPythonを使って日々更新を重ねながら運用するというのが,(地味で面白みは無いですが)到達点でしょう. AIの内製化が進んでいるという話を聞きます. AIビジネスの向かう先はB to Cの製品開発では無く,B to Bのコンサルティングになると思います.

(3) 学会発表

 今年,久しぶり(多分,10年弱ぶり)に学会発表をしました. 発表することを許可してくれた職場に感謝しています. 5年前だったら,”遊んでんじゃねぇ”と一蹴されていたかも知れないです. 小さな会社では特にかと思いますが,研究者を馬鹿にするような風習はどうしてもあります. めげずに情報発信を続けた成果だと自分を褒めたいです. 理解を示してくれた上司にも感謝しています.

 先刻,去年の振り返りを読んでいたら,自身が学会を批判するような事を書いた事を思い出しました. 学会ではなくSNSで発表すれば良いじゃん?と... その通りなんですが,発表して得た気付きもありました.

 海外の学会で査読付き論文を発表しようとすると,投稿から掲載までに半年から1年位掛かります. この時間が無駄だと思うのは,今も変わりません. 執筆作業にかかる時間も膨大です. 慣れない英語で,学会毎の癖に合わせて書いて,ネイティブ・チェックも受けて,,, 学生時代には書くだけに1ヵ月以上を掛けていたと思います. 工数制の職場でやろうとは思えないです.

 これに対して,学会発表は良い感じで緩いです. 年に2回大会がある大きな学会で発表したので,講演申し込みから発表までが3ヵ月でした. 程良く時短です. また,一応お金を払って発表する側なので,何を言おうと自由です. 学術界に属している訳でも無いので,失うものもありません. そうした気楽さから,メーカー所属ならではの生々しさを出してやろうと思って,この記事内にも在る”AIって意味ある?”感を含んだ発表をしました. オンラインだったので聴衆の反応が判り難かったのですが,一定の評価はあったと思っています. 研究出身のサラリーマンだからこそ出来る事・すべき事を,ここに見出せるかも知れません. 継続していきたいと思っています.

 学会とは少し違うんですが,特許取得に取り組む機会もありました. これも職場の事なので詳しく書きませんが,国際特許取得に向けて出願中です. 今はどうか知りませんが,僕が大学にいた当時,特許は査読論文と同等の実績として評価されました. 今もそうなら,論文よりも特許の方が美味しいと思いました. なにせ,弁理士さんが全ての書類を書いてくれます. 特許庁が一元審査するので,審査官毎の癖は一定に在るそうですが,学会よりも評価基準が整っていると感じます. 研究者ならば一度は経験のある”理不尽なリジェクト”が起こり難いでしょう. 勿論お金はかかります. でも,月単位の工数を費やすことを考えれば決して高くない額です. 資金が豊富な研究者さんは,どんどん弁理士さんを頼るべきだと思います.

2. 自転車

(1) レース

 シーズン前半の富士チャレ*6と富士ヒル*7は,完璧では無いものの満足のいく結果を出せました. 特に,富士チャレの先頭集団に残れたのは大きな収穫でした. もっとレースに出て,もっとレースを楽しみたいと思いました.

 一方で,シーズンの後半は少し苦戦しました. チームで走ったしもふさ*8では表彰台に上がれましたが,ソロで出場した袖ヶ浦160 kmの2戦*9*10は共に序盤で千切れました.

 原因は色々在ったと思っています. 100 km(富士チャレ)と160 km(袖ヶ浦)の難易度の違いは勿論ありますが,それ以上にコンディショニングの違いがありました. 言い訳になりますが,先ずはコロナですね. 乗鞍が駄目(中止)だなってのが早い段階から解って,目標を失ってしまいました. 伊豆一に目標を切り替えてフィットネスは維持したのですが,先人たちがおっしゃっている通りでロングライドだけではレースで通用しません. 短時間・高強度の問題は勿論ですが,ペダリングやフォームにも変化が生じます.

 袖ヶ浦が終わってから気付いた事ですが,ロングライドばかりだと空力を意識しなくなる為か,以前よりも屈みが小さくなっていました. これに派生して腕が突っ張り気味になり,上半身に力みが生じた結果,腰痛を起こしていました. 大きく屈んだ方が上半身が力みそうですが,僕の場合は不思議と逆です. 股関節の屈曲を大きくした方が,関節抵抗と腹圧を利用できるからだと思います.

 また,これも最近解って来ましたが,クリート位置を変えた事で右脚に大きな負荷が掛かっていました. これも,レース中の痛みの原因になっていた様です. 間抜けな事この上ないなぁ...💦 でも,これを失敗と捉え,変化を恐れる様になっては駄目です. 異なるポジションとかフォームを試すのは良いことです. 大切なのは,変えた事で効果があったかをきちんと検証して,効果がないならば元に戻すことですよね.

 この辺,シーズンオフ中に修正して固めたいと思っています.

(2) トレーニン

 良くも悪くも,高強度の練習がポイントになること実感しました. 富士チャレは無酸素系のワークアウトで結果が出ました. 何故同じ事が袖ヶ浦で出来ないんだ?って思うんですが,人間なのでロボットの様には行きません. 如何に,キツくて嫌いな練習を楽しくやるか?ですね.

 最近ヒントになると思っているのが,Zwiftレースです. 袖ヶ浦の前には遊んでいる感ががあって敢えて封印していたのですが,効果が高い気がします. リアルレースの後でやってみると良く出来ている事を理解できます. 集団の後方で苦しむ感覚とか,引き終えた後で集団に付く時の苦しさとか... この辺も手伝って,ワークアウトよりは遥かに楽しいです. 今は全てBクラスで走ってますが,Aクラスを織り交ぜれば結構なトレーニング効果が出るかもですね.

(3) 機材

 去年新車を買った*11ので大きな買い物はしなかったんですが,Roval Rapide*12が納品されたのが2021年の初めでした. 色々な意味で,今年はこのホイールに遊んでもらった感じです.

 先ず,タイヤについて色々考える様になりました. そもそも,去年まで使っていたMavic Cosmic Proでは,選択肢が殆ど無かったんです. 当時はコンチネンタルのチューブレスレディが無かった(?)事もあり,Mavic以外で履けるのがCorsaしかありませんでした.

 クリンチャー仕様のRapideでは選択肢が格段に広がります. ヒルクライムで軽量のGillarを使ったり,着脱のし難さからGP5000を諦めたりと,,, お蔭でタイヤ交換の技術はかなり向上したと思います. で結局,Corsaに戻しましたwww

 レーシング機材をトレーニングで使う怖さも,Rapideが教えてくれました. 良い機材とか,新しい機材を使う事のワクワクさは自転車に乗るモチベーションの一つです. こいつは同時に怖さをくれますwww 練習用のホイールを相変わらず検討中です. 最近,SCOPEのミドルグレードが気になっています.

3. 2022年の目標

 結果的には,2021年に立てた目標は殆ど達成できませんでした. でも,失敗したとは思っていません. 1年間を通じて,ダイナミックに最善を尽くした結果だと思っています. 2022年もどうなるのか全く予想できません. それでも,目標があった方が楽しいので公言します.

 2022年は30代最後の年なので,やりたい事は沢山あります. 挙げすぎると重くなっちゃうので絞って:

4. 結び

 本年も大変お世話になりました.

Tensorflowのcheckpointをsambaで共有して,別PCから評価する

 Tensorflow 3Dが学習中の評価を別プロセスで行う仕組みになっていて,GPU消費を取り合わない様に別PCで評価したい. 良くあるシチュエーションでは無いが,sambaの使い方等で工夫が必要だったのでメモしておく.

1. ネットワーク設定

(1) 学習PCと評価PCをLANで繋ぐ

 学習用のパソコン(以後,学習PC)と評価用のパソコン(以後,評価PC)をLANケーブルで直接繋ぐ.ちなみに,今回使用しているパソコン2機はWifiでインタネットに接続しているため,LANポートは余っていた.

(2) 学習PCのIP設定

f:id:changlikesdesktop:20211226050020p:plain:w400
学習PCのLAN設定.DNSを使わないので,Gatewayは空欄

f:id:changlikesdesktop:20211226050119p:plain:w400
設定されたか確認.有線LANを再起動しないと設定が反映されない事がある

(3) 評価PCのIP設定

f:id:changlikesdesktop:20211226050401p:plain:w400
評価PCも同様に設定.

f:id:changlikesdesktop:20211226050630p:plain:w400
評価PCも同様に確認

2. ファイル共有

(1) sambaインストール

学習側PC,評価用のPCの双方にsambaをインストール

$ sudo apt install samba

(2) 学習側PC側に共有フォルダを設定

$ mkdir /home/***/samba_share
$ sudo chomd 777 /home/***/samba_share

エクスプローラーから上記のフォルダを右クリックして共有設定

f:id:changlikesdesktop:20211226051006p:plain:w400
フォルダの共有設定.検索するとsmb.confを編集するやり方が出てくるが,今回はUIを使ってみる

(3) tensorflowのログを共有フォルダに作成

 この部分はプログラムに依る.Tensorflow 3Dの場合,train.pyへの引数を編集する.

tf3d/semantic_segmentation/cad2point/srcipts/run_train_locally.sh

TRAIN_DIR="/home/***/samba_share/tf3d_experiment/${JOB_NAME}"

 学習を実行して,checkpointを作ってみる.

$ cd ***/tensorflow
$ source tf3d_env/bin/activate
$ bash tf3d/semantic_segmentation/cad2point/srcipts/run_train_locally.sh

(4) 評価PCから見られることを確認

f:id:changlikesdesktop:20211226052148p:plain:w400
評価PCから学習PCの共有フォルダにアクセス.Other Locations→smb://192.168.---.---/→Connect

f:id:changlikesdesktop:20211226052431p:plain:w400
パスワードとかがないガバガバ設定なので,そのままConnect

f:id:changlikesdesktop:20211226052621p:plain:w400
train.pyが作ったフォルダを見られるようになった

Note:
この時点で評価PCから共有フォルダ直下でのフォルダ作成,ファイル編集が可能だが,train.pyが作ったtf3d_experimentの中では出来ない. smb.confの編集など色々試したが,結局,個々のフォルダやファイルの権限を手動で書き換えるしか術が見つからなかった.

3. 学習PCから評価PCにチェックポイントをコピー

評価PCの共有フォルダ内で右クリック→Open in Terminalでパスを取得

f:id:changlikesdesktop:20211226053150p:plain:w400
長ったらしいパスを取得できる.もっとスマートな方法があるかも

checkpointのコピー先を評価PC内に作成

$ mkdir /home/***/checkpoints
$ mkdir /home/***/checkpoints/model

共有フォルダ内のcheckpointが更新されたら,評価PCにコピーするプログラムを作成.

copy_checkpoints.py

import os
import shutil

from time import sleep

if __name__ == "__main__":
    directory = "/run/user/1000/gvfs/smb-share:server=192.168.***.***,share=samba_share/tf3d_experiment/seg_ABC_semantic_019/model"
    destination = "/home/***/checkpoints/model"
    counter = 0
    while True:
        name0 = directory + "/ckpt-%d.data-00000-of-00001"%counter
        name1 = directory + "/ckpt-%d.index"%counter
        name0_ = destination + "/ckpt-%d.data-00000-of-00001"%counter
        name1_ = destination + "/ckpt-%d.index"%counter
        if os.path.exists(name0) and os.path.exists(name1):
            print("copying ckpt-%d.data-00000-of-00001 and ckpt-%d.data-00000-of-00001"%(counter, counter))
            shutil.copyfile(name0, name0_)
            shutil.copyfile(name1, name1_)
            shutil.copyfile(directory + "/checkpoint", destination + "/checkpoint")
            counter += 1
            sleep(1)

Note:
os.listdir()を試したが,変なファイル名が取得されるタイミングがあって失敗. 作られる筈のファイル名をズバリ指定する & checkpoint(テキストファイル)を最後にコピーするのがポイント.

4. 学習 & 推論

 ここもプログラムによる.Tensorflow 3Dの場合,eval.pyへの引数を編集する.

tf3d/semantic/segmentation/srcipts/cad2point/run_eval_locally.sh

EVAL_DIR="/home/***/checkpoints"
CKPT_DIR="/home/***/checkpoints/model/"

評価PC内でコピープログラムを実行

python3 copy_checkpoints.py

評価PC内の別プロセス(=別Termianl)から評価を実行

$ cd ***/tensorflow
$ source tf3d_env/bin/activate
$ bash tf3d/semantic_segmentation/cad2point/srcipts/run_eval_locally.sh

評価PC内の更に別のプロセスからTensorboardを実行

$ cd /home/***/checkpoints
$ tensorboard --logdir eval_val

学習PCで学習開始

$ cd ***/tensorflow
$ source tf3d_env/bin/activate
$ bash tf3d/semantic_segmentation/cad2point/srcipts/run_train_locally.sh

以上.

ウィンターサイクルマラソン in そでがうら 4h: 34位

 こんにちは.changです.

 ウィンターサイクル in そでがうらの4時間エンデューロを走りました. 結果は34位. 先頭集団に1hも残れず,またも悔しい結果になりました.

f:id:changlikesdesktop:20211214052236j:plain:w400
帰路の大渋滞にて.逆光の富士が地下トンネルに入る前の癒しになりました

前日まで

 サイクルジャンボリー袖ヶ浦*1→下総クリテイルム*2からの連戦となりましたが,前の2戦で調子が上がっていないことが分かっていました. 直前の2週間で調子を上げる事は出来ないものの,出来るだけの準備をすることにしました.

f:id:changlikesdesktop:20211213193253j:plain:w400
レース2週間前.ここ1ヶ月の平日練(=ローラー)は殆どワークアウトでした

 重視したのは短時間高強度です. 今更ではありますが,短時間高強度は速攻性があります. 実際,300W(=約6倍)のペダリングに身体を慣らすと,250W(=約5倍)が楽になる感触がありました.

f:id:changlikesdesktop:20211213194015j:plain:w400
嫌いな事から逃げて来たことを痛感します...

f:id:changlikesdesktop:20211214043913j:plain:w400
短期間ながら下ハンの強化にも取り組みました.少しずつ感覚を掴めてきたかなぁ.思ったよりも頭を下げて良い感じです

当日

 今回はマトリックスの選手が一緒に走ってくれます. 恒例行事の安原監督の前向上を聞き,比較的リラックスしてスタートしました.

 初めの何周かはかなり落ち着いたペースでした. この間に集団の前方に上がれば良かったのですが,やはりと言うかコーナーでズルズルと下がってしまいます💦 強化した下ハンダンシングでリカバリーしながら付いて行きます.

 何周回目からか明確に覚えてませんが,序盤から右半身(腰から足裏にかけて)に痛みを感じ始めます. 実はこれ,シーズン後半でずっと抱えていた違和感でした. かれこれ10年以上ロードバイクに乗ってますが,初めての経験です. レースで腰が痛くなることはあっても*3,身体の片側だけが痛いとか,脚が痛いとかは無かったのです.

 痛みで集中力を欠いてしまったのでしょう. 1時間弱で千切れます. マトリクスの選手が引き始めてペースが上がったことは解っていました. 立て直そうとしたんですが,粘れませんでした.

 一度,周回で追いついてきた先頭集団に乗り直します. 体が痛くて,もったのは数周回だったと思います. この間,友人の元プロロードレーサーが,「コーナを曲がるとき,曲がるのと反対側に体重をかけて」と声を掛けてくれました. 自身が曲がっている姿を見る事は出来ないので,指摘してくれるのはとても有り難いです😭 レースの中で少しでも感覚を掴もうと思いましたが,早々に千切れてしまって練習できませんでした. 追走で色々試しましたが,,,どうなのかなぁ? 何となく,曲がるのと反対側の肩をすぼめると安定するイメージを持ちました. ただ,先頭集団の中で高速で曲がらないと,スキルアップ出来ているかが判りません. 同じ理由で,一人で走っていてもコーナーは上達しないんですよねぇ...🤔

 幾つかの追走集団に乗り降りしながら,走り切りました. 痛みに耐えてって,感じでしたね.

ロードバイク女子

 追走集団にいて思ったことですが,,,女性が強すぎですwww 集団の前方が女性ばっかり😅 自転車に興味を持ってくれる方が増えるのは良いことだと思うんですが,少し思うところあったので書きます. 反感買いそうだなぁ...

 先ず,男性陣が不甲斐無さすぎです. 先頭集団ではないからペースを上げるモチベーションは低いでしょう. 先頭交代に慣れていないのも解ります. にしても,,,もう少し頑張りませんか? 見かねた安原監督が引いてくれたりもしましたが,一人引きになりがちです. 「男性陣で回そう」と声を掛けたんですが,なかなか協調できませんでした. 「短く交代しよう」と同調してくれる方が一人いらっしゃったのですが,この時は僕の技術不足というか,意思疎通の問題で上手く回れませんでした. (その方と僕の)2人で回る覚悟があれば良かったんですが,僕としてはもう少し大人数で回りたかったんです. 引き終えて交代しようとすると,どうしても女性陣の後ろの位置になってしまいました😮‍💨

 女性ライダーに対しては称賛の一言なんですが,敢えて苦言を言うなら,2番手に張り付くと先頭交代を阻害しちゃうことを理解して欲しいです🙏 先頭に出て引こうとするとき,2番手以降から上がると脚を使います. 結果,引く人がいなくなって集団のペースが落ちてしまうのです. 引かなくても良いんです. 回る選手達の後ろに付く意識を持って下さると有難いです.

分析

 公式リザルトを見ると,64Lapで平均時速38.49 kmでした. これだけを見ると,前回のサイクルジャンボリーより速かったんですね. ちなみに,サイクルジャンボリーでは66Lap=約4.25h位でした. 自身の実績を鑑みても,決して遅くは無いと言えます.

 パワーも,,,こんなもんですね.

f:id:changlikesdesktop:20211214050134p:plain:w400
今回のパワー分析.NPが200W超えているので悪く無いです

f:id:changlikesdesktop:20211214050241p:plain:w400
3週間前のサイクルジャンボリーの分析結果.今回とほぼ一緒です

 調子が悪いと言い訳のように書きましたが,これが現状の実力なのでしょう🙄 ちなみに,先頭で走りきれた春の富士チャレ100 kmと比べても遜色無いと言うか,距離が長いにも関わらず平均パワーはむしろ出ています. 富士チャレはコーナーが簡単 & 登りがあるので,自分に適性があります. ここで走れたからと言って,喜んでいてはダメですね.

f:id:changlikesdesktop:20211214050345p:plain:w400
春に走った富士チャレの分析結果.何故か表示がバグる...

 ちなみに,優勝者(今回と前回で同じ方,というかいつもの方)のリザルトも前回のサイクルジャンボリーよりもかなり速かったです. 前回がほぼ40 km/hぴったりだったのに対して,今回は42.92 kmでした. マトリックスの選手の引きが凄かったのと,ホームストレートが追い風ぎみだったことが影響していると思います. こういうスピードレースで粘れるようになりたいですね🔥

腰痛

 無視できないレベルになってきました. 単に腰が痛いだけでは無くて,必ず右半身だけが痛くなります. 手足にしびれがあるとかではないので,神経系では無いと思います. 身体のバランスが崩れているのかも知れません.

 レース翌日のチーム練で気付いたのですが,半年程前にクリートを新調してからおかしくなったのかもです. 確認したら,右足だけハの字が大きくなっていました. これで治ったら笑っちゃうんですが,,, 違和感が続くようなら,冬の間に医者にかかって改善しようと思います.

まとめ & シーズンを終えて

 間違いなく,これでシーズン終了です😀

 正直な感想として,疲れを感じています. 年齢の所為では無いと思います. 年間総距離は現時点で去年を大幅に更新し,15,000 kmを超えています. 少し休息を取りつつ,オフロードでリフレッシュしようと思います. 来季の目標設定とオフのトレーニング計画は,気持ちを改めてからですね.

 

「AIはやってみないとわからない」はいつまで通用するのか?

 こんにちは.changです.

 IT企業の方が,「AIはやってみないとわからない」という旨の発言をされるのをしばしば耳にします. 今回はこれについて考察します. また少し捻くれた話になります...

1. やってみないとわからない

 先ず,AIとは関係の無い一般論を話します. 完全リピートでも無ければ,常に仕事は「やってみないとわからない」筈です. ただ,「やってみないとわからない」という発言を実際に聞くことは少ないと思います.

 僕自身,「やってみないとわからない」という発言を控える様にしています. 経験上,やってみないとわからない=惜しくも言わされる言葉という感覚を持っています.

 前提条件として自身の身の上を紹介すると,僕は仕事でユーザーの前に立つ事は殆どありません. 大半は社内に引き籠っています. 会話をするとしたら,社内の人間になります.

 その上で話を続けると,「やってみないとわからない」と発言すると自身の仕事に対してマイナスになります. 「専門的で難しいんだね.君に全て任せるよ」と言われて丸投げになるからです. 仕事を任せられるというのは信頼の表れなので,プラスに働く部分もあります. 開発時はそれで良いでしょう. でも,リリースした後のメンテナンスが大変です. 「この件は難しくて開発者(=chang)しか分からない.(電話を)彼につなぎます」と営業にやられると,研究活動が止まってしまうのです. 愚痴っぽい話ですが,実際に起こっている事です.

 ユーザに対しては尚更「やってみないと分からない」とは言わないとでしょう. 「見積もりできません」=「お断りします.やる気がありません」と捉えられるかも知れません. また,勿論専門家としてユーザーに予備知識の無い仕事を受ける訳ですが,プロジェクトを進める中ではユーザーとの一体感や連帯感を常にキープするべきです.

 ネガティブな事ばかり言いましたが,専門性の高い難しい内容であっても解りやすく説明する能力が,研究者やエンジニアに求められる事は言うまでもありません.

2. やってみないとわからない仕事の対価とは?

 結果をコミット出来ない,或いは正確な見積もりができない仕事に対して,どうやって対価を得るのでしょう. 多くの場合,費やした工数ぶんを請求というやり方になる様です. 昨日の日経ビジネスの記事*1で,東大の松尾先生が「AIベンダーの工数請求方式が日本のAI事業を停滞させた」「組むべきはAIベンダーでは無くスタートアップだ」という旨の発言をされていました. 残念ながら,その通りなのでしょう.

 僕自身もそうですが,ある程度経験を積んだエンジニアであれば仕事に対してリスクを見ます. 「やってみないとわからない」という発言の背景には,「お客様の期待する程の成果は出ない」とか,「自身が担当する仕事の範囲ではお客様の理想を実現出来ない」という意図が見え隠れします. 逃げ道を作っている訳ですね.

 勿論,そうでは無い企業やエンジニアさんもいらっしゃるでしょう. 未知の分野においてプロジェクトがどの様に進むか予想できない,自分達の勉強を含めて進めさせて欲しい,という誠実な発言とも解釈できます. ただ,自分達の勉強を含むなら,ユーザーに対する見積もりは安くなって然りです. AIに対して本当に将来性を感じているならば,現状の利益が低くても,ビジネスの経験を積もうとするでしょう. AI事業の肝となるデータの蓄積にも貪欲な筈です. 上述した松尾先生の発言は,(擦れていない)スタートアップの方がその変のモチベーションが高いという意味かと考えます.

3. やってみないとわからないとどう向き合うか?

 AIに限らず,新しい事への取り組みは常にやってみないとわかりません. 当たり前です. にも関わらず,やってみないとわからないと言い難い雰囲気が在ります. 何故でしょう?

 何処の世界にも管理職という者がいます. その分野には必ずしも精通していなくて,どちらかと言うとお金の事を考えている人達です. 「投資をしたんだから結果を出して」というやり方です. これは至極当然なんですが,「結果だけを出して」という傾向が強すぎるのでしょう. 投資家みたいな感覚で,丸投げにしちゃうんですね. そういうやり方をするなら,投資の様にオプションを複数用意して,駄目だったら直ぐに捨てられる体制が必要だと思います. 日本の中小企業向けでは無いですね.

 AIの特徴に関して言うと,機械学習で頻繁に使用されるPythonスクリプト言語です. 出来合いの(ビルドされた)ソフトとは違って,ソースの改変が容易です. それを生かしてこその機械学習だと,僕は思います. データ解析と言うのは,常にダイナミックです. 日々内容が変わるデータに応じてアルゴリズムを修正したり,過去のデータを含めて再解析をする必要があります. 毎日が「やってみないとわからない」との向き合いだと言う事です. AIベンダーから納品されたソースをそのまま使い続けるだけでは,出来る事が極端に限られてしまうでしょう.

 データ解析が事業にどう根付いていくのか,イメージが掴めていません. 言える事は,「やってみないとわからない」に対して柔軟に,むしろそれを楽しめる様な個人と組織が必要になるという事です.

 ※ 余談ですが,機械学習については受託を受けて新規にソースを書くより,既存で運用出来なくなったソースをメンテナンスする方がビジネスとして面白い様な気がしています.

4. まとめ

結論:

  • 社内に対しての「やってみないとわからない」は,専門家の怠慢である
  • ユーザに対しての「やってみないとわからない」は,お断り見積もりか,失敗を想定した上での発言である

 また偉そうな上辺話を書いてしまいました. 書きたいソースも掛けてないし,Macも使えていません. 年末年始は頑張ろう...