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

IBM Developer Blog

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

深層学習アプリケーションに伴う問題を探り、Raspberry Pi 上で深層学習を行うことによって、こうした問題を解決できる理由を説明します。


このブログは 2020 Call for Code Global Challenge を構成するコンテンツです。このブログのレビューと編集に協力してくれた Maureen McElaney に感謝の言葉を贈ります。

この 10 年間にわたり、深層学習モデルによって人々の生活は新しい時代を迎えています。オブジェクト検出や機械翻訳など、これまでは難しかったタスクの多くが、飛躍的な進歩を遂げました。こうした称賛に値する進歩にもかかわらず、深層学習モデルの大半は、今でも強力な中央サーバーへの接続に大きく依存しています。つまり、サーバーとの接続を維持していなければ、深層学習モデルは正常に機能できないということです。ほとんどの場合、外部サーバーに対するこの依存性は問題となりませんが、別の方法を考えなければならないこともあります。

このブログでは、深層学習アプリケーションに伴う問題のいくつかを取り上げ、Raspberry Pi 上で深層学習を行うことによって、こうした問題を解決できる理由を説明します。また、この問題解決に、Model Asset eXchange (MAX) によるオープンソース深層学習モデルを適用する方法もデモします。

プライバシーとデータ・セキュリティー

深層学習モデルを適用するときの第一の問題は、外部サーバーに依存するのが通常であることです。外部サーバー内でのあらゆるアクションは、そのサーバーに明かになってしまいます。サーバーをセキュリティーで保護してデータのプライバシーを守ることも可能であるとは言え、通常、それにはかなりの費用がかかります。しかも、サーバーのセキュリティーを維持するために相当な労力も必要となります。自らのプロジェクトを保守している多くの人々にとっては、そのための時間もリソースもありません。さらに悪いことに、サーバーの保守担当者に悪意があるとしたら、アプリケーションによっては深刻なプライバシーとデータ・セキュリティーの問題を引き起こしかねません。かと言って、データ漏えいから自身のセキュリティーを保護するのは簡単なことではありません。

不安定な接続 (あるいは接続の欠如)

インターネットはいつでも使用できるわけではありません。使用できるとしても、持続的な接続を保証できることはめったにありません。現場で作業する地理学者や船乗りが深層学習モデルを使用してリアルタイムの画像分析を行うとしたら、そのアプリケーションはオフラインの環境でも機能するものでなければなりません。限られた状況では、この問題を回避するために、ブラウザー内で TensorFlow.js を使用するという方法を取れる場合もあります。その興味深い例としては、「Use your arms to make music」を参照してください。

インターネットに接続できる状況であっても、インターネット接続が安定した状態を維持し、常に高速であることに頼るには危険なほど重要なシステムもあります。例えば、救急車で、英語以外の言葉を話す患者の通訳に深層学習モデルを使用するとします。この場合、レイテンシーのないインターネット接続を必要としていると、接続が切断されたときに処置が遅れて人命が犠牲になる恐れがあります。

Raspberry Pi 上で深層学習を試す理由

上述の問題を解決するには、インターネットに接続する必要のない場所で深層学習モデルを実行するという方法を取ることができます。そのような場所の一例が、Raspberry Pi などの小型ボード・デバイスです。実のところ、低速かつ不安定なインターネット接続でも許容されるとしても、クライアント側で、高価な従来のデバイス (携帯電話など) ではなく Raspberry Pi を使用することは大幅な経費節約になります。例えば、各所にセキュリティー・カメラを設置するなどの大規模なデプロイメントのコンテキストは、Raspberry Pi 上での深層学習を適用する候補になります。

Model Asset eXchange

Model Asset eXchange (MAX) では、無料のオープンソース深層学習モデルを提供しています。MAX を使用すれば、データ・サイエンティストや数学者でなくても、無料のオープンソース AI を利用できます。ここには音声分類から画像セグメンテーション、自然言語処理に至るまで、30 を超えるモデルの選択肢が用意されています。Docker ベースのアーキテクチャーを使用していることから、MAX モデルの中には Raspberry Pi 上にデプロイするのに絶好のモデルもあります。

Raspberry Pi 上で MAX Object Detector を実行する

MAX モデルを Raspberry Pi 上で実行する方法を見ていきましょう。一例として、MAX Object Detector を、Raspbian Buster をインストールした Raspberry Pi 4 上で実行します。

  1. Pi 上でターミナルを開きます。
  2. Docker をインストールします

     curl -sSL https://get.docker.com | sh
    
  3. ユーザー「pi」を Docker グループに追加して、通常のユーザーとして Docker を使用できるようにします。

     sudo usermod –aG docker pi
    
  4. ログアウトしてからログインします (または再起動します)。

  5. MAX Object Detector モデルの README で説明している手順に従って、以下のコマンドを実行します。

     docker run -it -p 5000:5000 codait/max-object-detector:arm-arm32v7-latest
    
  6. 最後に以下のようなメッセージが表示されます。

     * Serving Flask app "MAX Object Detector" (lazy loading)
    
     * Environment: production
    
       WARNING: This is a development server. Do not use it in a production deployment.
    
       Use a production WSGI server instead.
    
     * Debug mode: off
    
     * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    
  7. テスト画像をダウンロードします。

     wget https://raw.githubusercontent.com/IBM/MAX-Object-Detector/master/samples/baby-bear.jpg
    
  8. ブラウザーを開いて、http://localhost:5000/app にアクセスします。前のステップでダウンロードした画像を選択してから、「Submit (送信)」をクリックします。オブジェクト検出器が機能していることを確認できます。

    MAX Object Detector ウィンドウのスクリーンショット

    MAX Object Detector ではカメラも使用できます。

    MAX Object Detector の gif

このとおりです!

Raspberry Pi をいろいろと試してください

興味深い使用ケースとしては、ナビゲーション目的のロボットに Pi をインストールしたり、Pi をそのままホーム・セキュリティー・カメラとして使用したりするなどが挙げられます。

他にもオフライン環境内で深層学習を使用するアプリケーションのインスピレーションを得るために、他の MAX モデルを調べてください。MAX 音声分類子 などの一部のモデルでは、すでに Raspberry Pi をサポートするようになっています。他にも Raspberry Pi 上で使用したいモデルがある場合は、遠慮なくリクエストとアイデアを送信してください。