TensorFlow2を使用して細胞画像が感染しているかどうかを判断する方法を教えます

TensorFlow2を使用して細胞画像が感染しているかどうかを判断する方法を教えます

[[405128]]

このチュートリアルでは、TensorFlow (Keras API) を使用して、細胞の画像をマラリア感染の有無としてラベル付けするバイナリ分類タスク用のディープラーニング モデルを実装します。

データセットのソース: https://www.kaggle.com/iarunava/cell-images-for-detecting-malaria

データセットには2つのフォルダが含まれています

  • 感染: 13780 枚の画像
  • 感染なし: 13780 枚の画像

合計27558枚の画像。

このデータセットは、NIH の公式ウェブサイトから取得されています: https://ceb.nlm.nih.gov/repositories/malaria-datasets/

環境: Kaggle、Tianchi Lab、Gogole Colab のどれでも OK です。

関連モジュールのインポート

  1. cv2をインポート
  2. テンソルフローをtfとしてインポートする
  3. tensorflow.keras.modelsからSequential をインポートします
  4. tensorflow.keras.layersからDense、Conv2D、MaxPool2D、Flatten、Activation をインポートします。
  5. sklearn.model_selectionからtrain_test_split をインポートします
  6. numpyをnpとしてインポートする
  7. matplotlib.pyplot をpltとしてインポートします。
  8. インポートグロブ
  9. インポートOS

形状の異なる画像データの場合、画像の前処理を実行するために OpenCV が必要です。

画像を numpy 配列 (デジタル形式) の形式でグレースケールに変換し、(70x70) の形状にサイズを変更します。

  1. img_dir= "../input/マラリア検出用セルイメージ/cell_images"    
  2. 画像サイズ=70
  3. def load_img_data(パス):
  4. # データをシャッフルする
  5. image_files = glob.glob(os.path.join (path, "Parasitized/*.png" ) ) + \
  6. glob.glob(os.path.join (path, "Uninfected/*.png" ) )
  7. x, y = [], []
  8. image_files内のimage_fileの場合:
  9. #感染していないタグには0 感染しているタグには1 という名前を付けます
  10. 「感染していない」場合はラベル = 0   image_file内、それ以外は1
  11. #画像グレースケール読み込む
  12. img_arr = cv2.imread(画像ファイル、cv2.IMREAD_GRAYSCALE)
  13. # 画像のサイズを(70x70)変更します
  14. img_resized = cv2.resize(img_arr, (img_size, img_size))
  15. X.append(画像のサイズを変更)
  16. y.append(ラベル)
  17. X, yを返す
  18. X, y = load_img_data(img_dir)

Xの形を確認してください。

  1. 印刷(X.shape)

X の形状は (27558, 70, 70, 1) です。ここで、27558 は画像データを表し、70*70 はピクセル単位の画像の長さと幅を表します。

さらに、ネットワークの収束を早めるには、データを正規化する必要があります。 sklearn にはいくつかのスケーリング方法があります。たとえば、次のとおりです。

ここで 255 で割るのは、ピクセルが持つことができる最大値が 255 であるためで、スケーリングが適用されると、ピクセルの範囲は 0 から 1 の間になります。

  1. X, y = load_img_data(img_dir)
  2. # (n_samples, 70, 70, 1)再形成します ( NN に適合させるため)
  3. X = np.array(X).reshape(-1, 画像サイズ, 画像サイズ, 1)
  4. #ピクセルを[0, 255]から[0, 1]にスケーリングすると、ニューラルネットワークのトレーニングが速くなります
  5. バツ = バツ / 255
  6.  
  7. # データセットをシャッフルして分割する
  8. X_train、X_test、y_train、y_test = train_test_split(X、y、test_size=0.1、stratify=y)
  9. print( "合計トレーニングサンプル数: " , X_train.shape)
  10. print( "検証サンプルの合計数:" , X_test.shape[0])

sklearn の train_test_split() メソッドを使用して、データセットをトレーニング セットとテスト セットに分割します。全体のデータの 10% を使用して後で検証します。

構築されたモデルでは、3 つの畳み込み層を追加し、次に層で構成される完全に接続された密な層である Flatten を追加します。

  1. モデル = シーケンシャル()
  2. モデル。 (Conv2D(64, (3, 3), input_shape=X_train.shape[1:])を追加します
  3. model.add(アクティベーション( "relu" ))
  4. モデルを追加します(MaxPool2D(pool_size=(2, 2)))
  5.  
  6. モデルを追加します(Conv2D(64, (3, 3)))
  7. model.add(アクティベーション( "relu" ))
  8. モデルを追加します(MaxPool2D(pool_size=(2, 2)))
  9.  
  10. モデルを追加します(Conv2D(64, (3, 3)))
  11. model.add(アクティベーション( "relu" ))
  12. モデルを追加します(MaxPool2D(pool_size=(2, 2)))
  13.  
  14. モデルを追加します(Flatten())
  15.  
  16. モデル.add (密(64))
  17. model.add(アクティベーション( "relu" ))
  18.  
  19. モデル.add (密(64))
  20. model.add(アクティベーション( "relu" ))
  21.  
  22. モデル.add (密(1))
  23. model.add(アクティベーション( "シグモイド" ))
  24.  
  25. model.compile(損失= "binary_crossentropy" 、オプティマイザー= "adam" 、メトリック=[ "accuracy" ])
  26. 印刷(モデル.要約())

出力はバイナリ(感染しているか感染していないか)なので、出力層の活性化関数としてシグモイド関数を使用します。

  1. # 10エポック、64バッチサイズモデルをトレーニングします 
  2. model.fit(X_train、np.array(y_train)、バッチサイズ=64、エポック=10、検証分割=0.2)

トレーニング データセットとその検証分割では 94% の精度が達成されました。

次にevaluate()を使用してテストデータセットでモデルを評価します。

  1. 損失、精度 = model.evaluate(X_test, np.array(y_test), verbose=0)
  2. print(f "{len(X_test)} 枚の画像でテストした結果は次のとおりです\n 精度: {accuracy} | 損失: {loss}" )

出力は次のようになります

  1. 2756枚の画像テストした結果は
  2. 精度: 0.9404934644699097 | 損失: 0.1666732281446457

このモデルはテストデータでも94%の精度で正常に動作した。

最後に、モデルを保存して、このすべてを終了します。

  1. モデルを保存( "model.h5" )

【編集者のおすすめ】

  1. Hongmengさん、たとえそれが単なるAndroidシェルだとしても、何が問題なのですか?
  2. Kubernetes が Docker を放棄するのはなぜですか?
  3. 「PPT システム」から現実へ: HarmonyOS、あなたは本当にそれに惹かれますか?
  4. これら 6 つの Python IDE とコード エディターを使用したことがありますか?
  5. Kubernetes の実践: 正常な終了

<<:  マッピングドローンは多くの「ファン」を獲得しており、これらの利点は刺激的です

>>:  AIイノベーションを奨励する100万ドルの賞金:2021 DIGIXグローバルキャンパスAIアルゴリズムエリートコンペティションが開幕

ブログ    
ブログ    
ブログ    

推薦する

機械学習にはどのような数学的基礎が必要ですか?

[[184240]]ここ数か月間、データサイエンスの世界にチャレンジして、機械学習の技術を使って統...

人工知能の未来は人間・機械・環境のシステム知能である

軍事情報は戦争と同様、不確実性の多い霧です。予測不可能で、予測不可能です。現在の人工知能の発展傾向か...

...

マイクロソフト、2023年までに8つの人工知能プロジェクトをオープンソース化へ

著者 | ツァミア・アンサリ企画 | ヤン・ジェンマイクロソフトは、ソフトウェア大手の元CEO、ステ...

機械学習における特徴選択の3つの代替手法

ソレダッド・ガリ翻訳者:趙青棠企画丨孫淑娇、梁策インターネットで「特徴選択」を検索してみると、特徴選...

MITのロボット犬がまた進化しました。砂利や氷の上でも滑らずに走れます。今回は本当に犬と同じくらい安定しています

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Javaソートアルゴリズムの概要(I):挿入ソート

挿入ソートの基本的な操作は、ソートされた順序付けられたデータにデータを挿入し、それによって番号が 1...

AIによる高齢者介護についてどう思いますか?

2021年の両会期間中、百度の李ロビン会長の「地域社会におけるスマート高齢者ケアの推進を加速し、テ...

データセンターの物理的セキュリティに AI を活用する方法

機械学習と人工知能は、データセンターの問題に対する万能薬として宣伝されてきました。その多くは誇大宣伝...

...

AIキーボード戦士が登場: DeepMindがエージェントのトレーニングを開始、コンピューターを人間のように「操作」

機械が人間のようにコンピューターを使用できる場合、機械は私たちが日常のタスクを完了するのを手助けする...

マイクロソフト、クラウド移行のための企業向けビジネス管理ツールを提供するAIMプログラムを開始

Microsoft は最近、顧客がローカル ERP および CRM アプリケーションをクラウドに移行...

Googleが絵画におけるAI使用の権利を取り戻す、ネットユーザー「DALL・E 2は発売からわずか1ヶ月で時代遅れ?」

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

プログラマーはAIアルゴリズムを使用して3,000匹の新しいポケモンを生成した

「人間は見たことのないものを想像することはできない」ということわざがあります。したがって、ほとんどの...

...