神戸のデータ活用塾!KDL Data Blog

KDLが誇るデータ活用のプロフェッショナル達が書き連ねるブログです。

Kaggleで初めてのメダルを獲得できた話【GBRコンペ】

はじめまして!

株式会社神戸デジタル・ラボ DataIntelligenceチーム(以降DIチーム)の高木です。

この度、世界最大規模の機械学習コンペティションプラットホーム「Kaggle」上で開催されたTensorFlow主催の「Help Protect the Great Barrier Reef」(以降GBRコンペ)において、DIチームの原口と高木がブロンズ入賞を果たしました。本連載では、GBRコンペでの取り組みについて振返りと解説をしていきます。こちらの取り組みはKDLのニュースリリースでも取り上げられていますので、是非そちらもご覧ください。

世界最大規模の機械学習コンペティションプラットフォーム「kaggle(カグル)」に参加、Bronzeに入賞しました!

今回の取り組みの目的

DIチームでは、AI・データサイエンス分野における最新技術の習得を目的とし、業務の一環としてコンペティション(以降コンペ)へ定期的に参加しています。今回参加したコンペは、画像の中からある特定の対象物を見つけ出すという「物体検出」の内容になります。DIチームでは物体検出を取り扱う機会が多くあり、知見の向上を目標に掲げコンペに挑戦しました。

コンペチームメンバー

今回のコンペは、当時入社1年目の原口と内定者の高木がチーム「KDL_DI」として参加しました。

原口俊樹
2021年度に入社し、社会人2年目になりました。SIGANTEのコンペからKaggleの別のコンペを一つ挟み、本コンペが3回目の挑戦となります。神戸デジタル・ラボではデータサイエンティストとしてお客様の課題解決に注力しています。また本テックブログでは様々な「やってみた」系記事を執筆しています。良ければご覧ください!

高木裕仁
大学時代は、自然言語処理という言葉の分野を専門としており、SNS上のテキストについての研究を中心に行なっておりました。内定者であった学生期間より、アルバイトとしてDIチームの業務に従事しており、2022年4月に新卒として神戸デジタル・ラボに入社いたしました。お客様に寄り添うことができるデータサイエンティストをモットーに、日々精進中です。

Kaggle

そもそもKaggleって何?

AI・データサイエンスに携わる人が、企業などの組織から提供される課題とデータに対して、入念なデータ分析を行い、課題解決を実現するモデル(データを入力すると、課題に対して期待する出力を構造内で予測するもの)を構築し、その精度を競う世界最大規模のプラットホームです。

Kaggle上では、ただ自身のモデルの精度を競うだけではなく、課題や最新技術に対しての議論が頻繁に行われています。この議論を通して、提供課題に対しての適切なアプローチはもちろん、現在のAI・データサイエンス分野のトレンドや、最新の便利なツールの存在を知ることができます。また、世界中の優秀な人材がKaggle上で自身のコードを公開してくれることも少なくなく、コーディング能力のスキルアップの場としての役割も果たしています。

メダルシステムについて解説

今回、チーム「KDL_DI」は全2025チームの中で181位という順位に位置付け、見事にブロンズメダル獲得という結果を収めました。めでたい!!

そもそも、Kaggleにおいてこのブロンズとは一体どういったものなのでしょうか。Kaggleではコンペの成績によって、ゴールド・シルバー・ブロンズという3種類のメダルが用意されています。一回のコンペでいくつのチームがメダルをもらえるのかは、コンペの規模に影響されます。2025チームが参加した今回のGBRコンペは、「1000チーム以上が参加する最も大きな規模」のコンペでしたので、上位10%以上がブロンズ、上位5%がシルバー、上位5名+0.02%がゴールドという基準が採択されました。

よって、今回のチーム「KDL_DI」がブロンズに入賞したという表現は、上位10%に入ることができたという様に言い換えることができます。コンペに参加している一番の目的は最先端の知識を得るためといえども、やっぱり良い結果が出ることは嬉しいものです。世界最大規模のコンペでこのような結果を残せたことは、今後も継続的にコンペに参加していくモチベーションにも繋がりました。

GBRコンペ

GBRコンペって、どんなコンペだったの?

今回参加したGBRコンペは、2021年11月23日~2022年2月15日の間、「Help Protect the Great Barrier Reef」と題して開催されました。内容は、海底で撮影された動画をフレームごとに画像として切り出し、画像内のどこにオニヒトデがいるのかを検出するものでした。

今回の検出対象である「オニヒトデ(以下、ヒトデ)」は、オーストラリア大陸北東岸に広がる世界最大のサンゴ礁地帯「グレートバリアリーフ」に害を及しているとのことです。今回のコンペに参加することで、現状目視で行われているオニヒトデの駆除をAIで代替する仕組みを提供して、サンゴ礁の保存に一役買うことができる訳です!

入力データ

今回のコンペでは以下の2種類のデータが提供されていました。

  1. 海底画像
  2. 与えられた画像はビデオの中のどの部分を切り取ったものかという情報と、その画像中のどこにヒトデがいるのかの位置の情報を含んだCSVデータ(表形式のデータ)

これらのデータを入力として、ヒトデの場所を特定するモデルを作っていきます。

モデルの出力

一般的に、今回のような対象のものの位置を特定する「物体検出」のタスクにおけるモデルは画像を入力すると、以下の2種類の値を出力します。

  1. ヒトデの位置(予測する形は常に長方形)
  2. 自信度(モデルが検出したものをどれだけヒトデであると自信を持っているかの数値)

「ヒトデの位置はわかるけど、なんでモデルの自信度を出力するの?」と思った方もいるでしょう。モデルの自信度は、どれくらい自信があるかという、モデルからのメッセージとも捉えることができます。この値を出すことで、モデルが「少し自信がないなあ…」と判断したヒトデの位置の予測は消してあげることができるようになります。

評価方法

評価方法は「モデルの出力がどれだけ正確か」を測ります。得られた評価結果は、他チームと比較する際に用いるためとても大事な部分になります。気になる評価方法はこちらです!

Step 0.05で0.30 ~ 0.80のIoU閾値を動かして各閾値でF2スコアを計算し、平均を取る

ん?なんか複雑な単語がたくさん出てきました。

評価方法をもっとわかりやすく

先程の評価方法の説明では、物体検出ならではの単語が多く出てきて理解が難しくなっていました。ここからは、物体検出に関する前提知識がなくとも評価方法を理解できるように説明していきたいと思います!途中、「調和平均」などの一見評価方法と関係がなさそうな単語も出てきますが、評価方法を理解する上では必要な内容ですので気楽に読み進めていただけると嬉しいです。

IoU(Intersection over Union)

まずは、「IoU」という単語です。こちらは"Intersection over Union"の略語になります。 Intersection・Unionはそれぞれ数学用語で、和訳すると「積集合」・「和集合」という意味です。「積集合」「和集合」っていうと難しく聞こえますが、要するに「重なっている部分」「全体の部分」というような意味合いを持つ単語だと考えてください。

残りの、overも数学用語でして「割り算」を表します。例えば、”one over three”という英語は 「1割る3」という意味で、1/3(三分の一)を表します。ご存知でしたか?

以上のことを踏まえると、「IoU」という単語は「IntersectionをUnionで割る」ことを意味し、下図のように簡単に表せます。(図の中の長方形は、どこにヒトデがいるのかというモデルの予測と考えてください)

つまり、「IoU」というのは、二つのモデルの予測を足し合わせた全体の部分(Union:和集合)と、二つのモデルの予測が重なっている部分(Intersection:積集合)がどれだけの割合で重なっているのかを示しています。今回のコンペにおいては、正解と予測の二つに対して「IoU」を計算していきます。

では、「IoU閾値」とは?この値は、正解と予測のヒトデの位置に対して計算されたIoUに適用されます。もし、算出されたIoUが設定されたIoU閾値より下回る場合は、モデルは正しくヒトデを検出できていないと判断します。つまり、今回の評価方法の中の「Step 0.05で0.30 ~ 0.80のIoU閾値を動かして」という表現は、検出できたと判断できる値を0.30から0.05ずつ動かして0.80までしていくということですね。0.30, 0.35, 0.40, … 0.75, 0.80のように!

具体例として、モデルAとモデルBの予測における、正解に対するIoU値がそれぞれ0.72, 0.48の時を考えます。モデルAの予測は0.72なので、IoU閾値がその値より大きい0.75と0.80の時は検出できていません。モデルBも同様に、0.48以上のIoU閾値が0.50以降の時は検出できていませんね。

調和平均

「平均」にはいくつか種類があります。その中でも、「調和平均」という単語は、あまり聞き馴染みがないものかもしれません。普段我々が一般的に用いる平均は「算術平均」と呼ばれています。例えば、300gと500gの2つリンゴの重さの平均を求める時などに利用されるものです。二つの値を足して、個数で割ることで計算できますよね。この例だと、平均は400gになります。

これに対して、「調和平均」は同じ対象に対して、異なるアプローチをとる値(比率)の平均を取るときに利用されるものになります。例えば、時速などがこれに当てはまります。具体例として、120kmの距離を1/2時間で進む自動車Aと、1/3時間で進む自動車Bがあるとします。では、まずこの二つの自動車の時速の計算をしてみましょう!以下の様になりますよね。

ここで、計算式に注目してください。時速を求めるには、同じ距離に対して、異なる時間をかけています。つまり、異なるアプローチをとっていることになりますね。前述の通り、調和平均を使う場合は「同じ対象(時速)に対して、異なるアプローチ」を求めます。つまり、時速の平均を求めるときは「調和平均」を使わないといけないのです!ちなみに、「調和平均」の計算方法は以下の通りです。式の中のnという値は変数の個数を表します。

また、今回の自動車の例のような2つの値の「調和平均」は上記の式のnに2を代入してあげれば良いので、以下のようになります。

この式を利用すると、例の二つの自動車の時速の平均はこのように求まりますね。

間違えやすいところではあるのですが、時速の平均を求めるときには算術平均を利用しては二つの値を足して割って50km/hではないですよ!

適合率・再現率

正解に対する有効性に対しては、適合率と再現率という異なる考え方があります。今回のコンペに適用すると以下の様になります。

適合率(precision):実際の正解のうち、モデルがヒトデだと予測したものの割合
再現率(recall):モデルがヒトデだと予測したもののうち、実際の正解がどれだけあるかの割合

こちらを、表と数式を利用してあらわすとこんな感じになります!

ちなみに、表の中でTPTNFPFNと書かれているのは略語で、それぞれTrue Positive(真陽性)・False Positive(偽陽性)・True Negative(真陰性)・False Negative(偽陰性)のことを表しています。

今回の場合、それぞれは以下の様な意味を示します。
TP(True Positive):モデルがヒトデと予測し、実際にヒトデであるもの
TN(True Negative):モデルがヒトデではないと予測したが、実際にはヒトデであるもの
FP(False Positive):モデルがヒトデと予測したが、実際にはヒトデではないもの
FN(False Negative):モデルがヒトデではないと予測し、実際にヒトデではないもの

ここで、適合率と再現率の平均を取るには何を使うのかを考えてみましょう!少しだけ、計算式に注目してください。同じTPという値に対して、異なる分数をかけていますよね。「同じ対象に対して異なるアプローチをとっています!」ということは、この二つの値に対して平均を取る場合は「調和平均」を使うことになります。

F値

F値というのは、再現率と適合率の平均のことを示します。先程述べた通り、これらの二つの値の平均を取る際は「調和平均」を使いますので、F値のスコアは以下のような数式になります。

F2スコア

では、F2スコアとは何なのか。実は、F2スコアとはF値の一部に当たります。複雑なのですが、先程説明した「F値」には、F1スコアを指す狭義の意味と、F1スコアを含む3つの集合(F0.5スコア、F1スコア、F2スコア)を指す広義の意味があるのです。

「それぞれどう違うの?」という話なのですが、F0.5スコアとF2スコアはどちらも平均を取っていますが、少しだけどちらかを重視しているという特徴があります。具体的には、F0.5スコアの場合は適合率を、F2スコアの場合は再現率を重視しています!

数字が得意な方は、F0.5スコアの分母には再現率(Recall)に4が掛けられていて、F2スコアの分母には適合率(Precision)に4が掛けられていることからわかりますよね。(分数全体の値を大きくしようとすると、分母は小さい方が嬉しいというヒントを基に少し考えていただければ!もし、この部分が理解できなくても問題なく以降の記事は読み進められます)

改めて、評価指標を見てみよう

様々な単語についての説明をしてきましたが、ここで本題のコンペの評価方法に戻りましょう。

評価方法は、以下のように定義されていました。

Step 0.05で0.3 ~ 0.8のIoU閾値を動かして各閾値でF2スコアを計算して、平均を取る

最初にこの評価指標が出てきた時には、理解が難しかった方もいらっしゃっると思いますが、ここまで記事を読んでいただいた方なら容易に理解できるのではないでしょうか!

全部で11個(0.30, 0.35, 0.40, … 0.75, 0.80)のIoU閾値(重なっているよと判断できる値)でF2スコア(再現率重視の適合率と再現率の調和平均)を計算して、11個の平均(この場合の平均は「算術平均(普段の日常で利用する平均)」を示しています)を取るということですね!!

具体例で理解する

F2スコアを求めてみよう

ここからは実際に、具体例で一緒に考えていきましょう。左側に、ヒトデAからEまでの5匹のヒトデがいる海底の図があります。ヒトデ達は黄色の枠(正解)で囲われていますね。一方、右側にはモデルの出力が赤色の枠で囲われています。ここで、それらのIoU値はヒトデAが0.53・ヒトデCが0.47・ヒトデDが0.88・ヒトデEが0.72であったと仮定しましょう。また、ヒトデBはモデルが検出できておらず、予測a・予測bという見当違いな予測をモデルが出していることも図で確認してください。

今回は、IoU閾値0.65の場合のF2スコアを求めてみたいと思います。

ヒトデを数えよう

まずは、TP・FP・FNを数えましょう。 今回のモデルの出力でTNに対応するものはありません。ヒトデAとヒトデCはIoUの値が0.65よりも小さいため、TPではなくFNにカウントされることに注意してください。

TP(True Positive):2個(ヒトデD・ヒトデE)
FP(False Positive):4個(ヒトデA・ヒトデC・予測a・予測b)
FN(True Negative):1個(ヒトデB)

実際に計算しよう

TP・FP・FNの3つが求まったのならば、あとはご紹介した数式に値を代入して、適合率・再現率を求め、F2スコアを求めることができます。計算をすると、F2スコアは5/9となります(計算の詳細は上記に記載)。今回はIoU閾値が0.65という特定の場合を考えましたが、実際にコンペで利用されたスコアを求める場合には0.30から0.80の計11個に対して、同様の作業を行って算術平均を取ります。人の手で計算してみると、とても大変な作業に感じられますね。しかし、実際にはプログラムが行ってくれるので計算自体は一瞬で終わります。こんな複雑な計算をたやすく成し遂げるプログラムって凄い!

つづく

我々チーム「KDL_DI」は、海中画像からヒトデを見つけるというコンペに対して、今回ご紹介したF2スコアという評価指標を頼りにしながらより良いモデルを作成するために奮闘しました。次回の記事では、「コンペをどのように進めていったのか」という部分をお話しできればと思います!

高木裕仁

データインテリジェンスチーム所属
データサイエンティスト。構造化データ・非構造化データを偏りなく扱います。AI・データサイエンスに関わる様々な記事を発信していきます。