見出し画像

iOS 15でアップデートされたVisionによる「人間」の検出

オンデバイスで「人間」を検出する

iOSでは古くはCore ImageのCIDetectorで顔の検出ができたし、最近ではVisionでディープラーニングベースの顔検出もできる。

しかし顔検出は、顔しか検出できない。画像内における顔領域の大きさが小さかったり、顔が横や後ろを向いているときには画像内に人間がいることを検出できない

そういう場合、YOLOのCore MLモデル(公式でも配布されている)を利用して、personクラスを検出する方法があった。

画像1

YOLO で person を検出する際の問題

まず、YOLOによる一般物体検出(Object Detection)はiOSにビルトインされているモデルではないので、Core MLモデルをアプリに同梱する必要がある(※)。

この場合、一番小さい YOLOv3Int8LUT.mlmodel を利用しても62.2MBもある。

YOLOv3-Tiny シリーズを使えばモデルサイズはグッと小さくなる(Int8LUT版は8.9MB)が、残念ながら精度も体感できるほどに下がる...

そしてYOLOによる推論処理はそれなりに重い。最新のiPhone 12シリーズでも60 fpsでは処理できないし、端末がアツアツになる。大抵の場合他の画像解析も併用することになるので(僕の場合は音声解析も同時に併用することが多い)、なおさら厳しい。

(※あとからダウンロードさせる手段もある)

VNDetectHumanRectanglesRequest

iOS 13から、Visionで VNDetectHumanRectanglesRequest というのが使えるようになった。

YOLOのpersonクラスを使う代わりになりそうと期待したが、検出範囲が全身ではなく上半身のみ(顔+胴)で、完全な代替にはならなかった。

iOS 15で「全身」の検出が可能に

そんな VNDetectHumanRectanglesRequest が、iOS 15でアップデートされた。revision が VNDetectHumanRectanglesRequestRevision2 となり、全身の検出が可能になった。

画像2

ここから先は

1,810字 / 1画像

堤がWWDC 2021およびiOS 15についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。NDAの都合上、Ap…

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/