犬ピクセルの割合
犬のアノテーションデータを解析する最終タスクは、各画像において犬(複数可)を表すピクセルの割合を求めることです。これまで学んださまざまなテクニックを使って、この情報を計算し、後で分析できるように列として追加します。
ピクセルの割合を計算するには、まず各犬を表すピクセルの総数を求め、画像内で合計します。バウンディングボックスは次の式で計算できます。
(Xend - Xstart) * (Yend - Ystart)
注: この課題では、バウンディングボックス同士の重なりは無視してかまいません。
割合は、犬ピクセルの総数を画像の総ピクセル数で割り、100 を掛けて求めます。
joined_df DataFrame は直前に使用したものと同じです。pyspark.sql.functions は F にエイリアスされています。
この演習はコースの一部です
PySpark でデータをクレンジングする
演習の手順
- タプルのリスト(犬オブジェクト)を受け取り、画像ごとの「犬」ピクセルの総数を計算する Python 関数を定義します。
- その関数の UDF を作成し、DataFrame に新しい列
'dog_pixels'を作成するために使用します。 - さらに、画像内の
'dog_pixels'の割合を表す列'dog_percent'を作成します。0〜100% の範囲になるようにしてください。列参照は文字列名のみを使ってください(例: df.columnname ではなく "columnname")。 - 画像内の
'dog_pixels'が 60% より多い最初の 10 行を表示します。SQL 形式の文字列(例: 'columnname > ____')を使用してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Calculate total pixels occupied by dogs in the image
def dogPixelCount(doglist):
totalpixels = ____
for dog in doglist:
totalpixels += (dog[____] - ____[1]) * (____[____] - ____)
return totalpixels
# Define a UDF for the pixel count
udfDogPixelCount = ____
# Add a new column 'dog_pixels' containing the pixel count for dogs in each image
joined_df = ____
# Add a column 'dog_percent' representing the percentage of the image occupied by dogs
joined_df = joined_df.____('dog_percent', (____ / (____)) * ____)
# Show the first 10 annotations with more than 60% dog
____