オッサンはDesktopが好き

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

Garmin心拍計の電池交換には特殊工具が必要?

 こんにちは.changです. 今回は一言メモです.

 Garmin心拍計が反応しなくなったので電池交換をしようとしたところ,,, 何やら星型の特殊ネジが使われています!

見え難いですが,6頂点星形のネジが使われています

 昔は普通の精密ドライバ(プラス)で開けられたのに... 確かに,壊したり無くしたりして何度か買い直してるんです. どこかで変わったんですね💦

 どうしようか途方に暮れていたところ奇跡的に購入時の箱がみつかり,,, ちゃんと専用工具が入ってました!

電池交換の専用工具.これで幾ら取られているのだろう...

 無事に交換できました. 富士ヒル前に不安材料が増えなくて良かったです😀 レース中に心拍計を見ることは殆どありませんが,普段在るものが無いと嫌ですよね.

 いよいよ明後日が本番です. 平常心で臨みたいと思います.

Insta360 ONE RS TWINEDITIONをセットアップする

 こんにちは.changです. 前回*1に引き続き,アクションカメラのセットアップをしていきます. 公式の動画*2を見ながら進めます. 英語ですが,難しい事は言ってなさそうです.

MicroSDカードを挿れる

このカードが正常に動かなくて,今回は撮像に至りませんでした😓

アプリと連携

 予めスマフォにアプリをインストールし,WifiBluetoothをオンにしておきます. 案内に従ってfirmwareもアップデートしました. WifiSSIDの設定をしなくても繋がります😮

firmwareをアップデート.2回更新がかかりました

ユーザー登録

 続けてユーザー情報の登録を求められたので,済ませておきます. 規約を詳しく読んでませんが,おそらく,登録を起点に補償が発生するのかと.

ユーザー登録画面.生年月日を登録すると補償が延びる様です

撮ってみる

 カメラ画面での操作は細かくてオッサンには大変ですが,撮像等の基本操作はWifi接続でスマホから操作できるようです.

スマホからの操作で撮像します

 ここで,MicroSDに異常があると言われてしまいました. 昔のスマホで使っていた古いやつだからかな... 買い換えて再トライです😮‍💨

むすび

 また中途半端になってしまいました. 次回からはもう少し纏めて,ロードバイクに付けてドライビングレコーダとして使うのと,360度カメラでVR動画を作るのをメイントピックとして記録していくつもりです.

アクションカメラ: Insta360 ONE RS TWIN EDITION

 こんちには.changです.

 アクションカメラInsta360 ONE RS TWIN EDITIONを購入しました. 今回は開封だけです. これから使っていこうと思います😀

1. 購入の理由

 アクションカメラを欲しいと思った理由は,大きく二つあります. 一つ目は自転車用のドライビングレコーダが欲しかったこと,二つ目は仕事の関係もあってVR動画が作れる全方位カメラが欲しかった事です.

2. 選定の理由

 上記の購買意欲からすると,定番はGoPro Maxです. カメラは得意分野では無いので,無難に行こうと思ったのですが...少し考えました🤔 GoPro Maxは2019年9月に発売されました. 近く新型がリリースされるという噂もあります. 今買うと,型落ちになってしまう可能性があります.

 せっかくだから最新が良いなぁと思って検索していたところ,Insta360 ONE RSがヒットしました. このカメラで気に入った点は:

  • 360度カメラと4kカメラを切り替えられる
  • GoProと同形式で自転車にマウントできる
  • 125.3g(4kカメラ使用時)と比較的軽量
  • レゴブロックみたいに組み替えて使うデザインが革新的

 即決でAmazonで買いましたwww 一応デメリットも上げておくと:

  • 日本人で使っている人が少ないので情報が少ない

3. 開けてみた

梱包はMacな感じです

開けるとこんな感じ

保証書も今どきな感じです...

Note:
MicroSDは別売りです.

4. まとめ

 本当に開けるだけになってしまいました. 仕事行かなきゃ💦

iOSで自作U-Net

 こんにちは.changです.

 前回に続いてiOSDeep Learningをやってみます. サンプルをベースに,自作U-Netの学習済みモデルを使ってSemantic Segmationします.

1. サンプルでSemantic Segmentation

 前回,公式からダウンロードしたソースを使います. ソースは,~/Tools/TensorflowLite下にあります.

環境変数を再設定

% echo export PATH='/opt/homebrew/bin:$PATH' >> ~/.bash_profile
% rbenv global 3.1.1
% source ~/.bash_profile
% rbenv versions

環境変数を設定しないとrbenvが動作しない.恒久設定の仕方も調べないと💦

% cd ~/Tools/TensorflowLite/examples/lite/examples/image_segmentation/iOS
% pod install

エラーになる

ç

ここ*1で紹介されている方法で解決

% xcode-select --install
% xcode-select --reset

workspaceを生成→プロジェクトを開く

% pod install
% open ./ImageSegmentation.xcworkspace

Bundle IdentifierとTeamを指定してビルド

今回も無料IDでやってます

出来ました😀

起動後にチュートリアル画面が出ます.Andorois版よりも凝った作りになっているのが不思議...

ちゃんとiPhoneカメラとリンクしました

2. 自作U-Netのtflite変換

 以前に作ったU-Net*2をそのまま使います. Tensorflowで生成されるpbファイルをTensorflowLiteのtfliteファイルに変換するソースのみを書き足しました. 今回は(高速化の為の)量子化等はせず,単純に変換だけ行います.

pb_to_tflite.py

import numpy as np
import os
import tensorflow as tf

dir = "./u-net"
input_model = dir + "/output"
output_model = dir + "/models/unet_dagm_256.tflite"

#to tensorflow lite
converter = tf.lite.TFLiteConverter.from_saved_model(input_model)
tflite_quant_model = converter.convert()
if not os.path.exists(dir + "/models"):
    os.mkdir(dir + "/models")
with open(output_model, 'wb') as o_:
    o_.write(tflite_quant_model)

Note: 変換はLinux上で行いました.

3. 自作U-NetをiPhone内で推論

(1) tfliteをプロジェクトに追加

 上で変換したtfilteをGoogleドライブ経由でMacに移植しました. 更に,examples/lite/examples/image_segmentation/ios/ImageSegmentation/modelにコピーし,プロジェクトに追加しました.

フォルダにコピーするだけでなく,明示的に追加する必要がありました

(2) 自作モデルの読み込み

 ソース内で定義されていたモデル名を指定.

ImageSegmentator.swift

  static let modelFileName = "unet_dagm_256"
  static let modelFileExtension = "tflite"

 デバッグ実行するとエラーになりました. ちなみに,Androidでは同様に変換したtfliteを読めました. iOSでは独自の変換が要るという事でしょうか?

tensorサイズで怒られている?

4. むすび

 時間掛かりそうなので,一度区切ります. 集中すれば出来そうなんだけどなぁ😮‍💨

iOSでTensorflowLite

 こんにちは.changです.

 ほぼ自分用のメモですが,MacでTensorflowLiteのサンプルをビルドして,iPhoneカメラでobject detectionするまでの記録になります.

1. 必要ツールのインストール

(1) Visual Studio Code

 今回は設定ファイルの編集に使うだけですが,必ず使うので入れておきます.

  • ここ*1からダウンロード
  • FinderのApplicationにコピー
  • Terminalから起動する為に,F1⇨Shell Command: Install 'code' command in Path

VScode.Applicationフォルダに実行ファイル毎(?)置くというのが,Linuxユーザーからすると新鮮です

(2) markdown

TensorflowLiteとは全く関係ないのですが,記事の下書きをするのに使いました.

(3) git

 Xcodeと一緒に入っていた為にインストール不要で,ver.確認だけしました.

% git --version

git のversionを確認

(4) rbenv

 これが無いとcocodpodsが入らない様です*2*3環境変数の追加まで行いました.

brewをインストール

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"  
% echo export PATH='/opt/homebrew/bin:$PATH' >> ~/.bash_profile  
% source ~/.bash_profile
% brew update  
% brew install rbenv ruby-build

続いてrbenv

% rbenv versions
% rbenv install -l

インストール可能な最新版は3.1.1

% rbenv install 3.1.1
% rbenv versions

未だPathが通っていない

環境変数を設定

% rbenv global 3.1.1
% sudo code ~/.bash_profile

~/./bash_profile

[[ -d ~/.rbenv  ]] && \
  export PATH=${HOME}/.rbenv/bin:${PATH} && \
  eval "$(rbenv init -)"

  vimが苦手なので,VSCodeで編集しました.

% source ~/.bash_profile  
% rbenv versions

無事に入ったっぽい

  面倒なことに,環境変数設定はTerminalを再起動すると無効になってしまう様です

(5) CocoaPods

% sudo gem install cocoapods

CocoaPads.依存パッケージも色々入ります

% pod setup

ここまでが結構長かった...

2. 公式サンプルのビルド

 公式*4*5を見ながら進めます.

(1) ソースを取得

% cd ~/  
% mkdir Tools  
% cd Tools  
% mkdir TensorflowLite  
% git clone https://github.com/tensorflow/examples.git  

(2) workspace fileを生成.

% cd ~/Tools/TensorflowLite/examples/lite/examples/object_detection/ios  
% pod install

*.xcworkspaceができる

(3) いよいよXcode

プロジェクトを開く

% open ./ObjectDetection.xcworkspace

Xcodeが開く

TARGETを確認

Bundle Identifierを指定

ドメイン名というのが良く解ってないので,適当です

Apple ID

今回はDeveloper ID無し*6でやります.

Add count

Apple IDとパスワードを入力

Personal TeamにApple IDを指定

実機を繋いでいざビルドと思ったが...

ver.不整合でビルド出来ず

3. Xcodeを更新(付随的にiOSも)

Xcodeのver.を確認

ver. 12.5.1が入ってしました.何も意識せずに入れたな💦

App StoreからXcode 13.2.1に更新しようとしたら,先にOSの更新を求められた...

先は長そうですが,めげずにiOS ver.を更新

Montereryというのも良く解って無いので怖いな...

無事に更新されました.

いきなり12.3.1にはならず,2段階で入った感じでした.UIの外観もかなり変わりました

再度Xcodeを更新

更に新しい13.3.1が見つかりました.日が経ったからかな?💦

無事に13.3.1が入りました.

時間掛かりました...

4. 再びビルド

プロジェクトを開く

% cd ~/Tools/TensorflowLite/examples/lite/examples/object_detection/ios  
% open ./ObjectDetection.xcworkspace

実機を接続

エラーが消えました

デバッグ実行すると,iPhone側でエラーになる

セキュリティエラーが出ます

設定⇨VPNとデバイス管理からDeveloper(自身)を信頼します.

しっかりと自分のDeveloper IDが表示されます.良く出来ていますね🤔

出来ました😀

汚いデスクだなぁ...

5. むすび

 高々これだけの事をするのに,凄く時間がかかりました😮‍💨 めげずに続けていくしかないですね.

 次回はデバッガーを動かしてみようと思います.

富士チャレンジカップ 200 km,12位

 こんにちは.changです.

 1週間前の話になりますが,富士チャレンジカップ 200 kmに出場しました. 結果は12位. 良い意味で,新たな課題が見えてきました.

1. 前日まで

 初めての200 kmレースで,分からない事だらけでした. しかも,袖ヶ浦 160 km*1から2週間間隔での出走です. 疲れが残る事は無かったですが,どうしても2週間前→袖ヶ浦からの回復,レース週→軽めの調整となり,自身の調子を把握しにくかったです. 自分に合ったレース間隔とか,レース間隔に応じた調整方法なども身に着けていく必要がありそうです. 毎週レースをしているプロは本当にすごいと思います.

 4日前のインターバルではそこそこ踏めたので,調子が悪くない事は判っていました. でも,過度に気負わないでレースに臨みたかった為,軽めの調整に徹して,FTP値が明るみになる様なメニューは避けました. 気持ちの弱さなのかも知れないですが,稀なスーパーコンデションを狙うよりも,イーブンで自然体でいる方が良い気がします.

4日前.軽めの調整

2. 当日の展開

 今回,ポイントになったのは雨です.

 天気予報は悪かったですが,降ったとしても昼過ぎからだと思っていました. 会場への移動中に雨が降り出したときは,4年前の土砂降りが頭をよぎりました.

 店長選手権に出場した店長さんから,路面は極端にスリッピーでは無いと聞いていました. 実際,コーナーで滑る感覚は無かったです. 前回から導入しているPirelli 28 mmが良かったのかも知れません. ただ,兎に角寒くて,チームメートは皆肩をすぼめていました. 早々に試走を切り上げて冬用のレッグカバーに替え,レインウェアを着たまま出走することにしました.

 序盤は速かったです. 並んだ位置が後ろだった所為もありますが,ローリング直後に千切れかける様な状況でした. 最後尾にいるとどんどん削られてしまうので,脚を使って集団の中盤に上がります.

 集団の人数はどんどん減っていきます. 50 kmを過ぎた頃には,100 kmカテゴリの選手を含めて30人位しか残っていなかったと思います. 200 kmカテゴリに至っては,(レインウェアでゼッケンが見えない方もいたものの)数名しかいませんでした. このペースのまま200 kmは持たないと感じていました.

 弱気になった所為もあって千切れます. その後は第2集団に合流しました.

 100 kmを過ぎると,どっと選手が減ります. 集団を探して仕切り直そうと思っていたところへ,200 kmの先頭集団が来ます. ところが,リズムを合わせる事が出来ずに千切れます. 一人で走っても仕方がないと思い,ピットに入ってお手洗いに行きます. ついでに,レインウェアを脱ぎました.

 コースインして,先刻千切れた集団に再度乗ります. この時はペースが合いました. 集団は,レース参加者よりもサポートライダーの方が多い状態で,非常に安定していました. 僕と同様に周回遅れの方が殆どでしたが,皆さん上手い方で,走りやすかったです.

 周回遅れになっていない選手は3名しかいなかったそうです. 終盤に近付くと,この3名にレースをさせてあげようという雰囲気になります. サポートで並走してくれていた56店長の男気が発揮された感じでした. そうなるとペースは上がらなくなります. 大会スタッフがペースを作る時間帯が大半になり,レースっぽくは無かったです. 集団から千切れた時点でレース終了という事ですね. そのまま集団でゴールしました.

3. パワー分析

 比較対象が無いので正直良くわからないですwww. 平均パワー162.3 Wは高くない様な気がしますが,200 kmではこんなものなのかも知れないです. TSSは364.3でそこそこなので,自身の持てる力は出せたのかと思います.

サイコンのログ.平均パワーは高く無い様に見えますが,,,

 ラップ記録を見ると,おそらく13週目で千切れていますね. 昨年走った100 km*2のデータと比較しても,セレクションが掛かった様に見えます. この展開にこそ食らいつき,耐久戦で勝負できる様になりたいです!

ラップ記録.序盤は速めだったのかな?

昨年走った100 km前半のラップ記録

4. 改善点

雨対策

 レインウェアを持っていたのは良かったのですが,撥水処理を怠っていました. レース前半でびしょ濡れになってしまい,身体を冷やしてしまったと思います. レインウェアと靴には,日常的に撥水スプレーを使うべきですね. velotozeも携帯品リストに入れないとです.

補給食

 ショップの店長さんから,200 kmのレースでは固形食も必要だというアドバイスを受け,初めてジャムパンを持ちました. 咀嚼は何とかなりましたが,包装を剥がすのが若干大変でした. 包み紙の種類や,包み方を変える必要がありそうです.

携帯したジャムパン.3個ポケットに入れて,2個食べました

レース中の体温調整

 上述のレインウェアと重複する内容ですが,レース中の体温調整の重要さを実感しました. 今回,一度ピットインしてお手洗いに行っています. この時にレインウェアを脱いだ事で,調子が上向いた感覚があります. タラレバを言っても仕方ないですが,ピットインせずにレインウェアを脱げていれば,トップ10に入れた可能性があります.

 生理現象は我慢しようが無いですが,身体を冷やさなければマシになります. レースによっては手放しが禁止されるので注意が必要ですが,プロのレースではレース中にウェアを着脱することが当たり前です. 長袖のレインウェアだと危険かも知れませんが,ベストとかだったら何とかなる気がします.

5. むすび

 12位という順位は自身の最高成績です. 200 kmを走りきった達成感もあります. でも,レースの展開にもっと絡みたかった思いはあります. 引き続きトレーニングをして,レース経験を重ねていきたいと思います.

 次は富士ヒルです. 暫く登ってないので,ヒルクライムモードに切り替えます.

袖ヶ浦チャレンジ2022 ソロ160 km,16位

 こんにちは.changです. 袖ヶ浦チャレンジ 160kmにソロ参加しました. 結果は16位. この距離のレースを初めてまともに走りきる事が出来ました😀

f:id:changlikesdesktop:20220403112712p:plain:w400
袖ヶ浦フォレストレースウェイ.当日は寒くて,お手洗いを我慢するのが大変でしたwww

1. 袖ヶ浦チャレンジ

 袖ヶ浦フォレストレースウェイで行われるエンデューロです. 昨年,同様のイベントに2回に出ました. 良く解ってませんが,主催者が異なる別イベントの様です.

 袖ヶ浦フォレストレースウェイは,ドフラットではないものの登り(というか周回そのもの)が短く,コーナーの難易度が高いことから苦手としているコースです. ただ,もう走りたく無い程嫌いでは無いです. トレーニングというか,苦手克服の為に挑戦しようと思えるコースです.

2. 前日まで

 下総エンデューロ*1の2週間後でした. これ自体は問題なかったのですが,下総の翌日にチームの大学生と明神に行ったのがヤバかったです.

f:id:changlikesdesktop:20220403113017j:plain:w400
レースの翌日に明神.オッサン,年を考えようよ

 疲れが暫く抜けず,高強度のトレーニングが出来ませんでした. レースの3日前にようやく戻ったのですが,どの位踏めるか全く判らない状態でのスタートでした.

f:id:changlikesdesktop:20220403113215j:plain:w400
レースの3日前に復調

3. レース展開

 全体的にまったりというか,一定ペースでした. 序盤はプロ選手がひいてくれたのですが,ホームストレースで40 km/h出ない周回もありました. ”チャレンジを楽しむ”というイベントの趣旨なのでしょう*2

 途中,更にペースが落ちます. 「100 kmカテゴリーがゴール直前だから,邪魔しないように」という事になったみたいです. この時は本当にゆっくりで,第2コーナからの登り返しで集団が詰まってしまう程でした.

 100 kmを過ぎてプロ選手の牽引が終わると,少しレースっぽくなりました. 有力チームが前に上がる動きも見られたので,警戒していました. ただ,集団の前方に留まり続ける事が出来ませんでした. 位置取りを少し下げたタイミングでアタックがかかりました. アタックは見えていたのですが,誰が行ったのかまでは判りませんでした. 結果的にはこの時に有力選手を逃がしてしまい,レースが終わっていました.

 思い返すと,アタックは数回掛かっていたのかも知れないです. アタックの直後に集団の前方に上がって追走に備えたのですが,誰も追おうとしませんでした. その時は,千葉でよく見る赤いジャージのチームを含む3人程度が逃げたと認識しています. でも,この逃げは最終盤で吸収したのですよ🤔

 なので,この前にもっと決定的な逃げがあったのかも知れないです. 集団の前に居られず,展開に絡めなかった事は少し残念です.

 最終盤,160 km参加者と強調して追走集団のペースを上げようとしましたが難しかったです. 登りで前に出ると千切ってしまいます. 自惚れかもですが,追走の160 km参加者の中では最も脚があると感じていました. ただ,一人で抜け出す程の力はありませんでした. スプリントが無いと,こういう時に厳しいです.

※ 後で判った事ですが,強豪チームは逃げに選手を送り込んでいたし,参加者の多くが200 kmカテゴリーだったので追う必要が無かったのです.

 最後は追走集団から諦め気味にスプリントしました. 追走集団の頭を取れば6位で,ギリギリ表彰台だったみたいですね.

4. パワー分析

 サイコンのログを見ると,平均パワーとNPが昨年惨敗したウィンターサイクルマラソン*3とほぼ同値でした.

f:id:changlikesdesktop:20220403102650p:plain:w400
サイコンのログ.こんなもんだなって感じです

 レースで重要なのはパワー値ではない無い,という事が良く解ります. 今回はインターバルが少なく,僕にとって有利な展開だったと言えます. 終盤になっても脚を残せてましたし,レース後もさほど疲れていませんでした.

 距離が長いレースになる程,今回と似た展開になる筈です. 序盤の振るい落としに耐え,後半の持久戦でアタックする(或いはアタックに反応する)というのが,僕がするべきレースと言えます. 富士チャレ200 kmが楽しみになってきました🔥

5. 機材

 オーバーホール明けだったのですが,羽が生えたかの様にバイクが軽かったです. ショップのスタッフさんに感謝しています.

f:id:changlikesdesktop:20220403114718p:plain:w400
愛車のIzalco max disc.バーテープをチームカラーのオレンジにしました

 大きなパーツ変更はしなかったのですが,タイヤをコルサ25 mmからピレリの28 mmに替えました. 28 mmにしたのは腰痛軽減の為,ピレリを選んだのは軽量化の為です. 4.3気圧で使用しましたが,素晴らしく良かったです. コーナーの安定感が格段に増しました. 腰痛も若干マシになった様な気がします. 空気圧を更に下げても良さそうです🔧 少しお高めではあるので,決戦レースタイヤとして使っていこうと思います.

6. 落車

 落車が多かったです.

 一件は僕の目の前で起きました. 転んだ選手の顔面が僕の前輪の前に落ちて来たので,少しヒヤッとしました. 転んだ方は救急車で運ばれました. 一日も早い回復を願っています.

 この他にも大規模な落車が在り,救急車が入りました.

 自身が落車をしない,落車のきっかけを作らない,落車に巻き込まれない為には,当たり前ですが,集団の前方に居る必要があります. ただ,自身が転ばなければそれで良いという訳でもありません. 怪我人が多いイベントでは楽しめないです.

 僕はあまり意識しないで走ってましたが,”4 hを切るとS級ライダー”という特別賞が設定されてたのですね. これを狙って走っていた方も多かったのでしょう. サポートライダーの集団コントロールも納得です. イベントのコンセプトを理解して,チャレンジに協力しないとですね👍

 ただ,団子状の大集団で走り続けるのは,個人的には危険だと感じました. もし,”S級チャレンジ”みたいなのをイベントの主目的にするなら,時間差とか,細切れでスタートさせた方が安全でしょう. (順位を競いたい人も含めて)イベントに沢山の人を集めるのは大切だけど,多様な目的を詰め込み過ぎるのは難しいのかも知れません🤔

7. むすび

 自身としては過去最高成績だったのですが,あっけなかった印象があります. 気負わずに自然体で走ったのが良かったのかなぁ. 再来週の富士チャレ 200kmも同じアプローチで行きたいです.