コンピューター ビジョン モデルのパフォーマンスが低下する理由は、アーキテクチャ設計上の欠陥、代表的でないデータセット、ハイパーパラメータの選択の誤りなど、数多くあります。しかし、見落とされがちな非常に単純な理由があります。それは、画像の向きです。機械学習の専門家 Adam Geitgey 氏は最近、この単純だが多くの人にとって頭の痛い問題を調査した記事を公開し、この問題を解決するために作成した自動画像回転プログラムを共有しました。 私は、物体認識システムや顔認識プロジェクトなど、コンピューター ビジョンと機械学習のプロジェクトについて多くの記事を書いてきました。私は、GitHub で最も人気のある機械学習ライブラリのトップ 10 に入るオープンソースの Python 顔認識ソフトウェア ライブラリを持っています。これは、Python やコンピューター ビジョンを初めて使用する人から頻繁に質問を受けることも意味します。 私の経験では、他の何よりも人々を苛立たせる技術的な問題が 1 つあります。それは、複雑な理論や高価な GPU ではありません。私たちのほとんどが横向きで画像を記憶していること、そしてコンピューターが横向きの画像内の物体や顔を検出するのがあまり得意ではないことに、ほとんどの人が気づいていません。 デジタルカメラで画像を自動的に回転させる方法 写真を撮るとき、カメラはあなたがどの方向に傾いているかを感知します。別のプログラムで写真を表示すると、正しい向きで表示されます。 厄介なのは、カメラがディスクに保存するファイル内の画像データを実際には回転させないということです。デジタルカメラの画像センサーはラインごとに読み取られるため、最終的には連続したピクセル情報ストリームに組み立てられます。これにより、カメラのポーズに関係なくピクセル データが常に同じ順序で保存されるため、カメラがピクセル データを保存しやすくなります。 実際、写真を正しい向きで表示できるかどうかは、画像ビューア アプリケーション次第です。カメラは画像データとともに、カメラの設定、位置データ、そしてもちろんカメラの回転角度など、各写真に関するメタデータも保存します。画像ビューアは、この情報を使用して画像を正しく表示する必要があります。 Orientation データ要素に注意してください。これは、画像を画面に表示する前に、画像を時計回りに 90 度回転するように画像ビューア プログラムに指示します。プログラムがこれを忘れると、画像は横向きに表示されます。 多くの Python コンピューター ビジョン アプリケーションのパフォーマンスが低下するのはなぜでしょうか? Exif メタデータは、jpeg ファイル形式のネイティブな部分ではありません。 TIFF ファイル形式でこのメタデータが使用された後、JPEG ファイル形式でこのメタデータが追加されました。これにより、旧世代の画像ビューアとの下位互換性が維持されますが、一部のプログラムでは Exif データを解析しないという問題も生じます。 numpy、scipy、TensorFlow、Keras など、画像データを扱うためのほとんどの Python ライブラリは、汎用的なデータ配列を扱う人々のための科学的なツールであると考えられています。そのため、現在のすべてのカメラで写真を撮るためにこの機能が必要であるにもかかわらず、彼らは「画像の自動回転」のような消費者レベルの問題を気にしません。 これは、Python ライブラリを使用して画像を読み込むと、回転されていない元の画像データが取得されることを意味します。では、横向きまたは上下逆さまの画像を顔認識モデルまたは物体検出モデルに入力すると何が起こると思いますか?誤ったデータを提供したため、検出器は失敗します。 この問題は初心者や学生が書いた Python スクリプトに限定されると思われるかもしれませんが、そうではありません。 Google の主力製品である Vision API デモでも、Exif の方向を正しく処理できません。 Google の Vision API デモでは、モバイルでキャプチャされた標準的なポートレート画像を回転できません。 Google の視覚技術は、横から撮影した画像の中にいくつかの動物がいることを正常に検出しましたが、特定できない「動物」というラベルしか付与しませんでした。これは、モデルにとって、前を向いているガチョウを検出するよりも、横を向いているガチョウを検出する方がはるかに難しいためです。入力する前に正しく回転させると、Google Vision API は次の結果を生成します。 画像の向きが正しい場合、Google の検出はより具体的になります。つまり、「ガチョウ」というラベルが正しく付けられるだけでなく、信頼スコアも大幅に高くなり、はるかに優れた結果となります。 Mac の Finder では常に Exif 回転が適用された画像が表示されるため、ファイル内の画像データが実際に横向きになっているかどうかはわかりません。 これにより、使用していたオープンソース プロジェクトが機能しなかった、またはモデルの精度が不十分だったという問題が GitHub に報告されることが必然的に発生します。しかし、問題の本質は非常に単純です。画像を横向き、あるいは上下逆さまに入力しているのです。 この問題を解決する 解決策は、Python プログラムで画像を読み込むたびに Exif 方向メタデータ チェックを実行し、必要に応じて画像を回転させることです。実行するのは簡単ですが、すべての方向で回転を正しく実行するサンプル コードをオンラインで見つけるのは困難です。 以下は、NumPy 配列に読み込む前に、任意の画像に正しい向きを適用するコードです。
その後、この画像データの配列を、Keras や TensorFlow など、必要なすべての標準 Python 機械学習ライブラリに渡すことができます。 この問題は非常によくあるため、image_to_numpy という pip ライブラリを作成しました。これは次のようにインストールできます。
これを任意の Python プログラムで使用して、適切な画像の読み込みを実装できます。次に例を示します。
|
>>: 中国語からSQLへの自動変換精度92%、このKaggleマスターが世界記録を更新
[51CTO.com クイック翻訳]画像セグメンテーションは、画像内のオブジェクトの境界と領域を決定...
屈原・漁夫のアルゴリズムの追求を分析する前に、「漁夫」の原文を見てみましょう。屈原は流刑になった後、...
AI によって人々の働き方が変化する中、企業は従業員が自動化された職場環境に能力を適応できるように支...
かつての共同研究者であるジェフリー・ヒントン氏とヨシュア・ベンジオ氏がAIの絶滅を宣言したとき、ルカ...
COVID-19パンデミックは、医療研修に課題と機会をもたらしています。遠隔学習技術は、さまざまな分...
九寨溝マグニチュード7.0の地震、ロボット記者が25秒間で540語と写真4枚を執筆!人間記者、揺れて...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...