理系夫婦のうたたねブログ

理系夫婦が好きなことを書いていきます。たまに医学っぽいことを書いていますが、あくまで私見です。

DeepLabCutのエラー「ValueError: too many values to unpack (expected 2)」

数年ぶりにDeepLabCutを使ってみたらいろいろ使い勝手が変わっていてびっくりしました。
そんな中でであったエラーの解決法を記しておきます。

経緯

数年ぶりにDeepLabCutを使ってみている途中、学習までは無事に終了して、トラッキングした動画を作ろうとしたら
ValueError: too many values to unpack (expected 2)
というエラーがでて、動画が作成されませんでした。

その前日に試したときはエラーなく動画が作成されたのですが、何が違うのだろう・・・?
となって1時間くらい悩みました。

原因と解決方法

さすがに使用している人口が多いためか、同じエラーが起こった人がいて、丁寧にgithubでissueになっていました。
https://github.com/DeepLabCut/DeepLabCut/issues/1081
こちらを読めば簡単にわかると思いますが、日本語解説はなかったので、一応まとめておきます。

原因はskeltonの指定方法の間違いでした。
DeepLabCutで検出するポイントはconfig.yamlを書き換えて作成しますが、その中には
bodyparts という部分と
skeleton という部分があります。 上はどの体の部位をトラックするかで、下はスケルトン化の際のパーツを示しています。

エラーが出た際私は、
skeltonのほうもBodypartsと全く同じにしていました。

どうやら、Skeltonのほうはskeltonになった場合の1本の線ごとに区切って書く必要があるらしく、
bodypartのように同定したいポイントをただ単に羅列するのではなく、
Nose-Center
Center-Tail
という風に分けて書く必要があったらしいです。今回の場合NoseからCenterに線をひいて、CenterからTailに線を引いているので、
結果として上のように書く必要があったということです。

結論

マニュアルをちゃんと読もう。
これにつきますね。