CV モデルが動作しないのはなぜですか?理由がこんなに単純だとは思いませんでした...

CV モデルが動作しないのはなぜですか?理由がこんなに単純だとは思いませんでした...

コンピューター ビジョン モデルのパフォーマンスが低下する理由は、アーキテクチャ設計上の欠陥、代表的でないデータセット、ハイパーパラメータの選択の誤りなど、数多くあります。しかし、見落とされがちな非常に単純な理由があります。それは、画像の向きです。機械学習の専門家 Adam Geitgey 氏は最近、この単純だが多くの人にとって頭の痛い問題を調査した記事を公開し、この問題を解決するために作成した自動画像回転プログラムを共有しました。

私は、物体認識システムや顔認識プロジェクトなど、コンピューター ビジョンと機械学習のプロジェクトについて多くの記事を書いてきました。私は、GitHub で最も人気のある機械学習ライブラリのトップ 10 に入るオープンソースの Python 顔認識ソフトウェア ライブラリを持っています。これは、Python やコンピューター ビジョンを初めて使用する人から頻繁に質問を受けることも意味します。

私の経験では、他の何よりも人々を苛立たせる技術的な問題が 1 つあります。それは、複雑な理論や高価な GPU ではありません。私たちのほとんどが横向きで画像を記憶していること、そしてコンピューターが横向きの画像内の物体や顔を検出するのがあまり得意ではないことに、ほとんどの人が気づいていません。

デジタルカメラで画像を自動的に回転させる方法

写真を撮るとき、カメラはあなたがどの方向に傾いているかを感知します。別のプログラムで写真を表示すると、正しい向きで表示されます。

厄介なのは、カメラがディスクに保存するファイル内の画像データを実際には回転させないということです。デジタルカメラの画像センサーはラインごとに読み取られるため、最終的には連続したピクセル情報ストリームに組み立てられます。これにより、カメラのポーズに関係なくピクセル データが常に同じ順序で保存されるため、カメラがピクセル データを保存しやすくなります。

実際、写真を正しい向きで表示できるかどうかは、画像ビューア アプリケーション次第です。カメラは画像データとともに、カメラの設定、位置データ、そしてもちろんカメラの回転角度など、各写真に関するメタデータも保存します。画像ビューアは、この情報を使用して画像を正しく表示する必要があります。

画像メタデータの最も一般的な形式は Exif (Exchangeable image file format の略) です。 Exif 形式のメタデータは、カメラによって保存された jpeg ファイルに配置されます。この Exif データを画像自体から直接読み取ることはできませんが、読み取り方法を知っている任意のプログラムを使用できます。

以下は、Exiftool を使用して読み取った、上記のガチョウの写真の Exif メタデータです。

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 配列に読み込む前に、任意の画像に正しい向きを適用するコードです。

  1. PIL.Imageをインポートする
  2. PIL.ImageOpsをインポートする
  3. numpyをnpとしてインポートする
  4.   
  5.   
  6. exif_t​​ranspose(画像):
  7. そうでない場合は画像:
  8. 画像を返す
  9.   
  10. exif_orientation_tag = 274   
  11.   
  12. # EXIFデータ確認する(一部のファイルにのみ存在)
  13. hasattr(img, "_getexif" ) かつ isinstance(img._getexif(), dict) かつ exif_orientation_tag が img._getexif() にある場合:
  14. exif_data = img._getexif()
  15. 方向 = exif_data[exif_orientation_tag]
  16.   
  17. # EXIFの向きを処理する
  18. 方向 == 1 の場合:
  19. # 通常の画像 - 何もする必要はありません!
  20. 合格
  21. elif 方向 == 2 :
  22. # 左から右にミラーリング
  23. img = img.transpose(PIL.Image.FLIP_LEFT_RIGHT)
  24. elif 方向 == 3 :
  25. # 180回転
  26. 回転( 180 )
  27. elif 方向 == 4 :
  28. # 上から下にミラーリング
  29. img = img.rotate( 180 ).transpose(PIL.Image.FLIP_LEFT_RIGHT)
  30. elif 方向 == 5 :
  31. # 左上の対角線に沿って反転
  32. img = img.rotate( -90 , expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT) です。
  33. elif 方向 == 6 :
  34. # 90回転
  35. img = img.rotate( -90 , expand=True) で拡大縮小します。
  36. elif 方向 == 7 :
  37. # 右上の対角線に沿って反転
  38. img = img.rotate( 90 , expand=True ).transpose(PIL.Image.FLIP_LEFT_RIGHT)
  39. elif 方向 == 8 :
  40. # 270回転
  41. img = img.rotate( 90 , expand=True)
  42.   
  43. 画像を返す
  44.   
  45.   
  46. def load_image_file(ファイル、モード= 'RGB' ):
  47. # PILで画像を読み込む
  48. img = PIL.Image.open(ファイル)
  49.   
  50. hasattr(PIL.ImageOps, 'exif_t​​ranspose' )の場合:
  51. # 最近のバージョンのPILでは内部的にexit transposeを実行できる
  52. 画像 = PIL.ImageOps.exif_t​​ranspose(画像)
  53. それ以外
  54. # それ以外の場合は、 exifを自分で転置する
  55. 画像 = exif_t​​ranspose(画像)
  56.   
  57. img = img.convert(モード)
  58.   
  59. np.array(画像)を返す

その後、この画像データの配列を、Keras や TensorFlow など、必要なすべての標準 Python 機械学習ライブラリに渡すことができます。

この問題は非常によくあるため、image_to_numpy という pip ライブラリを作成しました。これは次のようにインストールできます。

  1. pip3 インストール image_to_numpy

これを任意の Python プログラムで使用して、適切な画像の読み込みを実装できます。次に例を示します。

  1. matplotlib.pyplot を plt としてインポートします
  2. import image_to_numpy# 画像ファイルを読み込みます
  3. img = image_to_numpy.load_image_file( "my_file.jpg" ) # 画面に表示する(または何でもしたい
  4. plt.imshow(画像)
  5. plt.show()

<<:  機械学習における正規化とはどういう意味ですか?

>>:  中国語からSQLへの自動変換精度92%、このKaggleマスターが世界記録を更新

ブログ    

推薦する

2020年の世界コンサルティング会社の新ランキング:AI時代の新たな課題

[[348678]] 5G、人工知能、ブロックチェーンなどの新技術の継続的な進歩は、あらゆる企業の変...

...

EUはAI法に加えて、GPT-4などの高機能モデルにも追加の規則と制約を追加する予定である。

今週末の12月10日、欧州連合はChatGPTを含む一般的な人工知能システムを対象とする世界初のAI...

Ali Wensheng ビデオが Gen-2 と Pika に挑戦、1280×720 の解像度で圧迫感なし、3500 万のテキスト ビデオ表示効果

ヴィンセントのビデオはどの程度詳細にできますか?最近、アリババの調査により、1280×720 の解像...

人工知能システムにおける不確実性の定量化

翻訳者 | 朱 仙中校正 | 梁哲、孫淑娟まとめ人工知能 (AI) ベースのシステムは大きな可能性を...

インテルのAIが破壊された万里の長城の修復にどのように貢献したか、その背後にある秘密が発見された

人工知能がテクノロジーと人文科学の交差点に到達したとき、どのようなエネルギーが解き放たれるのでしょう...

自動運転のための強化学習:人間主導の経験ベースのアプローチ

[[428302]] 2021年9月26日にarXivにアップロードされた論文「人間のガイダンスによ...

...

ソフトウェア開発における AI と機械学習の応用: 将来の動向と課題

人工知能 (AI) と機械学習 (ML) は、現代のソフトウェア開発の重要な部分になりつつあります。...

自動化によって、採用担当者が大規模な適格な人材を特定する方法

AI ベースの自動化ツールは、候補者データを収集して処理し、候補者の調達、スクリーニング、多様性、そ...

Facebook、MITなどが共同で451ページの原稿を発表:「第一原理」を使ってDNNを説明する」

Facebook、プリンストン大学、MITのAI研究者らは最近、ディープラーニングが実際にどのよう...

従来の銀行は人工知能をどのように活用しているのでしょうか? ——2017年中国国際金融博覧会で光り輝く民生銀行の技術革新に関するメモ

【51CTO記者李玲玲が北京からレポート】先日、「イノベーション主導の着実な変革と共同金融」をテーマ...

人工知能が大人気ですね~最近のAIの応用シナリオは何でしょうか?

人工知能は徐々に私たちの生活に入り込み、さまざまな分野に応用されてきました。AIは私たちの仕事のパー...

パンデミックの中、大量のAIロボットが職務に就いている

2016年、著名な科学ライターでありシリコンバレーの投資家でもある呉軍氏は、大胆に次のように予測しま...

より賢い人工知能が人間に取って代わるのはもうすぐなのでしょうか?

人工知能の発展により、機械ははるかに賢くなりました。コンピュータプログラムさえ設定しておけば、多くの...