Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

TensorFlow : 完全畳込みネットワークによるセグメンテーション

Posted on 07/05/2017 by Sales Information

TensorFlow : 完全畳込みネットワークによるセグメンテーション

作成 : (株)クラスキャット セールスインフォメーション
日時 : 07/05/2017

 

セグメンテーションとデータセット PASCAL VOC2012

セマンティック・セグメンテーションの実験が続いたので、基本的なセグメンテーション・モデルである完全畳み込みネットワーク FCN (Fully Convolutional Network) を定番のデータセット PASCAL VOC2012 上で試しておきます。

セグメンテーションは簡単に言えばピクセル単位の分類問題です。そして完全畳み込みネットワークはセグメンテーション・タスク用のモデルの一つで、畳み込み層中心で構成されスキップ・アーキテクチャが導入されています。最先端のセグメンテーション技術に比較すると少し精度が劣る印象ですが、基本となるモデルで完全畳み込みネットワークのバリエーションも多いです。
(補足: 完全畳み込みネットワークという訳語は定着していませんのでご注意ください。もっとも他に訳しようもないのですが。)

データセットは PASCAL VOC 2012 を使用します。このデータセットは物体検出やセグメンテーション目的で標準的に利用されるデータセットです。セグメンテーションについては訓練セットが 1464 画像、検証セットが 1449 画像用意されていて総計 2,913 枚あります。クラスは以下の 20 ありますが (背景をカウントすれば 21) :

1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle, 6=bus, 7=car , 8=cat, 9=chair, 10=cow, 11=diningtable, 12=dog, 13=horse, 14=motorbike, 15=person, 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor

クラスの詳細については以下を参照してください :

  • PASCAL VOC2011 Example Segmentations

以下は訓練したモデルでセグメンテーションを行なったものです :

 

完全畳込みネットワーク (FCN, Fully Convolutional Networks)

完全畳み込みネットワークの基本は以下のペーパーを読めば十分で、(セグメンテーション、あるいは Auto-encoder を手がけたことがあれば) 特に難しい話しもありません。図を見るだけでもアーキテクチャの概要は掴めるかと思います :

  • Fully Convolutional Networks for Semantic Segmentation
    Evan Shelhamer, Jonathan Long, Trevor Darrell
    (Submitted on 20 May 2016)

Abstract だけ翻訳しておきます :

畳み込みネットワークは特徴の階層を生むパワフルな視覚モデルです。end-to-end で、pixel-to-pixel に訓練された畳み込みネットワークはそれ自体でセマンティック・セグメンテーションにおいて以前のベストな結果を更新することを示します。キーとなる洞察は “完全畳み込み (fully convolutional)” ネットワークを構築することです、これは任意のサイズの入力を取り相当するサイズの出力を効率的な推論と学習で生成します。完全畳み込みネットワークの位相 (space) を定義して詳述し、空間的に密な予想タスク (訳注: ピクセル単位での予想タスク) へのそれらの適用を説明し、そして以前のモデルとの関連性をとらえます。現代的な分類ネットワーク (AlexNet、VGG と GoogLeNet) を完全畳み込みネットワークに適応させそれらが学習した表現を再調整してセグメンテーション・タスクに遷移しました。そしてスキップ・アーキテクチャを定義しました、これは正確で詳細なセグメンテーションを生成するために深い、粗い層からのセマンティック情報を浅い、完成度が高い (fine) 層からの外観 (appearance) 情報と結合します。この完全畳み込みネットワークは、推論に典型的な画像に対して 0.1 秒かかる一方で、PASCAL VOC (2012 上で 67.2% mean IU へと 30 % の相対的な改善)、NYUDv2、SIFT Flow、そして PASCAL-Context の改善されたセグメンテーションを獲得しました。

abstract は抽象的で少し分かりにくいかもしれませんが抑えたいポイントは :

  1. (完全結合層がないという意味で) 畳み込み層中心にモデルを構築し end-to-end, pixel-to-pixel にセグメンテーション・タスクを訓練/推論する。
  2. スキップ・アーキテクチャ – 通常の特徴出力に、より浅い層の出力を結合する。
  3. 分類ネットワークとしての AlexNet, VGG, GoogLeNet から遷移させている。

 

訓練モデル

モデルは VGG-16 ベースの FCN を実装した上で、(セールスポイントである) スキップ・アーキテクチャの有無で比較してみました。それからデータセットは train と val に分かれていますが、通常のように train のみで訓練したモデルと (ImageNet 画像で検証する目的で) 両者を合わせた trainval で訓練したモデルも用意しました。

具体的には以下の3種類です :

  1. スキップ・アーキテクチャなし / train データセットで訓練
  2. スキップ・アーキテクチャあり / train データセットで訓練

    この 2. を軸としました。以下は訓練時の損失の推移を TensorBoard でグラフにしたものです :

  3. val データセットを加えた trainval データセットを使用して 2 を再調整

 

Val データセット画像で検証

最初にスキップ・アーキテクチャなし/ありの場合のそれぞれのモデルについて(訓練では使用していない) Val データセットの画像で検証してみます。もちろん全く同じ条件で訓練しています。
* 色分けは、乗り物 : 青系、生物: グリーン系、その他: 赤系としましたが、便宜上、人間だけ赤色にしてあります。
* また予想されたカテゴリーのピクセル数も併せて示します。

  • 最初は aeroplane (飛行機) です。skip ありの方がより良い表現ですが、エンジン部は自動車と誤判定されています。
スキップ・アーキテクチャ なし スキップ・アーキテクチャ あり

1) aeroplane: 8691
2) car: 1650
3) boat: 173
1) aeroplane: 10543
2) car: 2867
3) chair: 29
4) sheep: 4
5) bus: 2
  • 次に電車です。正面窓の赤い部分は TV モニタと誤判定されています。局所的にはやむを得ませんが、全体が掴めていないとも言えます。

1) train: 22795
2) motorbike: 23
3) tv/monitor: 2
4) boat: 1,
1) train: 19915,
2) tv/monitor: 554,
3) boat: 143,
4) bottle: 51,
5) potted plant: 18,
  • そしてボートです。人間の目で見ても少し分かりにくいですが、明るい青はモーターバイク、赤色は TV モニタと誤判定されています。

1) motorbike: 1946
2) boat: 435
3) tv/monitor: 163

1) boat: 653,
2) tv/monitor: 246
3) train: 59
4) bottle: 58
5) car: 13
6) diningtable: 4
7) potted plant: 1

参考までに、以下は trainval データセットを利用して訓練したモデルを使用した結果です。つまり概ね正解の画像です :

aeroplane: 15576

train: 27851

boat: 6558

 

ImageNet 画像で検証

最後に trainval で訓練したモデルを使用して、(クラスキャットのマスコット猫に続いて) 定番の ImageNet 画像でテストしてみます。
全体的に位置判定は悪くないのですが、部分的に分類ミスも起きています。
* ImageNet 画像の元画像の版権は所有者に帰属します。

  • 概ね猫ですが、部分的に犬判定されています。

1) cat: 22245
2) dog: 5695
3) person: 675
  • 正面はバスですが、側面は電車判定です。

1) bus: 13323
2) train: 9010
3) boat: 1276
4) car: 118
5) tv/monitor: 8
  • 一見良さそうに見えますが、犬が馬と判定されています。

1) horse: 9419
2) person: 2046
3) car: 339
4) cow: 148
5) boat: 52
  • これは比較的上手くいっています。強いて言えば、ソファの面積がもう少し欲しいところです。

1) dog: 14863
2) cat: 9956
3) sofa: 4422

 
以上

クラスキャット

最近の投稿

  • LangGraph 0.5 : エージェント開発 : ワークフローとエージェント
  • LangGraph 0.5 : エージェント開発 : エージェントの実行
  • LangGraph 0.5 : エージェント開発 : prebuilt コンポーネントを使用したエージェント開発
  • LangGraph 0.5 : Get started : ローカルサーバの実行
  • LangGraph 0.5 on Colab : Get started : human-in-the-loop 制御の追加

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (24) LangGraph 0.5 (8) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2017年7月
月 火 水 木 金 土 日
 12
3456789
10111213141516
17181920212223
24252627282930
31  
« 6月   8月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme