先日作成した姿勢推定のコードの動作確認にval2017で精度を評価した。
精度の評価にはcocoapiに姿勢推定の結果を評価するサンプルコードがあるので、評価データをJSONで出力するコードを実装した。
データセットのダウンロード
今回は、val2017で評価したいのでCOCO DATASETから下記の二つのデーターセットをダウンロードした。
- 2017 Val images [5K/1GB]
- 2017 Train/Val annotations [241MB]
評価用のJSONを作成するコードの実装
ダウンロードしたval2017の画像をXcodeに手動で追加後、画像から姿勢推定の結果をJSONに保存するコードを実装した。
JSONのフォーマット
struct CocoKeyPoint: Encodable {
var image_id: Int
var category_id: Int
var keypoints: [Double]
var score: Double
}
cocoapiにはJSONのサンプルが用意してある。
サンプルデータを見れば大体予想がつくが、キーポイントは長いのでわかりにくい。
keypoints
にはMS COCOの17のキーポイントの並び順で、x, y, score を17x3=51になる配列を作成すればよい。
JSONが作成できればcocoapiにある評価用のコードを実行すればよい。
一応書いたコードも備忘録として残しておく。
精度評価結果 (MS COCO val2017)
Models | AP |
---|---|
yolov7-tiny_fp16 + vitpose-b256x192_fp16.mlmodel | 0.589 |
yolov7-tiny_fp16 + vitpose_s256x192_wholebody_fp16.mlmodel | 0.579 |
yolov7-tiny_fp16 + vitpose_b256x192_wholebody_fp16.mlmodel | 0.600 |
iPhoneの実機でそれなりの精度が出ているので正常に動いてそうだ。
ここに出てくるwholebodyは17キーポイントのみの評価としている。