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

ブログ    

推薦する

ヘルスケアにおける自然言語処理 (NLP) の 8 つの例

翻訳者 | 夏東偉校正 | 梁哲、孫淑娟医療においては、データは患者の健康記録、医師の指示、処方箋か...

教育省:100 以上の AI 専門専攻を構築し、500 万人の AI 人材のギャップを埋めます。

AIが再び国家の議題に!教育部は、「国務院による新世代人工知能発展計画の公布に関する通知」を実施し...

サポートベクターマシンを使用して非線形データセットを学習する方法

サポートベクターマシン (SVM) [[326874]]サポート ベクター マシンとは何ですか? サ...

視覚化: 画像のテーマカラーを抽出するアルゴリズムは高度すぎませんか?

この論文は浙江大学CAD&CG国家重点実験室の視覚化と視覚分析グループが特別にまとめたもので...

...

未来は人工知能の時代であり、さらに Python の時代です。

Python はますます人気が高まっています。近年の Python の人気は、人工知能や機械学習と...

無料の機械学習ベンチマークツール:主要なデータセットを統合し、GitHubに接続して使用する

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

機械学習を独学で学んだら、どうやって仕事を見つければいいのでしょうか?少なくともトップ10の地雷原は避ける

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

新しいソフトロボット:手足を再生し、自然にカモフラージュできるヒトデ

Science Fiction Network は 1 月 5 日に報じました (Liu Yazhu...

Reddit で強く推奨: 20 時間の体系的なディープラーニングと強化学習コース | 無料

[[383847]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

技術革新は「プロトタイプ」で止まるわけにはいかない…

[[270666]] [51CTO.com クイック翻訳] 昨今、クラウドコンピューティング、ブロ...

OpenAIのスーパーアライメントチームの取り組み

今年11月17日、OpenAIのCEOサム・アルトマン氏は主任科学者イリヤ・スツケヴァー氏によるクー...

2021 年のトップ 12 AI ツールとフレームワーク

AI トレンドがあらゆるところで広がる 2021 年を迎える準備はできていますか? ここでは、202...

Python 転移学習: 機械学習アルゴリズム

機械学習は、非常に幅広い領域をカバーする人工知能の人気のあるサブフィールドです。その人気の理由の 1...

...