- 2024/1/10 追記
- すでにデータセットが存在していた.色分けはホールドだけで人やマットはされていない.
- ルートを分類するために使用されていることが想定されているかと思われる.
- 最終的にはまぶしをセグメントできるようにしたい
- https://universe.roboflow.com/pwals/bouldering-holds-9wavr
概要
画像内のピクセルをクラスやカテゴリに分類するセマンティックセグメンテーションは様々な場面で使用されているが, クライミングで適用されている例が見当たらなかったため自分でテストデータを作るところから始めた.
クライミングホールドをセグメンテーションを行う手法は提案されている [1].
やったこと
- データセット作成用のツールを作成と公開
- 学習データを作成
- 室内でクライミングしている画像をセグメンテーションできる?
やってないこと
- 学習に使用したデータの公開
ソースコード類
ソースコードが整理されていないが以下のリポジトリに作成したソースコードが含まれている.
- BoulderingSegmentImageGenerator
- テスト画像を作成するためのツールが含まれているディレクトリ
- C# を使用
- BoulderingSegment/hold_segment.ipynb
- 実際に学習に使用してるファイル
- tensolflow のチュートリアルをベースにU-netで学習させている.
- U-netは[3]を参考にしている
データセットの作成
以下のような画像を元にラベル画像を作成する.
ボリュームとホールドの違いが曖昧だったため今のところ全てホールドという取り扱いをしている.
結果
- データの合計数 : 78
- 学習用画像 : 71
- 検証データ : 8
- テストデータ : 2
- 画像サイズ : 128 x 128 [px]
使用PC
- macbook pro
- CPU : Apple M2 Pro
- Memory : 32 GB
テスト
test_loss: 0.7562419772148132
test_acc: 0.792388916015625
今後
U-net以外にも良いモデルが公開されいるのでそれを試してみる.
気づき
- macbook で tensorflow を使っていたが案外性能が良かった. データ数が少ないからではあると思う. windowsPC(RTX 2070 Super) で学習を行ったが同じくらいのスピードでtrainを実行できた.
参考文献
-
Michenthaler, Maximilian. Automated scoring in climbing competitions. Diss. Technische Universität Wien, 2022.
- 上記の文献ではYOLOを使ってクライマーやホールドの検出と追跡を実施している.
- カラーマスクによるセグメンテーションを提案している.
-
画像セグメンテーション
- このチュートリアルを元に実装を開始
-
Tensorflowでの U-net 実装
- このサイトの U-net を利用した