見出し画像

Cascade.detectMultiScaleのパラメータから見える私の傾向とは?python初心者(Ep20)

こんにちわー。
前回の投稿から、少し間が開いてしまいました。。失礼しました!
さて、本日は前回までに行った内容に対して

データを深く観察すること

について、実施していきたいと思います。
前回までの内容を確認する場合はこちらをクリックくださーい。

それでは、色々な視点からデータを深く観察してみたいと思います。

パターン1:顔以外にも検出している件

一つ目としては、下記の絵についてですね。

図1:顔以外も検出した図

花の部分まで検出してしまっていますねー。ここで、一つ下記のコードの部分の理解が必要になる様に思います。

cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))

そうです。cascadeの設定パラメータについてです。

Cascade.detectMultiScale方法のパラメータの意味

色々なサイトに説明が書いていますが、私も理解をする為にも記載をさせて頂きます。

  1. scaleFactor  :画像スケールにおける縮小量のこと。画像の大きさを色々と変化させながら画像中の顔を検出するそうです。細かくすると見落としは少ない可能性がありますが、処理時間がかかるそうです。

  2. minNeighbors :様々なスケールで検出した結果、同じエリアで重複して検出される数のこと。スケールを変えても何度も顔!と判断が付けば、そこは顔だろう。と言った感じです。

  3. minSize :検出顔の取りえる最小サイズのこと。画素がどれくらい小さいものを良しとするか。と言った感じです。


処理案1:scaleFactor を触ってみる

今の設定は、

scaleFactor =1.1

初期設定
scaleFactor = 1.10
顔が検出され、検出数は10個

に設定をしています。それでは色々な数種類の値に変化させてみます。代表的な4パターンを載せます。

scaleFactor = 1.20
顔が検出されず、検出数も3個
scaleFactor = 1.01
顔が検出されるものの、検出数は82個!
scaleFactor = 1.09
顔が検出されない、検出数は10個
scaleFactor = 1.11
顔が検出されない、検出数は13個

パラメータを触った傾向のグラフがこちらです。

スケールファクターの効果度合い

この結果から、下記の事が分かる様に思います。

考察1:scaleFactorの効果

  1. scaleFactor の設定値は小さいと顔の検出回数が多い

  2. スケールの度合いによっては認識して欲しい顔が見えない場合がある

このタイミングで、scleFactor の値はこれだ!!! は決めることは難しい様に思いました。その為、他のパラメータの値の効果も合わせて判断したいと思います。

処理案2:minNeighbors を触ってみる

今の設定は、

minNeighbors=3

初期設定

となっています。ということは、スケールを変更し3回程同じ領域で検出できたかどうか。になりますね。それでは変更をしてみましょう。
なお、他の変数の変化があると観点がごちゃごちゃになるので、
今回触る部分以外は、初期設定のままとします。

minNeighbors = 1
顔も検出できているものの、検出数が増加:28
minNeighbors = 5
顔も検出できているものの、検出数が減少:4
minNeighbors = 10
顔も検出されない、検出数が減少:1

パラメータを触った結果がこちらになります。

同じ場所での検出回数の傾向

考察2:minNeighborsの効果

  1. minNeighborsの設定値は小さいと顔の検出回数が多い

  2. 色々な尺度(スケール)で見られた際に、検出回数が多いとより顔メインの人物を抽出出来ている傾向がある

ここで、一つの仮説としては、

私が選んだ写真において、顔が中心であればこのパラメータによる検出度合いで判断できるのではないか。

仮説1

と考えることも出来るように思いました。これは、のちのちの仮説として残しておきたいと思います。

処理案3:minSize を触ってみる

今の設定は、

minSize= 30 , 30 

初期設定

となっています。この画像は、1920 x  1038  のピクセル画像に対して 
30 x 30 の大きさよりも小さいサイズは顔として検出しない という意味になります。 それでは、minNeighbors と同様に、このパラメータのみ変更を致します。

ここでその前に、認識を合わせてたいと思います。10x10ピクセルってどんなレベルかイメージありますか?実は、

10 x 10 ピクセル画像

このレベルなのです・・。これをみて私が思う事は、

写真を見てこの解像度をみて、いいなー なんて判断しない 

と思いました。その為、ピクセル画素数は増やす方向で検討をします。

minSize = 40 , 40
顔も検出できているものの、検出数は減少:9
minSize = 70 , 70
顔も検出できているものの、検出数は減少:3
minSize = 100 , 100
顔も検出できているものの、検出数は減少:1

パラメータを触った結果はこちらになります。

Minsize変更の傾向

考察3:minSizeの効果

  1. minSizeの設定値は大きいと顔の検出回数は減少

  2. 一枚の画像の中での顔の割合が大きい場合は、サイズにおける検出が変化し、ある一定サイズのところで検出率が高くなる

ここで、一つの仮説としては、

私が選んだ写真において、検出出来ている顔の中で、顔の割合が大きい場合は、この設定(minSize)を画素数に対して調整することで、顔が中心となっていることを判断できるのではないか。

仮説2

と考えることも出来るように思いました。これは、のちのちの仮説として残しておきたいと思います。

本日は、1枚の画像を用いて、Cascadeの顔検出について深く学びました。
次回は、

顔を抽出出来ていなかった写真の傾向を分析する

ことを実施したいと思います。宜しくお願い致します。


よろしければサポート頂けると幸いです!子供へのパパ時間提供の御礼(お菓子)に活用させて頂きます☆