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アルゴリズムエリートコンペティションが開幕

ブログ    
ブログ    

推薦する

自動運転の倫理的ジレンマを解決する: 道徳規範を数式に変換する

暴走列車が線路を走っています。5人が線路に縛られており、列車に轢かれそうになっています。この時点で、...

...

上海交通大学が「人間行動理解エンジン」を発表:AIが超大作映画のあらゆる行動をフレームごとに理解

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

人工知能は私たちの言語を理解するのでしょうか?思っていたよりも強力だ

2016年3月の「人間対機械」は、機械に対する認識を一新した。世界一の囲碁名人イ・セドルが、人工知能...

顔認識を完了するための3行のPythonコード

顔認識パッケージこれは世界で最もシンプルな顔認識ライブラリです。 Python リファレンスまたはコ...

...

ワークスペースデザインの未来: AI、3Dウォークスルー、リアルタイムコラボレーション

過去 10 年間で、スマート AI ツールの導入により、ワークスペースのデザインは完全に変化しました...

AIが高性能鋼材の設計を支援:破壊強度と破壊寿命を正確に予測

機械学習技術は、ヘルスケアから高エネルギー物理学に至るまでのさまざまな分野の進歩を推進しています。現...

アディダスのロボット工場で作られた靴が出荷されようとしている

アディダスがドイツに開設したロボット靴製造工場「スピードファクトリー」が正式に生産を開始したと報じら...

複雑な課題に対するスマートなソリューション: 自動化の成功への道

マッキンゼーの「2022年世界産業用ロボット調査」によると、産業企業は世界的な労働力不足に対処するた...

...

顔認識はどのようにして国民の個人情報を侵害するのでしょうか?犯罪者がアリペイを騙し取るために3D顔モデルを作成

[[360029]]記者 | 趙孟近年、顔認識技術の普及に伴い、国民の個人情報のセキュリティに関する...

GPTとWhisperを使用してパーソナライズされた音声アシスタントを作成する

翻訳者 | 朱 仙中レビュー | Chonglou導入この記事は、ユーザーの好みに合わせてシンプルで...

人工知能は第五の変革をもたらします。あなたはこのチャンスをつかむことができますか?

人工知能の急速な発展は、新しい小売業者に力を与え、小売業界の「人、商品、場所」の要素を効果的に再構築...

...