apeescape2.com
  • メイン
  • 分散チーム
  • その他
  • アジャイルタレント
  • 仕事の未来
技術

機械学習ビデオ分析:魚の識別

コンテストは、機械学習スキルをレベルアップするための優れた方法です。質の高いデータセットにアクセスできるだけでなく、明確な目標も与えられます。これにより、目前の問題に対する高品質のソリューションを設計するという重要な部分に集中できます。

私と私の友人は最近参加しました N + 1魚、N +2魚 コンペ。多くの画像処理を伴うこの機械学習コンテストでは、識別、測定、保管、または海に投げ戻される魚のビデオクリップを処理する必要があります。

魚の識別と測定に使用される機械学習の抽象的な画像



この記事では、標準の画像処理技術と事前にトレーニングされたニューラルネットワークモデルを使用して、競合他社から問題にどのように取り組んだかについて説明します。提出されたソリューションのパフォーマンスは、特定の式に基づいて測定されました。私たちのソリューションで、なんとか11位を獲得しました。

機械学習の簡単な紹介については、以下を参照してください。 この記事 。

コンテストについて

各セグメントの1つまたは複数の魚のビデオが提供されました。これらのビデオは、メイン湾で底魚を釣るさまざまなボートで撮影されました。

ビデオは、定規を見下ろすように配置された固定位置カメラから収集されました。魚は定規の上に置かれ、漁師は定規から手を離し、次に漁師は種とサイズに基づいて魚を捨てるか、または保管します。

プロジェクトからのサンプルビデオクリップ

パフォーマンスメトリック

このプロジェクトにとって重要な3つのタスクがありました。最終的な目標は、ビデオファイルの注釈を自動的に生成するアルゴリズムを作成することでした。注釈は次のもので構成されています。

  • 現れる魚のシーケンス
  • ビデオに登場する各魚の種
  • ビデオに登場する各魚の長さ

コンテストの主催者は、これらすべてのタスクのパフォーマンスの一般的な感覚を与える集約されたメトリックを作成しました。メトリックは、各タスクの個々のメトリックの単純な加重の組み合わせでした。特定の重みがありましたが、すべてのタスクに貢献できる、バランスの取れたアルゴリズムに焦点を当てることを推奨しました。

個々のタスクのパフォーマンスメトリックから全体的なパフォーマンスメトリックがどのように計算されるかについて詳しくは、 公式大会ウェブページ 。

機械学習ソリューションの設計

で作業するとき 機械学習 写真やビデオを扱うプロジェクトでは、おそらく使用するでしょう 畳み込みニューラルネットワーク 。しかし、畳み込みニューラルネットワークを使用する前に、フレームを前処理し、さまざまな戦略を通じて他のいくつかのサブタスクを解決する必要がありました。

トレーニングには、1つのnVidia 1080TiGPUを使用しました。競合他社との関連性を維持するためにコードを最適化しようとすると、かなりの時間が失われました。しかし、私たちは、それがもっと重要だったであろう場所に費やす時間を減らすことになりました。

ステージ0:ユニークなボートの数を見つける

シルエット分析では、ボートの数を見つけることはかなり簡単な作業になりました。手順は次のとおりで、いくつかの非常に標準的な手法を活用しました。

  1. 各ビデオからランダムなフレームを取得します。
  2. 統計を計算し、 堅牢な機能の高速化(SURF) 画像ごとに。
  3. 使用する シルエット分析 K-meansクラスタリングの場合、ボートの数を見つけることができます。

SURFは、画像内の関心のあるポイントを検出し、機能の説明を生成します。このアプローチは、さまざまな画像変換を使用しても、非常に堅牢です。

画像内の関心のあるポイントの特徴がわかると、K-meansクラスタリングが実行され、続いてシルエット分析が実行されて、画像内のボートのおおよその数が決定されます。

ステージ1:繰り返されるフレームの識別

データセットには個別のビデオファイルが含まれていましたが、各ビデオはデータセット内の他のビデオと一部重複しているように見えました。これは、ビデオが1つの長いビデオから分割され、各ビデオの開始または終了にいくつかの共通フレームが含まれるようになったことが原因である可能性があります。

一般的なフレームのグラフィック表現

このようなフレームを識別し、必要に応じて削除するために、フレームでいくつかのクイックハッシュ関数を使用しました。

ステージ2:定規を見つける

いくつかの標準的な画像処理方法を適用することにより、定規の位置と方向を特定しました。次に、画像を回転およびトリミングして、すべてのフレームで一貫した方法で定規を配置しました。これにより、フレームサイズを10分の1に縮小することもできました。

検出された定規(平均フレームにプロット):

ルーラー検出プロセスの視覚的描写

トリミングおよび回転された領域:

トリミングされた定規の写真

ステージ3:魚の順序を決定する

魚の順序を決定するためにこの段階を実装することは、この競技中に私の時間の大部分を要しました。新しい畳み込みニューラルネットワークのトレーニングは費用がかかりすぎるように思われたため、事前にトレーニングされたニューラルネットワークを使用することにしました。

このために、次のニューラルネットワークを選択しました。

  • VGG16
  • VGG19
  • ResNet50
  • Xception
  • InceptionV3

これらのニューラルネットワークモデルは、 ImageNetデータセット 。

モデルの畳み込み層のみを抽出し、それらを競合データセットに渡しました。出力では、かなりコンパクトな機能の配列がありました。

utf8文字セットテーブル

次に、完全に接続された密な層のみを使用してニューラルネットワークをトレーニングし、事前トレーニングされた各モデルの結果を予測しました。その後、結果を平均したところ、結果はかなり悪い結果になりました。

に置き換えることにしました 長短期記憶(LSTM) 入力データが事前にトレーニングされたモデルで変換された5つのフレームのシーケンスである場合のより良い予測のためのニューラルネットワーク。

すべてのモデルの出力をマージするために、幾何平均を使用しました。

魚の検出パイプラインは次のとおりです。

  1. 事前にトレーニングされたモデルを使用して機能を生成します。
  2. 密なニューラルネットワークで魚が出現する確率を予測します。
  3. 事前にトレーニングされたモデルを使用してLSTM機能を生成します。
  4. LSTMニューラルネットワークで魚が出現する確率を予測します。
  5. 幾何平均を使用してモデルをマージします。

1つのビデオの結果は次のようになります。

x軸にフレームインデックス、y軸に確率をグラフに示したサンプルの魚の検出結果

ステージ4:魚の種を特定する

コンテスト期間の大部分を前のステージの実装に費やした後、前のステージのモデルを使用して魚の種を特定するために失われた時間を埋め合わせようとしました。

そのための私たちのアプローチはおおまかに次のとおりでした。

  1. 畳み込み事前トレーニング済みモデルVGG16、VGG19、ResNet50、Xception、InceptionV3層に高密度層を追加します(畳み込み層の重みは固定されています)。
  2. 小さな画像拡張でモデルをトレーニングします。
  3. 各モデルで種を予測します。
  4. 投票してモデルを統合します。

ステージ5:魚の長さを検出する

魚の長さを決定するために、私たちはニューラルネットワークに使用しました。それらの1つは魚の頭を識別するために訓練され、もう1つは魚の尾を識別するために訓練されました。魚の長さは、2つのニューラルネットワークによって識別された2点間の距離として概算されました。

魚の頭と尾の距離を示す写真

完全なスキーム

ステージの全体的なスキームは次のようになりました。

完全なスキームを示すフローチャート

個別の結果を組み合わせる前に、ビデオフレームが上記の段階を通過したため、全体的な設計はかなり単純でした。

基本を理解する

シルエット分析とは?

シルエット分析は、視覚的に分離されたデータポイントのクラスターを区別できる手法です。

機械学習モデルとは何ですか?

機械学習モデルは、データに関する機械学習アルゴリズムのトレーニングの成果です。このモデルは、後で同様の入力に関連する出力を生成するために使用できます。

GoogleCloudを使用したサーバーレスNode.js関数の実装

バックエンド

GoogleCloudを使用したサーバーレスNode.js関数の実装
ブラウザからウェブサイトのデザインプロセスにアプローチする

ブラウザからウェブサイトのデザインプロセスにアプローチする

Uiデザイン

人気の投稿
WebRTCアプリケーションを構築する1年:スタートアップエンジニアリングの教訓
WebRTCアプリケーションを構築する1年:スタートアップエンジニアリングの教訓
PHPメモリ内のオブジェクトと参照の概要
PHPメモリ内のオブジェクトと参照の概要
AngularJSからReactに切り替えた理由
AngularJSからReactに切り替えた理由
すべてのデザイナーが聞くべき13のポッドキャスト
すべてのデザイナーが聞くべき13のポッドキャスト
Laravelゼロダウンタイム展開
Laravelゼロダウンタイム展開
 
Unity with MVC:ゲーム開発をレベルアップする方法
Unity with MVC:ゲーム開発をレベルアップする方法
プロスポーツフランチャイズ評価
プロスポーツフランチャイズ評価
小さなデータ、大きな機会
小さなデータ、大きな機会
マイクロインタラクションによるより良いUX
マイクロインタラクションによるより良いUX
ネットプロモータースコアが十分ではありません:ユーザー調査が必要です
ネットプロモータースコアが十分ではありません:ユーザー調査が必要です
人気の投稿
  • コンサルティングビジネスのためのクライアントを取得する方法
  • c ++は行うことによって学ぶ
  • 請負業者のレートを計算する方法
  • ui / uxデザインポートフォリオ
  • 機械学習プログラムの作り方
カテゴリー
設計プロセス ブランドデザイン 人とチーム リモートの台頭 バックエンド ツールとチュートリアル ライフスタイル 技術 分散チーム Uxデザイン

© 2021 | 全著作権所有

apeescape2.com