ディープラーニング実践ガイド

―クラウド、モバイル、ブラウザ、エッジデバイス向けAIアプリ開発入門

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
616
ISBN
978-4-8144-0028-7
原書
Practical Deep Learning for Cloud, Mobile, and Edge
FORMAT
Print PDF EPUB
Ebook
4,950円
Ebookを購入する
Print
4,950円

本書では、ディープラーニングの研究で受賞歴のある3人の著者が、アイデアを現実世界の人々が使用できるものに変換するプロセスをステップバイステップで丁寧に解説します。構築するのは、クラウド、モバイル、ブラウザ、エッジデバイス向けの実用的なディープラーニングアプリケーションです。一部の章ではその章で扱うトピックの専門家をゲスト執筆者に迎えてさまざまな手法を解説しているので、読者のニーズにマッチするアプリケーションがきっと見つかるでしょう。対象読者は、ディープラーニングの世界にこれから参入したいソフトウェアエンジニアやベテランのデータサイエンティストから、AIを搭載した独自のアプリを作りたいけれど何から始めればいいのかわからないホビーストまで。

目次

賞賛の声
監訳者まえがき
まえがき

1章 人工知能の概観
    1.1 おわび
    1.2 ここからが本当のイントロダクション
    1.3 AIとは
        1.3.1 きっかけの事例
    1.4 AIの略歴
        1.4.1 エキサイティングな幕開け
        1.4.2 暗黒の日々
        1.4.3 かすかな希望
        1.4.4 まともな使い物になるまで
    1.5 ディープラーニングのソリューションを支える要素
        1.5.1 データセット
        1.5.2 モデルのアーキテクチャー
        1.5.3 フレームワーク
        1.5.4 ハードウェア
    1.6 責任あるAI
        1.6.1 偏見
        1.6.2 説明責任と説明可能性
        1.6.3 再現性
        1.6.4 頑健性
        1.6.5 プライバシー
    1.7 まとめ
    1.8 よくある質問

2章 画像の中にあるもの: Kerasを使った画像の分類
    2.1 Kerasとは
    2.2 画像のカテゴリーの予測
    2.3 モデルの検討
        2.3.1 ImageNetデータセット
        2.3.2 Model Zoo
        2.3.3 クラス活性化マップ
    2.4 まとめ

3章 犬か、猫か: Kerasのコード30行で行う転移学習
    3.1 訓練済みモデルの転用
        3.1.1 畳み込みニューラルネットワークの簡単な解説
        3.1.2 転移学習
        3.1.3 ファインチューニング
        3.1.4 必要とされるファインチューニングの程度
    3.2 Kerasと転移学習による独自分類器の作成
    3.3 データの整理
    3.4 データのパイプラインの組み立て
        3.4.1 クラスの数
        3.4.2 バッチサイズ
    3.5 データの拡張
    3.6 モデルの定義
    3.7 モデルの訓練
        3.7.1 訓練用パラメーターの設定
        3.7.2 訓練の開始
    3.8 モデルのテスト
    3.9 結果の分析
    3.10 参考資料
    3.11 まとめ

4章 逆画像検索エンジンの作成: 埋め込み表現を理解する
    4.1 画像の類似性
    4.2 特徴の抽出
    4.3 類似検索
    4.4 t-SNEによる画像のクラスターの可視化
    4.5 類似検索の速度を向上するための手法
        4.5.1 特徴ベクトルの短縮
        4.5.2 PCAによる特徴の削減
    4.6 近似最近傍探索による類似検索の大規模化対応
        4.6.1 近似最近傍探索のベンチマーク
        4.6.2 ライブラリの選択
        4.6.3 データセットの生成
        4.6.4 総当たり
        4.6.5 Annoy
        4.6.6 NGT
        4.6.7 Faiss
    4.7 ファインチューニングによる精度の向上
        4.7.1 全結合層なしのファインチューニング
    4.8 シャムネットワークによるワンショット顔認証
    4.9 ケーススタディ
        4.9.1 Flickr
        4.9.2 Pinterest
        4.9.3 似ている有名人
        4.9.4 Spotify
        4.9.5 画像のキャプション生成
    4.10 まとめ

5章 予測の初心者もマスターに: 畳み込みニューラルネットワークの精度の最大化
    5.1 欠かせないツール
        5.1.1 TensorFlow Datasets
        5.1.2 TensorBoard
        5.1.3 What-If Tool
        5.1.4 tf-explain
    5.2 機械学習の実験でよく使われるテクニック
        5.2.1 データの調査
        5.2.2 データの分割(訓練、検証、テスト)
        5.2.3 Early Stopping
        5.2.4 再現可能な実験
    5.3 エンドツーエンドのパイプラインの例
        5.3.1 基本的な転移学習のパイプライン
        5.3.2 独自ネットワークのパイプライン
    5.4 ハイパーパラメーターの精度への影響
        5.4.1 転移学習と初めからの訓練の比較
        5.4.2 転移学習でファインチューニングされる層の数による影響
        5.4.3 転移学習でのデータの量の影響
        5.4.4 学習率の変化による影響
        5.4.5 オプティマイザーの影響
        5.4.6 バッチサイズの影響
        5.4.7 画像のサイズ変更の影響
        5.4.8 転移学習での画像の縦横比の影響
    5.5 精度のチューニングを自動化するツール
        5.5.1 Keras Tuner
        5.5.2 AutoAugment
        5.5.3 AutoKeras
    5.6 まとめ

6章 TensorFlowの速度と性能を最大化するチェックリスト
    6.1 GPUの飢餓状態
        6.1.1 nvidia-smi
        6.1.2 TensorFlow ProfilerとTensorBoard
    6.2 チェックリストの使い方
    6.3 性能改善のチェックリスト
        6.3.1 データの準備
        6.3.2 データの読み込み
        6.3.3 データの拡張
        6.3.4 訓練
        6.3.5 推論
    6.4 データの準備
        6.4.1 TFRecordsとして保存する
        6.4.2 入力データのサイズを減らす
        6.4.3 TensorFlow Datasetsを利用する
    6.5 データの読み込み
        6.5.1 tf.dataを利用する
        6.5.2 データを先読みする
        6.5.3 CPUの処理を並列化する
        6.5.4 入出力と処理を並列化する
        6.5.5 非決定的順序付けを有効化する
        6.5.6 データをキャッシュに保持する
        6.5.7 実験的な最適化の機能を有効化する
        6.5.8 パラメーターの値を自動的にチューニングする
    6.6 データの拡張
        6.6.1 拡張にGPUを利用する
    6.7 訓練
        6.7.1 自動混合精度演算を利用する
        6.7.2 バッチサイズを大きくする
        6.7.3 8の倍数を指定する
        6.7.4 最適な学習率を見つける
        6.7.5 tf.functionを利用する
        6.7.6 過学習の後に汎化する
        6.7.7 ハードウェアに最適化されたソフトウェア群を利用する
        6.7.8 CPUの並列スレッド数を最適化する
        6.7.9 より良いハードウェアを利用する
        6.7.10 分散型の訓練を行う
        6.7.11 業界標準のベンチマークを調べる
    6.8 推論
        6.8.1 効率的なモデルを利用する
        6.8.2 モデルを量子化する
        6.8.3 モデルを枝刈りする
        6.8.4 融合演算を利用する
        6.8.5 GPUの持続モードを有効化する
    6.9 まとめ

7章 実践的なツールとヒント
    7.1 インストール
    7.2 訓練
    7.3 モデル
    7.4 データ
    7.5 プライバシー
    7.6 教育や研究
    7.7 最後の質問

8章 コンピュータービジョンのクラウドAPI:15分で作れます
    8.1 視覚的認識APIの全体像
        8.1.1 Clarifai
        8.1.2 Microsoft Cognitive Services
        8.1.3 Google Cloud Vision
        8.1.4 Amazon Rekognition
    8.2 視覚的認識APIの比較
        8.2.1 サービスの提供内容
        8.2.2 コスト
        8.2.3 精度
        8.2.4 バイアス
    8.3 クラウドAPIの使い方
    8.4 カスタムの分類器の訓練
        8.4.1 分類器が満足できる結果を返さない理由
    8.5 カスタムの分類APIの比較
    8.6 クラウドAPIのパフォーマンスチューニング
        8.6.1 縮小によるラベル付けAPIへの影響
        8.6.2 圧縮によるラベル付けAPIへの影響
        8.6.3 圧縮によるOCR APIへの影響
        8.6.4 縮小によるOCR APIへの影響
    8.7 ケーススタディ
        8.7.1 The New York Times
        8.7.2 Uber
        8.7.3 Giphy
        8.7.4 OmniEarth
        8.7.5 Photobucket
        8.7.6 Staples
        8.7.7 InDro Robotics
    8.8 まとめ

9章 TensorFlow ServingとKubeflowを使った、クラウド上でのスケーラブルな推論サービス
    9.1 AIによる予測の全体像
    9.2 Flask:自分でサーバーを作成する
        9.2.1 Flaskを使ったREST APIの作成
        9.2.2 KerasのモデルをFlaskでデプロイする
        9.2.3 Flaskの長所
        9.2.4 Flaskの短所
    9.3 実運用レベルの推論サービスでの要件
        9.3.1 高い可用性
        9.3.2 スケーラビリティ
        9.3.3 低レイテンシー
        9.3.4 地理的可用性
        9.3.5 エラー処理
        9.3.6 監視
        9.3.7 モデルのバージョン管理
        9.3.8 A/Bテスト
        9.3.9 複数の機械学習ライブラリのサポート
    9.4 Google Cloud ML Engine:クラウドAIのマネージド環境
        9.4.1 Cloud ML Engineの長所
        9.4.2 Cloud ML Engineの短所
        9.4.3 分類APIの作成
    9.5 TensorFlow Serving
        9.5.1 インストール
    9.6 Kubeflow
        9.6.1 パイプライン
        9.6.2 Fairing
        9.6.3 インストール
    9.7 価格と性能のバランス
        9.7.1 推論サービスのコスト分析
        9.7.2 自前で用意するソフトウェアスタックのコスト分析
    9.8 まとめ

10章 TensorFlow.jsとml5.jsによるブラウザ上のAI
    10.1 JavaScriptベースの機械学習ライブラリの略史
        10.1.1 ConvNetJS
        10.1.2 Keras.js
        10.1.3 ONNX.js
        10.1.4 TensorFlow.js
    10.2 TensorFlow.js.のアーキテクチャー
    10.3 TensorFlow.jsでの訓練済みモデルの実行
    10.4 ブラウザ向けのモデルの変換
    10.5 ブラウザ上での訓練
        10.5.1 特徴の抽出
        10.5.2 データの収集
        10.5.3 訓練
        10.5.4 GPUの使用状況
    10.6 ml5.js
    10.7 PoseNet
    10.8 pix2pix
    10.9 ベンチマークと実用面での注意点
        10.9.1 モデルのサイズ
        10.9.2 推論の時間
    10.10 ケーススタディ
        10.10.1 Semi-Conductor
        10.10.2 TensorSpace
        10.10.3 Metacar
        10.10.4 Airbnbでの写真の分類
        10.10.5 GAN Lab
    10.11 まとめ

11章 iOS上のCore MLでオブジェクトをリアルタイムに分類する
    11.1 モバイルでのAI開発のライフサイクル
    11.2 Core MLの歴史
    11.3 Core ML以外の選択肢
        11.3.1 TensorFlow Lite
        11.3.2 ML Kit
        11.3.3 Fritz
    11.4 Appleの機械学習アーキテクチャー
        11.4.1 ドメイン固有のフレームワーク
        11.4.2 機械学習フレームワーク
        11.4.3 機械学習モデル高速化のための組み込み
    11.5 リアルタイムにオブジェクトを認識するアプリの作成
    11.6 Core ML向けの変換
        11.6.1 Kerasからの変換
        11.6.2 TensorFlowからの変換
    11.7 モデルの動的なデプロイ
    11.8 デバイス上での訓練
        11.8.1 連合学習(Federated Learning)
    11.9 性能測定
        11.9.1 iPhone上でのモデルのベンチマーク
    11.10 消費電力の測定
        11.10.1 負荷の測定
    11.11 アプリのサイズの削減
        11.11.1 モデルをバンドルしない
        11.11.2 量子化を行う
        11.11.3 Create MLを利用する
    11.12 ケーススタディ
        11.12.1 Magic Sudoku
        11.12.2 Seeing AI
        11.12.3 HomeCourt
        11.12.4 InstaSaberとYoPuppet
    11.13 まとめ

12章 Core MLとCreate MLを使ったiOSアプリNot Hotdog
    12.1 データの収集
        12.1.1 アプローチ1:データセットの探索または自前での作成
        12.1.2 アプローチ2:Chromeブラウザの拡張機能Fatkun
        12.1.3 アプローチ3:Bing Image Search APIを使ったスクレイピング
    12.2 モデルの訓練
        12.2.1 アプローチ1:WebのUIベースのツール
        12.2.2 アプローチ2:Create MLの利用
        12.2.3 アプローチ3:Kerasを使ったファインチューニング
    12.3 Core ML Toolsを使ったモデルの変換
    12.4 iOSアプリのビルド
    12.5 さらなる探求
    12.6 まとめ

13章 食べ物版Shazam:TensorFlow LiteとML Kitで作るAndroidアプリ
    13.1 食べ物分類アプリのライフサイクル
    13.2 TensorFlow Liteの概要
        13.2.1 TensorFlow Liteのアーキテクチャー
    13.3 TensorFlow Lite向けのモデルの変換
    13.4 リアルタイムのオブジェクト認識アプリの開発
    13.5 ML KitとFirebase
        13.5.1 ML Kitを使ったオブジェクトの分類
        13.5.2 ML Kitでのカスタムのモデル
        13.5.3 ホスティングされたモデル
        13.5.4 ホスティングされたモデルのA/Bテスト
        13.5.5 コードへの実験の取り込み
    13.6 iOS上でのTensorFlow Lite
    13.7 パフォーマンスの最適化
        13.7.1 TensorFlow Liteのコンバーターを使った量子化
        13.7.2 TensorFlow Model Optimization Toolkit
    13.8 Fritz
    13.9 モバイルAI開発のサイクルの全体像
        13.9.1 データを収集するには
        13.9.2 データにラベルを付けるには
        13.9.3 モデルを訓練するには
        13.9.4 モデルをモバイル向けに変換するには
        13.9.5 モデルの処理能力を向上するには
        13.9.6 優れたユーザーエクスペリエンスを作成するには
        13.9.7 モデルをユーザーに届けるには
        13.9.8 モデルの成果を判定するには
        13.9.9 モデルの品質を改善するには
        13.9.10 デバイス上のモデルを更新するには
    13.10 アプリの利用を通じたモデルの改善
    13.11 ケーススタディ
        13.11.1 Lose It!
        13.11.2 Pixel 3スマートフォンのポートレートモード
        13.11.3 Alibabaの話者認識
        13.11.4 ML Kitを使った顔の輪郭検出
        13.11.5 YouTube Storiesでのリアルタイムのセグメンテーション
    13.12 まとめ

14章 TensorFlowのオブジェクト検出APIを使った猫発見アプリ
    14.1 コンピュータービジョンを使った作業の種類
        14.1.1 分類
        14.1.2 位置の特定
        14.1.3 検出
        14.1.4 セグメンテーション
    14.2 検出のアプローチ
    14.3 既存のクラウドベースの検出API
    14.4 訓練済みのモデルの再利用
        14.4.1 モデルの入手
        14.4.2 モデルのテスト実行
        14.4.3 デバイスへのデプロイ
    14.5 コードなしで作成するカスタムの検出器
    14.6 オブジェクト検出器の進化
        14.6.1 パフォーマンス上の考慮点
    14.7 オブジェクト検出でのキーワード
        14.7.1 IoU
        14.7.2 mAP
        14.7.3 NMS
    14.8 TensorFlowのオブジェクト検出APIを使った独自モデルの作成
        14.8.1 データの収集
        14.8.2 データへのラベル付け
        14.8.3 データの前処理
    14.9 モデルの内部の確認
        14.9.1 訓練
        14.9.2 モデルの変換
    14.10 画像のセグメンテーション
    14.11 ケーススタディ
        14.11.1 スマート冷蔵庫
        14.11.2 人数のカウント
        14.11.3 Seeing AIでの顔認識
        14.11.4 自動運転車
    14.12 まとめ

15章 Makerになろう:エッジデバイスでの組み込みAI
    15.1 組み込みAIデバイスの現状
        15.1.1 Raspberry Pi
        15.1.2 Intel Movidius NCS
        15.1.3 Google Coral USBアクセラレータ
        15.1.4 NVIDIA Jetson Nano
        15.1.5 FPGAとPYNQ
        15.1.6 Arduino
    15.2 組み込みAIデバイスの定性的比較
    15.3 Raspberry Piを試す
    15.4 Google Coral USBアクセラレータによる高速化
    15.5 NVIDIA Jetson Nanoへの移植
    15.6 各デバイスの性能比較
    15.7 ケーススタディ
        15.7.1 JetBot
        15.7.2 スクワット回数に応じた乗車券の配布
        15.7.3 きゅうり選別器
    15.8 さらなる探求
    15.9 まとめ

16章 Kerasを使ったエンドツーエンドのディープラーニングと、自動運転車のシミュレーション
    16.1 自動運転の略史
    16.2 ディープラーニングと自動運転そしてデータの収集
    16.3 シミュレーション環境でのステアリング操作(自動運転でのHello, World)
        16.3.1 要件とセットアップ
    16.4 データの調査と入手
        16.4.1 関心の対象を特定する
        16.4.2 データの拡張
        16.4.3 データセットの不均衡と運転方法
    16.5 自動運転のモデルの訓練
        16.5.1 運転データのジェネレータ
        16.5.2 モデルの定義
    16.6 自動運転モデルのデプロイ
    16.7 さらなる探求
        16.7.1 データセットの充実
        16.7.2 連続データを使った訓練
        16.7.3 強化学習
    16.8 まとめ

17章 自動運転車を1時間でビルドする:AWS DeepRacerへの強化学習の適用
    17.1 強化学習の概要
    17.2 自動運転車と強化学習
    17.3 DeepRacerを使った実践的な深層強化学習
        17.3.1 強化学習のモデルの組み立て
        17.3.2 手順1:モデルの作成
        17.3.3 手順2:訓練を設定する
        17.3.4 手順3:モデルの訓練
        17.3.5 手順4:モデルの性能を評価する
    17.4 強化学習の実践
        17.4.1 強化学習での学びのしくみ
        17.4.2 強化学習の理論
        17.4.3 AWS DeepRacerの強化学習アルゴリズム
        17.4.4 DeepRacerでの具体例から学ぶ、深層強化学習のまとめ
        17.4.5 手順5:強化学習のモデルの改善
    17.5 AWS DeepRacerの実車を使ったレース
        17.5.1 コースの作成
        17.5.2 カーブ1つのコースのテンプレート
        17.5.3 AWS DeepRacer上でのモデルの実行
        17.5.4 AWS DeepRacerの車を自動運転させる
    17.6 さらなる探求
        17.6.1 DeepRacer League
        17.6.2 AWS DeepRacerの高度な活用
        17.6.3 AI Driving Olympics
        17.6.4 DIY Robocars
        17.6.5 Roborace
    17.7 まとめ

付録A 畳み込みニューラルネットワーク入門
    A.1 機械学習とは
    A.2 パーセプトロン
    A.3 活性化関数
    A.4 ニューラルネットワーク
    A.5 逆伝播
    A.6 ニューラルネットワークの欠点
    A.7 画像分類器に求められる特性
    A.8 畳み込み
    A.9 プーリング
    A.10 CNNの構造
    A.11 さらなる探求

索引

コラム目次
   クリエーターの現場から #01
   画像データについて
   クリエーターの現場から #02
   世界一重要だったコンピュータービジョンの課題
   クリエーターの現場から #03
   クリエーターの現場から #04
   クリエーターの現場から #05
   クリエーターの現場から #06
   クリエーターの現場から #07
   ベンチマークの手法
   クリエーターの現場から #08
   クリエーターの現場から #09
   クリエーターの現場から #10
   クリエーターの現場から #11
   クリエーターの現場から #12
   クリエーターの現場から #13
   SAEによる自動運転レベルの定義
   殿堂入りのロボット
   自動運転業界とシミュレータ
   実世界での自動運転車向けの、エンドツーエンドのディープラーニング
   クリエーターの現場から #14
   シミュレーションと現実との違いがもたらす問題(sim2real)
   クリエーターの現場から #15