新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

IBM Developer Blog

IBM Developer サイトで最新の出来事をフォローし、情報を入手しましょう。

SacHacks 2020 ハッカソンに参加した学生たちが作成した、ソーシャル・グッド・プロジェクトを紹介します。


このブログ記事では、最近開催された SacHacks 2020 に参加した学生のグループが作成したソーシャル・グッド・プロジェクトについて詳しく見ていきます。SacHacks 2020 は、IBM が協賛している大学生を対象としたハッカソンです。

カリフォルニア大学デービス校で学ぶ Christina Huang、Kavihesha Kanagalingam、Thomas Munduchira と、カリフォルニア大学バークレー校で学ぶ Asim Biswal のメンバーからなる私たちチームは、SacHacks 2020 で週末の 2 日間をかけて Unfeel the Burn を作成しました。この深層学習プラットフォームは IBM Z を利用して火傷の画像を分類し、治療方法を提案するというものです。不幸なことに、世界中の何千もの人々が皮膚の火傷を正しく処置していないことから、感染、低体温症、熱傷創浮腫、蜂巣炎を発症する場合があります。火傷を適切に処置しなければ、敗血症や死に至る可能性さえあります。私たちが大学生対象のハッカソンで作成したプラットフォームを使用すれば、誰もが火傷の正しい処置方法を簡単に理解し、悪化を防ぐことができます。嬉しいことに、この作品は IBM Z 部門では最優秀賞を受賞し、総合部門では第 3 位を獲得しました。このブログ記事では、最初のアイデアを考え出すところから、自分たちの構想を基に IBM Z を利用してプラットフォーム全体を機能させるところまで、ハッカソンで過ごした 24 時間の一部始終を詳しく説明します。

ハッカソンが始まるまで、4 人全員で集まったことはなかったので、何を達成したいかについて決まった目標はありませんでした。しかも、私たちの専攻分野はコンピューター・サイエンス、電子工学、統計といった具合に比較的多様性があります。このことから、どのようなプロジェクトに仕上げるかについては数えきれないほどの可能性がありましたが、医療とソーシャル・グッドを中心とした取り組みを追及するということで合意しました。また、ハッカソンの開催中に行われた IBM Z テクニカル・ワークショップで、このプラットフォームをベースに機械学習ワークロードを実行するのがいかに簡単であるかを知ったことも、プロジェクトのアイデアに大きく影響しました。

図 1. IBM Z テクニカル・ワークショップでプロジェクトのアイデアをブレーンストーミングするチーム

IBM Z テクニカル・ワークショップでプロジェクトのアイデアをブレーンストーミングするチームの写真

その後、チームで少し協議して最終的な構想に落ち着きました。ユーザーが火傷の画像をアップロードすると、火傷の重症度に関する診断 (浅達性熱傷 / I 度 (浅達性) / II 度 (深達性) / III 度) と、推奨される治療方法を取得できる公開 Web アプリケーションを作成するという構想です。

初っ端から、いくつかの課題に直面しました。その 1 つは、アクセス可能な火傷のデータセットがないことです。そのため、手作業で画像にラベル付けできるように火傷の分類方法を自分たちで学習し、Web から画像を集めてデータセットをコンパイルしました。テクニカル・ワークショップで私たちが使用できるようにサンドボックス化された IBM Z システムには保存容量に制約があり、TensorFlow などの機械学習モジュールがイントールされていないことも課題となりました。さらに、このトライアル・システムは、画像分類用の深層学習モデルをトレーニングするという集中的ワークロードの使用ケースに対応するものではなく、教育目的で作成されたものです。私たちはこれらの課題を克服するために、100 MB のローカル・ストレージに収まるように画像のサイズを変更し、scikit-learn モジュールによる深層学習を活用することにしました。

そこから先はすべてが順序に進み、画像を分類するために Jupyter Notebook で Python コードを実行して、完結合アーキテクチャーのニューラル・ネットワークをトレーニングできるようになりました。このセットアップにより、テストで精度 45 パーセントを実現することができました。

全結合ニューラル・ネットワーク:

  • トレーニングでの精度: 72%
  • テストでの精度: 45%

scikit-learn では畳み込みニューラル・ネットワークを実行できませんでしたが、サンドボックス化された IBM Z 環境外部で、Keras を使用して畳み込みアーキテクチャーをテストした結果、精度 68 パーセントを達成できました。

畳み込みニューラル・ネットワーク:

  • トレーニングでの精度: 86%
  • テストでの精度: 68%

これだけの精度スコアを達成できたことには、画像処理で行った作業が大きく貢献しています。つまり、内容を意識したサイズ変更や前景抽出などの手法を使用して、画像データをフィルタリングしやすくするとともに、分類タスクを容易にしたのです。

図 2 の 2 枚の写真は、内容を意識したサイズ変更の利点を説明しています。元の画像を処理しやすいサイズにトリミングする一方、重要な側面は残します。つまり、城に変更を加えないことはもとより、サイズを変更しても左側の人物は画像に残します。

図 2. 内容を意識したサイズ変更

内容を意識したサイズ変更を説明する図

図 3 は、前景抽出処理で画像の背景にあるノイズを除去する仕組みを説明しています。

図 3. 前景抽出処理

前景抽出処理を説明する図

トレーニングが完了した後、モデルを IBM Z 環境からエクスポートして、IBM Cloud Foundry 上で実行されている Flask バックエンドに接続しました。クライアントはこのバックエンドと対話して、火傷の画像を送信します。すると、トレーニング済みモデルに対してクエリーが実行され、分析結果が返されます。ユーザーには明確な診断と治療手順が説明されます。

以下のコード・リスティングに、このモデルを IBM Z 上でトレーニングし、続いてバックエンドに移動した方法が示されています。舞台裏でどのような処理が行われているのかを確認するには、ソース・コード・リポジトリー内にあるコードをご覧ください。

# Training the model on IBM Z.
from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier(...)
classifier.fit(X, y)

# Exporting the trained model.
import pickle
model_file = open('model.py', 'wb')
pickle.dump(classifier, model_file)

# Importing the model and using it for classification on the backend.
model_file = open('model.py', 'rb')
classifier = pickle.load(model_file)
prediction = classifier.predict(img)

完全なテクノロジー・スタックは図 4 に示すとおりです。これを見るとわかるように、モデルのトレーニングとクエリーを行う前に、OpenCV と scikit-image を使用して画像データを前処理します。IBM Z 環境内で scikit-learn FCNN モデルをトレーニングした後、モデルをシリアライズしてから、バックエンドで使用できるようにエクスポートします。Flask バックエンドは、モデルを使用して画像のクエリーを実行し、クライアントに予測を返すように構成しました。Bootstrap でフォーマット設定した UI は、モバイルとデスクトップに反応し、最適なユーザー・エクスペリエンスを提供するようになっています。

図 4. テクノロジー・スタック

テクノロジー・スタックを示す図

わずか 24 時間ちょっとでプロジェクトを完成させたので、現在のプロトタイプの精度と使いやすさを改善するためのステップはまだ残されています。何よりもまず、使用しているデータセットを大幅に拡大して、多様なデータで火傷の場所、大きさ、皮膚の色合いなどが考慮されるようにする必要があります。トレーニング・データを補完して、モデルのパフォーマンスを向上させるには、既存のデータセットに対して変換を適用し、画像を増補するのも有効な手段でしょう。エアギャップされた環境から本格的な IBM Z システムに移行すれば、IBM Z をリクエスト・パイプラインの一部として統合して、モデルに対するクエリーを直接実行できるようになります。

図 5. 閉会式で IBM Z チームから最優秀賞を授与されました!

閉会式で IBM Z チームから最優秀賞を授与されたチームの写真

SacHacks 2020 での IBM Z チームの存在に深く感謝しています。私たちのような開発者が IBM Z プラットフォームを利用して、社会を良くするためのソリューションを作成できるようにしてくれたからです。IBM Z をベースに機械学習ワークロードを準備して実行することで、能率的に作業することができました。将来の計算ニーズにも、ぜひこのプラットフォームを使用したいと思います。