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

推薦する

PyTorch がなぜ人気があるのでしょうか?創業者スーミスが成長の秘訣を語る

PyTorch は、ディープラーニング分野で最も人気のあるフレームワークの 1 つです。最初のバージ...

データマイニングの専門家がプログラムアルゴリズムを使って人生の選択をする

[[118153]]毎年、就職活動の時期になると、どうやって内定を選んだらいいのか、テンセントに行く...

人工知能によって人々の仕事が失われることは確実だが、仕事がなくなることはないと言われているのはなぜでしょうか。

1956年に人工知能の概念が提案されて以来、人工知能と労働市場の関係については議論されてきました。...

より良いAIでより良い社会を築く

人工知能 (AI) には、従来のエンジニアリング システムからヘルスケア、芸術やエンターテイメントの...

AIイノベーションセンタートラックのリーディングカンパニー:智源匯が成都のスマート鉄道輸送の構築を支援

9月1日、成都地下鉄全線で「スマート旅客サービスプラットフォーム」がオンラインで開始されました。この...

誰でも使えるディープラーニング: 3 つの主要な自動化ディープラーニング プラットフォームの紹介

ディープラーニング技術は複雑で、ゼロから開発するのが難しい場合が多いですが、Microsoft の ...

...

...

...

ZTouch、AIを活用して広告効果を高めるデジタル広告プラットフォーム「Darwin」をリリース

2021年5月20日、北京中良プロトンネットワーク情報技術有限公司傘下の企業向けデジタルサービスプラ...

調査レポート:2021年の人工知能開発動向予測

人工知能は、幅広い議論を巻き起こすだけでなく、人々に未来への無限の夢を抱かせるようなさまざまなテクノ...

...

ArmとHuaweiが参入し、自動運転チップの戦いでどちらが勝つかは分からない

今年、自動運転はまだ大規模な商用化には至っていないが、利益の偏在により廃業する企業、継続が困難となり...

...