コンテストは、機械学習スキルをレベルアップするための優れた方法です。質の高いデータセットにアクセスできるだけでなく、明確な目標も与えられます。これにより、目前の問題に対する高品質のソリューションを設計するという重要な部分に集中できます。
私と私の友人は最近参加しました N + 1魚、N +2魚 コンペ。多くの画像処理を伴うこの機械学習コンテストでは、識別、測定、保管、または海に投げ戻される魚のビデオクリップを処理する必要があります。
この記事では、標準の画像処理技術と事前にトレーニングされたニューラルネットワークモデルを使用して、競合他社から問題にどのように取り組んだかについて説明します。提出されたソリューションのパフォーマンスは、特定の式に基づいて測定されました。私たちのソリューションで、なんとか11位を獲得しました。
機械学習の簡単な紹介については、以下を参照してください。 この記事 。
各セグメントの1つまたは複数の魚のビデオが提供されました。これらのビデオは、メイン湾で底魚を釣るさまざまなボートで撮影されました。
ビデオは、定規を見下ろすように配置された固定位置カメラから収集されました。魚は定規の上に置かれ、漁師は定規から手を離し、次に漁師は種とサイズに基づいて魚を捨てるか、または保管します。
このプロジェクトにとって重要な3つのタスクがありました。最終的な目標は、ビデオファイルの注釈を自動的に生成するアルゴリズムを作成することでした。注釈は次のもので構成されています。
コンテストの主催者は、これらすべてのタスクのパフォーマンスの一般的な感覚を与える集約されたメトリックを作成しました。メトリックは、各タスクの個々のメトリックの単純な加重の組み合わせでした。特定の重みがありましたが、すべてのタスクに貢献できる、バランスの取れたアルゴリズムに焦点を当てることを推奨しました。
個々のタスクのパフォーマンスメトリックから全体的なパフォーマンスメトリックがどのように計算されるかについて詳しくは、 公式大会ウェブページ 。
で作業するとき 機械学習 写真やビデオを扱うプロジェクトでは、おそらく使用するでしょう 畳み込みニューラルネットワーク 。しかし、畳み込みニューラルネットワークを使用する前に、フレームを前処理し、さまざまな戦略を通じて他のいくつかのサブタスクを解決する必要がありました。
トレーニングには、1つのnVidia 1080TiGPUを使用しました。競合他社との関連性を維持するためにコードを最適化しようとすると、かなりの時間が失われました。しかし、私たちは、それがもっと重要だったであろう場所に費やす時間を減らすことになりました。
シルエット分析では、ボートの数を見つけることはかなり簡単な作業になりました。手順は次のとおりで、いくつかの非常に標準的な手法を活用しました。
SURFは、画像内の関心のあるポイントを検出し、機能の説明を生成します。このアプローチは、さまざまな画像変換を使用しても、非常に堅牢です。
画像内の関心のあるポイントの特徴がわかると、K-meansクラスタリングが実行され、続いてシルエット分析が実行されて、画像内のボートのおおよその数が決定されます。
データセットには個別のビデオファイルが含まれていましたが、各ビデオはデータセット内の他のビデオと一部重複しているように見えました。これは、ビデオが1つの長いビデオから分割され、各ビデオの開始または終了にいくつかの共通フレームが含まれるようになったことが原因である可能性があります。
このようなフレームを識別し、必要に応じて削除するために、フレームでいくつかのクイックハッシュ関数を使用しました。
いくつかの標準的な画像処理方法を適用することにより、定規の位置と方向を特定しました。次に、画像を回転およびトリミングして、すべてのフレームで一貫した方法で定規を配置しました。これにより、フレームサイズを10分の1に縮小することもできました。
検出された定規(平均フレームにプロット):
トリミングおよび回転された領域:
魚の順序を決定するためにこの段階を実装することは、この競技中に私の時間の大部分を要しました。新しい畳み込みニューラルネットワークのトレーニングは費用がかかりすぎるように思われたため、事前にトレーニングされたニューラルネットワークを使用することにしました。
このために、次のニューラルネットワークを選択しました。
これらのニューラルネットワークモデルは、 ImageNetデータセット 。
モデルの畳み込み層のみを抽出し、それらを競合データセットに渡しました。出力では、かなりコンパクトな機能の配列がありました。
utf8文字セットテーブル
次に、完全に接続された密な層のみを使用してニューラルネットワークをトレーニングし、事前トレーニングされた各モデルの結果を予測しました。その後、結果を平均したところ、結果はかなり悪い結果になりました。
に置き換えることにしました 長短期記憶(LSTM) 入力データが事前にトレーニングされたモデルで変換された5つのフレームのシーケンスである場合のより良い予測のためのニューラルネットワーク。
すべてのモデルの出力をマージするために、幾何平均を使用しました。
魚の検出パイプラインは次のとおりです。
1つのビデオの結果は次のようになります。
コンテスト期間の大部分を前のステージの実装に費やした後、前のステージのモデルを使用して魚の種を特定するために失われた時間を埋め合わせようとしました。
そのための私たちのアプローチはおおまかに次のとおりでした。
魚の長さを決定するために、私たちはニューラルネットワークに使用しました。それらの1つは魚の頭を識別するために訓練され、もう1つは魚の尾を識別するために訓練されました。魚の長さは、2つのニューラルネットワークによって識別された2点間の距離として概算されました。
ステージの全体的なスキームは次のようになりました。
個別の結果を組み合わせる前に、ビデオフレームが上記の段階を通過したため、全体的な設計はかなり単純でした。
シルエット分析は、視覚的に分離されたデータポイントのクラスターを区別できる手法です。
機械学習モデルは、データに関する機械学習アルゴリズムのトレーニングの成果です。このモデルは、後で同様の入力に関連する出力を生成するために使用できます。