コンピュータビジョンのための実践機械学習 ―モデルアーキテクチャからMLOpsまで

Book description

機械学習モデルを使用して画像に関するさまざまな課題を解くための実践的な解説書。コンピュータビジョンは機械学習で最も注目度の高い分野のひとつです。本書では、機械学習エンジニアやデータサイエンティストを対象に、コンピュータビジョンに関連する機械学習の手法、アーキテクチャ、課題、運用などを網羅的に解説します。読者は、分類、物体検出、セグメンテーション、異常検知、画像生成、キャプション生成といった画像関連の問題を、機械学習で解決する方法を学びます。また、データセットの作成、前処理、モデルの設計、学習、評価、デプロイ、監視といった標準的な機械学習の運用からMLOpsまで同時にマスターできます。日本語版では、コンピュータビジョン領域でのトランスフォーマーモデルの活用や画像生成の新潮流である拡散モデルについてまとめた特別コラムを追加で収録しました。

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  賞賛の声
  5.  監訳者まえがき
  6.  まえがき
  7.  1章 コンピュータビジョンのための機械学習
  8.   1.1 機械学習
  9.   1.2 ディープラーニングの使用例
  10.   1.3 まとめ
  11.  2章 機械学習モデル
  12.   2.1 機械知覚のためのデータセット
  13.    2.1.1 5-flowersデータセット
  14.      5-flowersデータセットについての注意点
  15.      画像収集作業の標準化
  16.    2.1.2 画像データの読み込み
  17.      テンソルとは何か?
  18.    2.1.3 画像データの可視化
  19.    2.1.4 データセットファイルの読み込み
  20.   2.2 Kerasによる線形モデル
  21.    2.2.1 Kerasモデル
  22.     2.2.1.1 予測関数
  23.      確率、オッズ、ロジット、Sigmoid、Softmax
  24.     2.2.1.2 活性化関数
  25.     2.2.1.3 オプティマイザ
  26.      勾配降下法
  27.     2.2.1.4 学習時の損失
  28.      なぜラベルの表現方法が2つあるのか?
  29.     2.2.1.5 誤差の指標
  30.    2.2.2 モデルの学習
  31.     2.2.2.1 データセットの作成
  32.     2.2.2.2 モデルの作成と表示
  33.     2.2.2.3 モデルのフィッティング
  34.     2.2.2.4 予測値のプロット
  35.      画像回帰
  36.   2.3 Kerasを使ったニューラルネットワーク
  37.    2.3.1 ニューラルネットワーク
  38.     2.3.1.1 隠れ層
  39.     2.3.1.2 ニューラルネットワークの学習
  40.     2.3.1.3 学習率
  41.     2.3.1.4 正則化
  42.     2.3.1.5 早期停止(early stopping)
  43.     2.3.1.6 ハイパーパラメータチューニング
  44.    2.3.2 ディープニューラルネットワーク
  45.     2.3.2.1 DNNの構築
  46.     2.3.2.2 ドロップアウト
  47.     2.3.2.3 バッチ正規化
  48.   2.4 まとめ
  49.   2.5 用語集
  50.  3章 モデルアーキテクチャ
  51.   3.1 学習済みの埋め込み
  52.    3.1.1 学習済みモデル
  53.    3.1.2 転移学習
  54.      Kerasの事前学習済みモデル
  55.    3.1.3 ファインチューニング
  56.     3.1.3.1 学習率スケジューリング
  57.      104 flowersデータセット
  58.   3.2 畳み込みニューラルネットワーク(CNN)
  59.    3.2.1 畳み込みフィルター
  60.      畳み込みフィルターはなぜ機能するのか?
  61.    3.2.2 畳み込み層の積み重ね
  62.    3.2.3 プーリング層
  63.    3.2.4 AlexNet
  64.      AlexNetの概要
  65.   3.3 深さの追求
  66.    3.3.1 フィルターの因数分解
  67.    3.3.2 1×1の畳み込み層
  68.    3.3.3 VGG19
  69.      VGG19の概要
  70.    3.3.4 グローバル平均プーリング
  71.   3.4 モジュールアーキテクチャ
  72.    3.4.1 Inception
  73.      InceptionV3の概要
  74.    3.4.2 SqueezeNet
  75.      SqueezeNetの概要
  76.    3.4.3 ResNetとスキップ接続
  77.      ResNetの概要
  78.    3.4.4 DenseNet
  79.      DenseNetの概要
  80.    3.4.5 分離畳み込み
  81.    3.4.6 Xception
  82.      Xceptionの概要
  83.   3.5 ニューラルアーキテクチャサーチによる設計
  84.    3.5.1 NASNet
  85.      NASNetの概要
  86.    3.5.2 MobileNetファミリー
  87.     3.5.2.1 深さごとの畳み込み
  88.     3.5.2.2 Inverted Residual Bottleneck
  89.     3.5.2.3 MobileNetV2
  90.      MobileNetV2の概要
  91.     3.5.2.4 EfficientNet:さまざまなテクニックの集大成
  92.      EfficientNetの概要
  93.   3.6 畳み込みを超えて:トランスフォーマーアーキテクチャ
  94.   3.7 モデルの選択
  95.    3.7.1 性能比較
  96.    3.7.2 アンサンブル
  97.    3.7.3 推奨される戦略
  98.   3.8 まとめ
  99.      【特別寄稿】畳み込み vs. アテンション?
  100.  4章 物体検出と画像セグメンテーション
  101.   4.1 物体検出
  102.    4.1.1 YOLO
  103.     4.1.1.1 YOLOのグリッド
  104.     4.1.1.2 物体検出ヘッド
  105.     4.1.1.3 損失関数
  106.     4.1.1.4 YOLOの限界
  107.    4.1.2 RetinaNet
  108.     4.1.2.1 特徴量ピラミッドネットワーク
  109.     4.1.2.2 アンカーボックス
  110.      アーキテクチャ
  111.     4.1.2.3 フォーカル損失(分類ヘッド用)
  112.     4.1.2.4 Smooth L1損失(ボックス回帰用)
  113.     4.1.2.5 非最大値抑制
  114.     4.1.2.6 その他の検討事項
  115.   4.2 セグメンテーション
  116.    4.2.1 Mask R-CNNとインスタンスセグメンテーション
  117.     4.2.1.1 RPN(領域提案ネットワーク)
  118.     4.2.1.2 R-CNN
  119.     4.2.1.3 ROIリサンプリング(ROIアライメント)
  120.     4.2.1.4 クラスとバウンディングボックスの予測
  121.     4.2.1.5 転置畳み込み
  122.      アップコンボリューション
  123.     4.2.1.6 インスタンスセグメンテーション
  124.    4.2.2 U-Netとセマンティックセグメンテーション
  125.     4.2.2.1 画像とラベル
  126.     4.2.2.2 アーキテクチャ
  127.     4.2.2.3 学習
  128.      その他の人気のモデル
  129.   4.3 まとめ
  130.      【特別寄稿】物体検出・セグメンテーション領域でのトランスフォーマーの応用
  131.  5章 データセットの作成
  132.   5.1 画像の収集
  133.      入力データとしてのメタデータ
  134.    5.1.1 写真
  135.    5.1.2 イメージング
  136.     5.1.2.1 極座標のグリッド
  137.     5.1.2.2 衛星画像
  138.     5.1.2.3 地理空間レイヤー
  139.    5.1.3 PoC
  140.   5.2 データの種類
  141.    5.2.1 チャンネル
  142.     5.2.1.1 スケーリング
  143.     5.2.1.2 チャンネルの順番
  144.      tf.einsum
  145.     5.2.1.3 グレースケール
  146.    5.2.2 地理空間データ
  147.     5.2.2.1 ラスターデータ
  148.     5.2.2.2 リモートセンシング
  149.    5.2.3 音声と動画
  150.     5.2.3.1 スペクトログラム
  151.      コンピュータビジョン技術を用いた自然言語処理
  152.     5.2.3.2 フレームごとの処理
  153.     5.2.3.3 Conv3D
  154.   5.3 手作業によるラベル付け
  155.    5.3.1 複数のラベル
  156.    5.3.2 物体検出
  157.   5.4 大規模なラベル付け
  158.    5.4.1 ラベル付け用のユーザーインターフェース
  159.    5.4.2 マルチタスク
  160.    5.4.3 投票とクラウドソーシング
  161.    5.4.4 ラベル付けサービス
  162.   5.5 自動ラベル付け
  163.    5.5.1 関連データからのラベル
  164.    5.5.2 Noisy Student
  165.    5.5.3 自己教師あり学習
  166.    5.5.4 自然発生するラベル
  167.   5.6 バイアス
  168.    5.6.1 バイアスの原因
  169.    5.6.2 選択バイアス
  170.    5.6.3 測定バイアス
  171.    5.6.4 確証バイアス
  172.    5.6.5 バイアスの検出
  173.   5.7 データセットの作成
  174.    5.7.1 データの分割
  175.    5.7.2 TFRecord
  176.     5.7.2.1 スケーラブルな処理
  177.      柔軟性と保守性のバランス
  178.     5.7.2.2 TFRecorder
  179.    5.7.3 TFRecordの読み込み
  180.      スパーステンソルとは?
  181.   5.8 まとめ
  182.  6章 前処理
  183.   6.1 前処理を行う理由
  184.    6.1.1 テンソルの形状変換
  185.    6.1.2 データの質の変換
  186.    6.1.3 モデルの品質向上
  187.   6.2 大きさと解像度
  188.    6.2.1 Kerasの前処理層
  189.    6.2.2 TensorFlow Imageモジュール
  190.    6.2.3 KerasとTensorFlowの併用
  191.    6.2.4 モデルの学習
  192.   6.3 学習と推論のずれ
  193.    6.3.1 関数の再利用
  194.    6.3.2 モデル内部での前処理
  195.      前処理をする場所
  196.    6.3.3 tf.transformを使う
  197.     6.3.3.1 Beamパイプラインを書く
  198.     6.3.3.2 データの変換
  199.     6.3.3.3 変換処理の保存
  200.     6.3.3.4 前処理済みデータの読み込み
  201.     6.3.3.5 推論での変換処理
  202.     6.3.3.6 tf.transformのメリット
  203.   6.4 データ拡張
  204.    6.4.1 空間的な変換
  205.    6.4.2 色の変更
  206.    6.4.3 情報の削除
  207.   6.5 入力画像の成形
  208.   6.6 まとめ
  209.  7章 学習パイプライン
  210.   7.1 効率的なデータの読み込み
  211.    7.1.1 データの効率的な保存
  212.     7.1.1.1 TFRecord
  213.     7.1.1.2 前処理済みのデータを格納する
  214.    7.1.2 データ読み込みの並列化
  215.     7.1.2.1 並列化
  216.     7.1.2.2 処理速度の測定
  217.      処理速度への影響の測定
  218.    7.1.3 効率的なデータの前処理
  219.     7.1.3.1 効率的なデータ読み込み
  220.     7.1.3.2 ベクトル化
  221.     7.1.3.3 グラフへの内包
  222.      イテレーション
  223.      tf.py_function()で純粋なPythonコードを呼び出す
  224.      スライスと条件分岐
  225.      行列計算
  226.      バッチ処理
  227.   7.2 モデルの状態の保存
  228.    7.2.1 モデルのエクスポート
  229.     7.2.1.1 モデルの呼び出し
  230.      TensorFlow関数のシグネチャ
  231.     7.2.1.2 使いやすいシグネチャ
  232.     7.2.1.3 シグネチャの使用
  233.    7.2.2 チェックポイントでの保存
  234.   7.3 分散ストラテジー
  235.    7.3.1 ストラテジーの選択
  236.    7.3.2 ストラテジーの作成
  237.     7.3.2.1 MirroredStrategy
  238.     7.3.2.2 MultiWorkerMirroredStrategy
  239.     7.3.2.3 TPUStrategy
  240.   7.4 サーバーレス機械学習
  241.    7.4.1 Pythonパッケージの作成
  242.     7.4.1.1 再利用可能なモジュール
  243.     7.4.1.2 Pythonモジュールの呼び出し
  244.     7.4.1.3 依存関係のインストール
  245.    7.4.2 学習ジョブの投入
  246.      コンテナの利用
  247.     7.4.2.1 複数のGPUでの実行
  248.     7.4.2.2 複数GPUへの分散
  249.     7.4.2.3 TPUへの分散
  250.    7.4.3 ハイパーパラメータチューニング
  251.     7.4.3.1 探索空間の指定
  252.     7.4.3.2 パラメータ値の使用
  253.     7.4.3.3 性能のレポート
  254.     7.4.3.4 結果
  255.     7.4.3.5 チューニングの継続
  256.    7.4.4 モデルのデプロイ
  257.   7.5 まとめ
  258.  8章 モデルの品質と継続的評価
  259.   8.1 モニタリング
  260.    8.1.1 TensorBoard
  261.    8.1.2 重みのヒストグラム
  262.      重みの分布はどうあるべきか?
  263.    8.1.3 デバイスの配置
  264.    8.1.4 データの可視化
  265.    8.1.5 学習イベント
  266.   8.2 モデルの品質指標
  267.    8.2.1 分類用の指標
  268.     8.2.1.1 二値分類
  269.     8.2.1.2 多クラス、単一ラベルの分類
  270.     8.2.1.3 多クラス、多ラベル分類
  271.    8.2.2 回帰用の指標
  272.    8.2.3 物体検出用の指標
  273.   8.3 品質評価
  274.    8.3.1 スライス評価
  275.    8.3.2 公平性のモニタリング
  276.    8.3.3 継続的な評価
  277.   8.4 まとめ
  278.  9章 モデルによる推論
  279.   9.1 推論を行う
  280.    9.1.1 モデルのエクスポート
  281.    9.1.2 メモリ上のモデルを使用する
  282.    9.1.3 抽象度の向上
  283.    9.1.4 パフォーマンスの向上
  284.   9.2 オンライン予測
  285.    9.2.1 TensorFlow Serving
  286.     9.2.1.1 モデルのデプロイ
  287.     9.2.1.2 予測を行う
  288.    9.2.2 サービング関数の変更
  289.     9.2.2.1 デフォルトのシグネチャの変更
  290.     9.2.2.2 複数のシグネチャ
  291.    9.2.3 画像のバイトデータを扱う
  292.     9.2.3.1 モデルの読み込み
  293.     9.2.3.2 予測用のシグネチャの追加
  294.     9.2.3.3 シグネチャのエクスポート
  295.     9.2.3.4 Base64エンコーディング
  296.   9.3 バッチ予測とストリーミング予測
  297.    9.3.1 Apache Beam のパイプライン
  298.    9.3.2 バッチ予測のマネージドサービス
  299.    9.3.3 オンライン予測の呼び出し
  300.   9.4 Edge ML
  301.    9.4.1 制約と最適化
  302.    9.4.2 TensorFlow Lite
  303.    9.4.3 TensorFlow Liteの実行
  304.    9.4.4 画像バッファの処理
  305.    9.4.5 フェデレーテッドラーニング
  306.   9.5 まとめ
  307.  10章 本番環境における機械学習のトレンド
  308.   10.1 機械学習パイプライン
  309.    10.1.1 パイプラインの必要性
  310.    10.1.2 コードベースのコンテナ化
  311.    10.1.3 コンポーネントの作成
  312.    10.1.4 コンポーネントの接続
  313.    10.1.5 実行の自動化
  314.   10.2 説明可能性(eXplainable AI:XAI)
  315.    10.2.1 手法
  316.     10.2.1.1 LIME
  317.     10.2.1.2 KernelSHAP
  318.     10.2.1.3 統合勾配
  319.     10.2.1.4 XRAI
  320.      さまざまな説明可能性の手法
  321.    10.2.2 説明可能性の追加
  322.     10.2.2.1 XAIのためのシグネチャ
  323.     10.2.2.2 説明のためのメタデータ
  324.     10.2.2.3 モデルのデプロイ
  325.     10.2.2.4 説明の取得
  326.   10.3 ノーコードでのコンピュータビション
  327.    10.3.1 なぜノーコードツールを使うのか?
  328.    10.3.2 データの読み込み
  329.    10.3.3 学習
  330.    10.3.4 評価
  331.   10.4 まとめ
  332.  11章 より高度な課題
  333.   11.1 物体計測
  334.    11.1.1 基準となる物体
  335.    11.1.2 セグメンテーション
  336.    11.1.3 回転補正
  337.    11.1.4 比率と計測値
  338.   11.2 カウンティング
  339.    11.2.1 密度推定
  340.    11.2.2 パッチの抽出
  341.    11.2.3 入力画像のシミュレーション
  342.    11.2.4 回帰
  343.    11.2.5 予測
  344.   11.3 姿勢推定
  345.    11.3.1 PersonLab
  346.    11.3.2 PoseNetモデル
  347.    11.3.3 複数の姿勢の識別
  348.   11.4 画像検索
  349.    11.4.1 検索の分散処理
  350.    11.4.2 高速検索
  351.    11.4.3 より優れた埋め込み
  352.   11.5 まとめ
  353.  12章 画像生成とテキスト生成
  354.   12.1 画像の理解
  355.    12.1.1 埋め込み
  356.    12.1.2 補助的な学習タスク
  357.    12.1.3 オートエンコーダ
  358.     12.1.3.1 アーキテクチャ
  359.      よく使われるKeras層の逆演算
  360.     12.1.3.2 学習
  361.     12.1.3.3 潜在ベクトル
  362.    12.1.4 変分オートエンコーダ
  363.     12.1.4.1 アーキテクチャ
  364.     12.1.4.2 損失
  365.   12.2 GANによる画像生成
  366.    12.2.1 敵対的生成ネットワーク(GAN)
  367.     12.2.1.1 ネットワークの作成
  368.     12.2.1.2 識別器の学習
  369.     12.2.1.3 生成器の学習
  370.     12.2.1.4 分布の変化
  371.    12.2.2 GANの改良
  372.     12.2.2.1 条件付きGAN
  373.      cGANの生成器
  374.      cGANの識別器
  375.    12.2.3 画像から画像への変換
  376.    12.2.4 超解像
  377.    12.2.5 画像の修正(インペインティング)
  378.    12.2.6 異常検知
  379.    12.2.7 ディープフェイク
  380.   12.3 画像キャプション生成
  381.    12.3.1 データセット
  382.    12.3.2 キャプションのトークナイズ
  383.    12.3.3 データセットの作成
  384.    12.3.4 キャプション生成モデル
  385.     12.3.4.1 画像エンコーダ
  386.     12.3.4.2 キャプションデコーダ
  387.    12.3.5 学習
  388.    12.3.6 予測
  389.   12.4 まとめ
  390.      【特別寄稿】画像生成の新潮流
  391.  あとがき
  392.  著者紹介
  393.  奥付

Product information

  • Title: コンピュータビジョンのための実践機械学習 ―モデルアーキテクチャからMLOpsまで
  • Author(s): Valliappa Lakshmanan, Martin Görner, Ryan Gillard, 大山 匠, 松田 晃一
  • Release date: July 2023
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784814400386

You might also like

book

ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方

by Jonathan Rasmusson, 島田 浩二, 角谷 信太郎

大規模な成功を収めているテック企業(ユニコーン企業)は、スタートアップで機能していたテクニックをエンタープライズ企業レベルにまでスケールさせる方法を見いだし、日々実践しています。Amazon、Facebook、Googleなどは、何万人もの従業員を抱えているにもかかわらず、スタートアップのように働いています。本書はSpotifyでアジャイルコーチやエンジニアの経験を持つ著者がユニコーン企業のソフトウェアづくりと働き方を解説します。 ミッションによってチームに目的を持たせ、スクワッドに権限を与え、信頼する。カンパニーベットを通じて大規模な取り組みを調整する。このような働き方とそれを実現するための文化のあり方を解説し、複数チームが連携しながら質の高いプロダクトを早くリリースし、迅速に技術革新を行うための方法を学びます。 プロダクトのデリバリーにフォーカスする世界有数のテック企業の事例を紹介する本書は、デリバリープロセスやプロダクト組織自体を改善したいエンジニアやマネージャー、経営リーダー必携の一冊です。

book

動かして学ぶ量子コンピュータプログラミング ―シミュレータとサンプルコードで理解する基本アルゴリズム

by Eric R. Johnston, Nic Harrigan, Mercedes Gimeno-Segovia, 北野 章, 丸山 耕司

独自のシミュレータQCEngineを使ってJavaScriptで書かれたサンプルプログラムをブラウザ上で動かし、量子コンピュータでのプログラミングに必要な知識やスキルを学ぶことができます。量子コンピューティングの基礎とその可能性に関する直感的理解が容易になるよう、豊富な例と図を用いて説明します。前半では、単一キュビットに対する基本的な量子演算、多重キュビット演算、複合演算(量子プリミティブ)、基本的な量子アプリケーション、後半では、探索問題、画像処理、暗号問題、機械学習への応用について解説しており、本書だけで基礎から実践的な応用技術までを一気に習得できます。

book

初めてのTypeScript ―型安全なJavaScriptでWeb開発を加速する

by Josh Goldberg, 今村 謙士, 原 隆文

TypeScriptの本格的な入門書。TypeScriptは、世界で最もよく使われ、かつ最も好まれているプログラミング言語の1つです。本書では、JavaScriptの基礎的な知識のあるプログラマーを対象に、「型」や「型システム」の基本から、明快かつ包括的にTypeScriptを解説します。TypeScriptはバグやタイプミスを防ぎ、コードを読みやすくするのに有用なだけでなく、JavaScriptがどのように動くべきかを宣言し、それを維持するのに役立つ優れたシステムです。読者は本書を読むことで、TypeScriptの基礎と最も重要な機能をマスターできるでしょう。

book

Pythonではじめるバイオインフォマティクス ―可読性・拡張性・再現性のあるコードを書くために

by Ken Youens-Clark, 異業種データサイエンス研究会

本書はPythonを使ったバイオインフォマティクス研究のプログラミングスキルを学ぶことができる解説書です。Pythonが再現性のある科学的なプログラムを書くのに適していることに焦点を当て、バイオインフォマティクス分野におけるプログラムの文書化やテスト、再現可能なソフトウェアの開発方法を解説します。2部構成に分かれ、第Ⅰ部ではバイオインフォマティクスとプログラミングを学習するためのプラットフォーム「Rosalind」を使って14の課題に取り組みながら実践的に学習します。第Ⅱ部ではそのほかの重要パターンや概念を取り上げ、より複雑なプログラムについて説明します。ソフトウェアの開発、テスト、文書化、リリース、そしてサポートといった重要な方法を学び、Pythonを使ってバイオインフォマティクス研究を発展させるテクニックを学べる1冊です。