Book description
機械学習モデルを使用して画像に関するさまざまな課題を解くための実践的な解説書。コンピュータビジョンは機械学習で最も注目度の高い分野のひとつです。本書では、機械学習エンジニアやデータサイエンティストを対象に、コンピュータビジョンに関連する機械学習の手法、アーキテクチャ、課題、運用などを網羅的に解説します。読者は、分類、物体検出、セグメンテーション、異常検知、画像生成、キャプション生成といった画像関連の問題を、機械学習で解決する方法を学びます。また、データセットの作成、前処理、モデルの設計、学習、評価、デプロイ、監視といった標準的な機械学習の運用からMLOpsまで同時にマスターできます。日本語版では、コンピュータビジョン領域でのトランスフォーマーモデルの活用や画像生成の新潮流である拡散モデルについてまとめた特別コラムを追加で収録しました。
Table of contents
- 大扉
- 原書大扉
- クレジット
- 賞賛の声
- 監訳者まえがき
- まえがき
- 1章 コンピュータビジョンのための機械学習
- 1.1 機械学習
- 1.2 ディープラーニングの使用例
- 1.3 まとめ
- 2章 機械学習モデル
- 2.1 機械知覚のためのデータセット
- 2.1.1 5-flowersデータセット
- 5-flowersデータセットについての注意点
- 画像収集作業の標準化
- 2.1.2 画像データの読み込み
- テンソルとは何か?
- 2.1.3 画像データの可視化
- 2.1.4 データセットファイルの読み込み
- 2.2 Kerasによる線形モデル
- 2.2.1 Kerasモデル
- 2.2.1.1 予測関数
- 確率、オッズ、ロジット、Sigmoid、Softmax
- 2.2.1.2 活性化関数
- 2.2.1.3 オプティマイザ
- 勾配降下法
- 2.2.1.4 学習時の損失
- なぜラベルの表現方法が2つあるのか?
- 2.2.1.5 誤差の指標
- 2.2.2 モデルの学習
- 2.2.2.1 データセットの作成
- 2.2.2.2 モデルの作成と表示
- 2.2.2.3 モデルのフィッティング
- 2.2.2.4 予測値のプロット
- 画像回帰
- 2.3 Kerasを使ったニューラルネットワーク
- 2.3.1 ニューラルネットワーク
- 2.3.1.1 隠れ層
- 2.3.1.2 ニューラルネットワークの学習
- 2.3.1.3 学習率
- 2.3.1.4 正則化
- 2.3.1.5 早期停止(early stopping)
- 2.3.1.6 ハイパーパラメータチューニング
- 2.3.2 ディープニューラルネットワーク
- 2.3.2.1 DNNの構築
- 2.3.2.2 ドロップアウト
- 2.3.2.3 バッチ正規化
- 2.4 まとめ
- 2.5 用語集
- 3章 モデルアーキテクチャ
- 3.1 学習済みの埋め込み
- 3.1.1 学習済みモデル
- 3.1.2 転移学習
- Kerasの事前学習済みモデル
- 3.1.3 ファインチューニング
- 3.1.3.1 学習率スケジューリング
- 104 flowersデータセット
- 3.2 畳み込みニューラルネットワーク(CNN)
- 3.2.1 畳み込みフィルター
- 畳み込みフィルターはなぜ機能するのか?
- 3.2.2 畳み込み層の積み重ね
- 3.2.3 プーリング層
- 3.2.4 AlexNet
- AlexNetの概要
- 3.3 深さの追求
- 3.3.1 フィルターの因数分解
- 3.3.2 1×1の畳み込み層
- 3.3.3 VGG19
- VGG19の概要
- 3.3.4 グローバル平均プーリング
- 3.4 モジュールアーキテクチャ
- 3.4.1 Inception
- InceptionV3の概要
- 3.4.2 SqueezeNet
- SqueezeNetの概要
- 3.4.3 ResNetとスキップ接続
- ResNetの概要
- 3.4.4 DenseNet
- DenseNetの概要
- 3.4.5 分離畳み込み
- 3.4.6 Xception
- Xceptionの概要
- 3.5 ニューラルアーキテクチャサーチによる設計
- 3.5.1 NASNet
- NASNetの概要
- 3.5.2 MobileNetファミリー
- 3.5.2.1 深さごとの畳み込み
- 3.5.2.2 Inverted Residual Bottleneck
- 3.5.2.3 MobileNetV2
- MobileNetV2の概要
- 3.5.2.4 EfficientNet:さまざまなテクニックの集大成
- EfficientNetの概要
- 3.6 畳み込みを超えて:トランスフォーマーアーキテクチャ
- 3.7 モデルの選択
- 3.7.1 性能比較
- 3.7.2 アンサンブル
- 3.7.3 推奨される戦略
- 3.8 まとめ
- 【特別寄稿】畳み込み vs. アテンション?
- 4章 物体検出と画像セグメンテーション
- 4.1 物体検出
- 4.1.1 YOLO
- 4.1.1.1 YOLOのグリッド
- 4.1.1.2 物体検出ヘッド
- 4.1.1.3 損失関数
- 4.1.1.4 YOLOの限界
- 4.1.2 RetinaNet
- 4.1.2.1 特徴量ピラミッドネットワーク
- 4.1.2.2 アンカーボックス
- アーキテクチャ
- 4.1.2.3 フォーカル損失(分類ヘッド用)
- 4.1.2.4 Smooth L1損失(ボックス回帰用)
- 4.1.2.5 非最大値抑制
- 4.1.2.6 その他の検討事項
- 4.2 セグメンテーション
- 4.2.1 Mask R-CNNとインスタンスセグメンテーション
- 4.2.1.1 RPN(領域提案ネットワーク)
- 4.2.1.2 R-CNN
- 4.2.1.3 ROIリサンプリング(ROIアライメント)
- 4.2.1.4 クラスとバウンディングボックスの予測
- 4.2.1.5 転置畳み込み
- アップコンボリューション
- 4.2.1.6 インスタンスセグメンテーション
- 4.2.2 U-Netとセマンティックセグメンテーション
- 4.2.2.1 画像とラベル
- 4.2.2.2 アーキテクチャ
- 4.2.2.3 学習
- その他の人気のモデル
- 4.3 まとめ
- 【特別寄稿】物体検出・セグメンテーション領域でのトランスフォーマーの応用
- 5章 データセットの作成
- 5.1 画像の収集
- 入力データとしてのメタデータ
- 5.1.1 写真
- 5.1.2 イメージング
- 5.1.2.1 極座標のグリッド
- 5.1.2.2 衛星画像
- 5.1.2.3 地理空間レイヤー
- 5.1.3 PoC
- 5.2 データの種類
- 5.2.1 チャンネル
- 5.2.1.1 スケーリング
- 5.2.1.2 チャンネルの順番
- tf.einsum
- 5.2.1.3 グレースケール
- 5.2.2 地理空間データ
- 5.2.2.1 ラスターデータ
- 5.2.2.2 リモートセンシング
- 5.2.3 音声と動画
- 5.2.3.1 スペクトログラム
- コンピュータビジョン技術を用いた自然言語処理
- 5.2.3.2 フレームごとの処理
- 5.2.3.3 Conv3D
- 5.3 手作業によるラベル付け
- 5.3.1 複数のラベル
- 5.3.2 物体検出
- 5.4 大規模なラベル付け
- 5.4.1 ラベル付け用のユーザーインターフェース
- 5.4.2 マルチタスク
- 5.4.3 投票とクラウドソーシング
- 5.4.4 ラベル付けサービス
- 5.5 自動ラベル付け
- 5.5.1 関連データからのラベル
- 5.5.2 Noisy Student
- 5.5.3 自己教師あり学習
- 5.5.4 自然発生するラベル
- 5.6 バイアス
- 5.6.1 バイアスの原因
- 5.6.2 選択バイアス
- 5.6.3 測定バイアス
- 5.6.4 確証バイアス
- 5.6.5 バイアスの検出
- 5.7 データセットの作成
- 5.7.1 データの分割
- 5.7.2 TFRecord
- 5.7.2.1 スケーラブルな処理
- 柔軟性と保守性のバランス
- 5.7.2.2 TFRecorder
- 5.7.3 TFRecordの読み込み
- スパーステンソルとは?
- 5.8 まとめ
- 6章 前処理
- 6.1 前処理を行う理由
- 6.1.1 テンソルの形状変換
- 6.1.2 データの質の変換
- 6.1.3 モデルの品質向上
- 6.2 大きさと解像度
- 6.2.1 Kerasの前処理層
- 6.2.2 TensorFlow Imageモジュール
- 6.2.3 KerasとTensorFlowの併用
- 6.2.4 モデルの学習
- 6.3 学習と推論のずれ
- 6.3.1 関数の再利用
- 6.3.2 モデル内部での前処理
- 前処理をする場所
- 6.3.3 tf.transformを使う
- 6.3.3.1 Beamパイプラインを書く
- 6.3.3.2 データの変換
- 6.3.3.3 変換処理の保存
- 6.3.3.4 前処理済みデータの読み込み
- 6.3.3.5 推論での変換処理
- 6.3.3.6 tf.transformのメリット
- 6.4 データ拡張
- 6.4.1 空間的な変換
- 6.4.2 色の変更
- 6.4.3 情報の削除
- 6.5 入力画像の成形
- 6.6 まとめ
- 7章 学習パイプライン
- 7.1 効率的なデータの読み込み
- 7.1.1 データの効率的な保存
- 7.1.1.1 TFRecord
- 7.1.1.2 前処理済みのデータを格納する
- 7.1.2 データ読み込みの並列化
- 7.1.2.1 並列化
- 7.1.2.2 処理速度の測定
- 処理速度への影響の測定
- 7.1.3 効率的なデータの前処理
- 7.1.3.1 効率的なデータ読み込み
- 7.1.3.2 ベクトル化
- 7.1.3.3 グラフへの内包
- イテレーション
- tf.py_function()で純粋なPythonコードを呼び出す
- スライスと条件分岐
- 行列計算
- バッチ処理
- 7.2 モデルの状態の保存
- 7.2.1 モデルのエクスポート
- 7.2.1.1 モデルの呼び出し
- TensorFlow関数のシグネチャ
- 7.2.1.2 使いやすいシグネチャ
- 7.2.1.3 シグネチャの使用
- 7.2.2 チェックポイントでの保存
- 7.3 分散ストラテジー
- 7.3.1 ストラテジーの選択
- 7.3.2 ストラテジーの作成
- 7.3.2.1 MirroredStrategy
- 7.3.2.2 MultiWorkerMirroredStrategy
- 7.3.2.3 TPUStrategy
- 7.4 サーバーレス機械学習
- 7.4.1 Pythonパッケージの作成
- 7.4.1.1 再利用可能なモジュール
- 7.4.1.2 Pythonモジュールの呼び出し
- 7.4.1.3 依存関係のインストール
- 7.4.2 学習ジョブの投入
- コンテナの利用
- 7.4.2.1 複数のGPUでの実行
- 7.4.2.2 複数GPUへの分散
- 7.4.2.3 TPUへの分散
- 7.4.3 ハイパーパラメータチューニング
- 7.4.3.1 探索空間の指定
- 7.4.3.2 パラメータ値の使用
- 7.4.3.3 性能のレポート
- 7.4.3.4 結果
- 7.4.3.5 チューニングの継続
- 7.4.4 モデルのデプロイ
- 7.5 まとめ
- 8章 モデルの品質と継続的評価
- 8.1 モニタリング
- 8.1.1 TensorBoard
- 8.1.2 重みのヒストグラム
- 重みの分布はどうあるべきか?
- 8.1.3 デバイスの配置
- 8.1.4 データの可視化
- 8.1.5 学習イベント
- 8.2 モデルの品質指標
- 8.2.1 分類用の指標
- 8.2.1.1 二値分類
- 8.2.1.2 多クラス、単一ラベルの分類
- 8.2.1.3 多クラス、多ラベル分類
- 8.2.2 回帰用の指標
- 8.2.3 物体検出用の指標
- 8.3 品質評価
- 8.3.1 スライス評価
- 8.3.2 公平性のモニタリング
- 8.3.3 継続的な評価
- 8.4 まとめ
- 9章 モデルによる推論
- 9.1 推論を行う
- 9.1.1 モデルのエクスポート
- 9.1.2 メモリ上のモデルを使用する
- 9.1.3 抽象度の向上
- 9.1.4 パフォーマンスの向上
- 9.2 オンライン予測
- 9.2.1 TensorFlow Serving
- 9.2.1.1 モデルのデプロイ
- 9.2.1.2 予測を行う
- 9.2.2 サービング関数の変更
- 9.2.2.1 デフォルトのシグネチャの変更
- 9.2.2.2 複数のシグネチャ
- 9.2.3 画像のバイトデータを扱う
- 9.2.3.1 モデルの読み込み
- 9.2.3.2 予測用のシグネチャの追加
- 9.2.3.3 シグネチャのエクスポート
- 9.2.3.4 Base64エンコーディング
- 9.3 バッチ予測とストリーミング予測
- 9.3.1 Apache Beam のパイプライン
- 9.3.2 バッチ予測のマネージドサービス
- 9.3.3 オンライン予測の呼び出し
- 9.4 Edge ML
- 9.4.1 制約と最適化
- 9.4.2 TensorFlow Lite
- 9.4.3 TensorFlow Liteの実行
- 9.4.4 画像バッファの処理
- 9.4.5 フェデレーテッドラーニング
- 9.5 まとめ
- 10章 本番環境における機械学習のトレンド
- 10.1 機械学習パイプライン
- 10.1.1 パイプラインの必要性
- 10.1.2 コードベースのコンテナ化
- 10.1.3 コンポーネントの作成
- 10.1.4 コンポーネントの接続
- 10.1.5 実行の自動化
- 10.2 説明可能性(eXplainable AI:XAI)
- 10.2.1 手法
- 10.2.1.1 LIME
- 10.2.1.2 KernelSHAP
- 10.2.1.3 統合勾配
- 10.2.1.4 XRAI
- さまざまな説明可能性の手法
- 10.2.2 説明可能性の追加
- 10.2.2.1 XAIのためのシグネチャ
- 10.2.2.2 説明のためのメタデータ
- 10.2.2.3 モデルのデプロイ
- 10.2.2.4 説明の取得
- 10.3 ノーコードでのコンピュータビション
- 10.3.1 なぜノーコードツールを使うのか?
- 10.3.2 データの読み込み
- 10.3.3 学習
- 10.3.4 評価
- 10.4 まとめ
- 11章 より高度な課題
- 11.1 物体計測
- 11.1.1 基準となる物体
- 11.1.2 セグメンテーション
- 11.1.3 回転補正
- 11.1.4 比率と計測値
- 11.2 カウンティング
- 11.2.1 密度推定
- 11.2.2 パッチの抽出
- 11.2.3 入力画像のシミュレーション
- 11.2.4 回帰
- 11.2.5 予測
- 11.3 姿勢推定
- 11.3.1 PersonLab
- 11.3.2 PoseNetモデル
- 11.3.3 複数の姿勢の識別
- 11.4 画像検索
- 11.4.1 検索の分散処理
- 11.4.2 高速検索
- 11.4.3 より優れた埋め込み
- 11.5 まとめ
- 12章 画像生成とテキスト生成
- 12.1 画像の理解
- 12.1.1 埋め込み
- 12.1.2 補助的な学習タスク
- 12.1.3 オートエンコーダ
- 12.1.3.1 アーキテクチャ
- よく使われるKeras層の逆演算
- 12.1.3.2 学習
- 12.1.3.3 潜在ベクトル
- 12.1.4 変分オートエンコーダ
- 12.1.4.1 アーキテクチャ
- 12.1.4.2 損失
- 12.2 GANによる画像生成
- 12.2.1 敵対的生成ネットワーク(GAN)
- 12.2.1.1 ネットワークの作成
- 12.2.1.2 識別器の学習
- 12.2.1.3 生成器の学習
- 12.2.1.4 分布の変化
- 12.2.2 GANの改良
- 12.2.2.1 条件付きGAN
- cGANの生成器
- cGANの識別器
- 12.2.3 画像から画像への変換
- 12.2.4 超解像
- 12.2.5 画像の修正(インペインティング)
- 12.2.6 異常検知
- 12.2.7 ディープフェイク
- 12.3 画像キャプション生成
- 12.3.1 データセット
- 12.3.2 キャプションのトークナイズ
- 12.3.3 データセットの作成
- 12.3.4 キャプション生成モデル
- 12.3.4.1 画像エンコーダ
- 12.3.4.2 キャプションデコーダ
- 12.3.5 学習
- 12.3.6 予測
- 12.4 まとめ
- 【特別寄稿】画像生成の新潮流
- あとがき
- 著者紹介
- 奥付
Product information
- Title: コンピュータビジョンのための実践機械学習 ―モデルアーキテクチャからMLOpsまで
- Author(s):
- Release date: July 2023
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784814400386
You might also like
book
ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方
大規模な成功を収めているテック企業(ユニコーン企業)は、スタートアップで機能していたテクニックをエンタープライズ企業レベルにまでスケールさせる方法を見いだし、日々実践しています。Amazon、Facebook、Googleなどは、何万人もの従業員を抱えているにもかかわらず、スタートアップのように働いています。本書はSpotifyでアジャイルコーチやエンジニアの経験を持つ著者がユニコーン企業のソフトウェアづくりと働き方を解説します。 ミッションによってチームに目的を持たせ、スクワッドに権限を与え、信頼する。カンパニーベットを通じて大規模な取り組みを調整する。このような働き方とそれを実現するための文化のあり方を解説し、複数チームが連携しながら質の高いプロダクトを早くリリースし、迅速に技術革新を行うための方法を学びます。 プロダクトのデリバリーにフォーカスする世界有数のテック企業の事例を紹介する本書は、デリバリープロセスやプロダクト組織自体を改善したいエンジニアやマネージャー、経営リーダー必携の一冊です。
book
動かして学ぶ量子コンピュータプログラミング ―シミュレータとサンプルコードで理解する基本アルゴリズム
独自のシミュレータQCEngineを使ってJavaScriptで書かれたサンプルプログラムをブラウザ上で動かし、量子コンピュータでのプログラミングに必要な知識やスキルを学ぶことができます。量子コンピューティングの基礎とその可能性に関する直感的理解が容易になるよう、豊富な例と図を用いて説明します。前半では、単一キュビットに対する基本的な量子演算、多重キュビット演算、複合演算(量子プリミティブ)、基本的な量子アプリケーション、後半では、探索問題、画像処理、暗号問題、機械学習への応用について解説しており、本書だけで基礎から実践的な応用技術までを一気に習得できます。
book
初めてのTypeScript ―型安全なJavaScriptでWeb開発を加速する
TypeScriptの本格的な入門書。TypeScriptは、世界で最もよく使われ、かつ最も好まれているプログラミング言語の1つです。本書では、JavaScriptの基礎的な知識のあるプログラマーを対象に、「型」や「型システム」の基本から、明快かつ包括的にTypeScriptを解説します。TypeScriptはバグやタイプミスを防ぎ、コードを読みやすくするのに有用なだけでなく、JavaScriptがどのように動くべきかを宣言し、それを維持するのに役立つ優れたシステムです。読者は本書を読むことで、TypeScriptの基礎と最も重要な機能をマスターできるでしょう。
book
Pythonではじめるバイオインフォマティクス ―可読性・拡張性・再現性のあるコードを書くために
本書はPythonを使ったバイオインフォマティクス研究のプログラミングスキルを学ぶことができる解説書です。Pythonが再現性のある科学的なプログラムを書くのに適していることに焦点を当て、バイオインフォマティクス分野におけるプログラムの文書化やテスト、再現可能なソフトウェアの開発方法を解説します。2部構成に分かれ、第Ⅰ部ではバイオインフォマティクスとプログラミングを学習するためのプラットフォーム「Rosalind」を使って14の課題に取り組みながら実践的に学習します。第Ⅱ部ではそのほかの重要パターンや概念を取り上げ、より複雑なプログラムについて説明します。ソフトウェアの開発、テスト、文書化、リリース、そしてサポートといった重要な方法を学び、Pythonを使ってバイオインフォマティクス研究を発展させるテクニックを学べる1冊です。