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

ブログ    
ブログ    

推薦する

小売業における人工知能:生き残りは賢くなることにかかっている

機械学習は、ビジネスを急速に成長させたい小売業者にとって急速に必要不可欠なものになりつつありますが、...

ブロックチェーンは人工知能をどのように変えるのでしょうか?

人工知能とブロックチェーンは、現在人気が高まっている2つの人気産業です。 2つの技術は異なり、商業的...

モデルA: おかげさまで0点にならずに済みました。モデルB: 私も同じです。

多種多様なレゴブロックを一つずつ積み重ねて、あらゆる種類の本物そっくりのキャラクターや風景などを作成...

ビル・ゲイツ氏:AIはリスクがあるが管理可能であり、PCの出現に匹敵する「最も変革的なイノベーション」である

ビル・ゲイツ氏は7月12日、米国現地時間7月11日に自身のブログに記事を掲載し、人工知能の現在の発展...

TF Learn: Scikit-learn と TensorFlow をベースにしたディープラーニング ツール

[51CTO.comより引用] 海外のデータサイエンス市場に詳しい人なら誰でも、2017年に海外のデ...

2020年の世界スマート街灯市場の現状と発展見通しの分析

Technavioが発表した「世界のスマートポール市場2020-2024」レポートデータによると、2...

ドジャースが勝利! AIが野球ワールドシリーズの意思決定プロセスを支配

ドジャースのファンは、チームが再びワールドシリーズで優勝するのを見るために32年間待ち続けた。野球は...

GPT-4はバードに追い抜かれても納得せず、最新モデルが市場に投入された

「ビッグモデル予選コンペティション」チャットボット アリーナの公式リストが更新されました: Goog...

上海の疫病対策において人工知能は何を果たしたのか?

4月8日、「上海デジタル変革リーディンググループオフィス」が主導し、上海スマートシティ発展研究所が...

...

...

...

危険すぎる。Google は過去 12 年間、いまだにこれを公表しようとしない。

ボビー・アリン編纂者 | Yan Zheng幸いなことに、Google はこの技術を公開しませんでし...

...

K 分割交差検証とグリッドサーチ

みなさんこんにちは、私はZhibinです〜今日は、GridSearch グリッド検索と K 分割相互...