オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

このブログについて

このブログでは、数学・統計学機械学習・プログラミングに関した記事を記していきます. 基本的には、私的な勉強のアウトプット / メモを目的としていますが、できるだけ整理して書いていきます. また、記事ごとのテーマ(「最小二乗法」、「確率」など)は明確にして、 「#アルゴリズム」、「#実装編」のような表記で内容を分割して書いていきます


まとめページ

記事には「#まとめ編」と題しまして、あるテーマに沿った記事が複数書きましたら、 後から読みやすいようにするために、記事をまとめたページを作成しております.

以下、作成したまとめページです

統計学

深層学習

自然言語処理

【MultiModal】Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks

points

  • Transformer
  • Self Attention

Index

Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks とは

2020 年に Microsoft と University of Washington から発表された Vision-Language の Cross (Multi) Modal についての論文.

Object Tag (Anchor Point)

Vision (画像) representation space と Language (テキスト) representation space の Alignment (関連) を学習するために、Object Tag (Anchor Point) を導入

Dataset

  1. Text : 物体名が含まれている文章
  2. Image : 物体が含まれている画像 / Faster R-CNN で物体領域を特定し、その領域を使用
  3. Object Tag : (Anchor Point) 画像内に映る物体でありテキスト内に表記される物体名のリスト

Input to Transformer

Word (Text) - Tag - Image の 3つが 入力 Text、Tag は Embedding した結果、画像内の物体が存在する領域

Word (Text) と Tag は BERT で Pre-Training を行う

Loss

Masked Token Loss (MLT)

Object Tag (Anchor Point) と Text における Loss 画像の特徴量からmask された token を推定する

Contrastive Loss

画像とテキストがデータセットのペアであるかどうかを推定する

参考

  • Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks
    • 提案論文

arxiv.org

【深層学習】U-Net #実装編 #01

この記事の読者

深層学習・ディープラーニングの手法の1つである「U-Net」について知りたい.


キーワード・知ってると理解がしやすい

  • U-Net
  • pix2pix

yhayato1320.hatenablog.com

yhayato1320.hatenablog.com


Index

Task

画像の Semantic Segmentation をタスクにします.

Datasets

Oxford- IIITPetDataset と呼ばれる動物の画像のデータセットです.



python api tensorflow_datasets を使ってデータを取得します.

import tensorflow_datasets as tfds
dataset, info = tfds.load('oxford_iiit_pet:3.*.*', with_info=True)

Model

U-Net は Down Sampler (Encoder) の部分と Up Sampler (Decoder) の 2つで構成されてます. そのうち、Down Sampler (Encoder) の部分のパラメータは学習済みのパラメータを利用し、それを固定することで、学習するパラメータを減らすことができます.

base_model = tf.keras.applications.MobileNetV2(input_shape=[128, 128, 3], include_top=False)

Up Sampler (Decoder) の部分は、pix2pix の Up Sampling 部分を使います.

from tensorflow_examples.models.pix2pix import pix2pix

up_stack = [
    pix2pix.upsample(512, 3),  # 4x4 -> 8x8
    pix2pix.upsample(256, 3),  # 8x8 -> 16x16
    pix2pix.upsample(128, 3),  # 16x16 -> 32x32
    pix2pix.upsample(64, 3),   # 32x32 -> 64x64
]

モデル全体を連結します.

def unet_model(output_channels):
    inputs = tf.keras.layers.Input(shape=[128, 128, 3])

    # Downsampling through the model
    skips = down_stack(inputs)
    x = skips[-1]
    skips = reversed(skips[:-1])

    # Upsampling and establishing the skip connections
    for up, skip in zip(up_stack, skips):
      x = up(x)
      concat = tf.keras.layers.Concatenate()
      x = concat([x, skip])

    # This is the last layer of the model
    last = tf.keras.layers.Conv2DTranspose(
        output_channels, 3, strides=2,
        padding='same')  #64x64 -> 128x128

    x = last(x)

    return tf.keras.Model(inputs=inputs, outputs=x)

Train

Optimizer, loss, metrics を決定して、コンパイルします.

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

Predict

predict function で結果を出力します.

model.predict()

参考

  • U-Net: Convolutional Networks for Biomedical Image Segmentation
    • 発表論文

arxiv.org

Web サイト

www.tensorflow.org

【深層学習】Fully Convolutional Network : FCN

この記事の読者

深層学習・ディープラーニングの手法の1つである「Fully Convolutional Network : FCN」について知りたい.


キーワード・知ってると理解がしやすい

  • CNN
  • VGG
  • Deconvolution

yhayato1320.hatenablog.com


Index

Fully Convolutional Network : FCN とは

2014 年に 発表された CNN を Semantic Segmentation に利用した最初の手法です. 全結合層を持たず、ネットワークが畳み込み層のみで構成されているネットワークです.

CNN との違い

従来のCNN との違いに注目することで、FCN のポイントを考えます.

全結合の廃止

通常の CNN で Object Recognition (Classification) を行う場合は、Convolution の最後に全結合層をおき、分類をできる形にすることが多いです. (VGGのようなアーキテクチャ) しかし、全結合層部分は 1x1 のような Convolution Layer に置き換え、全結合層を排除します.


ネットワークアーキテクチャ

CNN が 5 層の アーキテクチャはこのような感じ


CNN : Convolution  \times n + Max Pooling CNN (Deconv) : Deconvolution + Activation Function + BN

Up Sampling

通常の CNN では、処理を進めるにつれて、サイズが小さくなっていきます. (チャネル数は大きくなることが多い) この操作を Down Sampling (Encode)といい、それに対して、サイズを大きくして画像としての規格に戻していく処理を Up Sampling (Deocd) といいます. Deconvolution を使用することで Up Sampling します.

Skip Connection

Down Sampling 中の途中の情報を Up Sampling で利用します. Down Sampling の出力と加算して次のレイヤに進みます.

まとめ

参考

  • Fully Convolutional Networks for Semantic Segmentation
    • 発表論文

arxiv.org

Web サイト

blog.negativemind.com

【深層学習】MobileNet V2

この記事の読者

深層学習・ディープラーニングの手法の1つである「MobileNet V2」について知りたい.


キーワード・知ってると理解がしやすい

  • CNN
  • MobileNet V1
  • Residual Network

yhayato1320.hatenablog.com

yhayato1320.hatenablog.com

yhayato1320.hatenablog.com


Index

MobileNet V2 とは

2018 年に Google から発表された MobileNet V1 の改善手法. MobileNet V1 で使用されている Depthwise Separable Convolution はそのまま使用.

ネットワークアーキテクチャ

全体のアーキテクチャは、こんなかんじです.


通常の CNN の中身部分はこんなかんじです.


Bottleneck Depth Separable Convolution with Residuals

上図の Bottleneck Block とは Bottleneck Depth Separable Convolution with Residuals と称し、 「Depthwise Separable Convolution」+「Linear Bottleneck」+「Inverted Residual」のことです.



レイヤーベース


Depthwise Separable Convolution

MobileNet V1 で提案された、Convolution を 空間方向とチャネル方向に分割してパラメータを削減させる手法です. MobileNet V1 から引き続き利用します.

Linear Bottleneck

非線形 (Non-Linear) の Active Function を利用すると、多くの情報を失うことになります.
(ある 2 つの線形関数の合成はある 1 つの線形関数で表すことが可能であるため、 Deep Learningでは、ネットワークの表現力を損なわないために非線形関数をActive Function に導入してます)

ReLU は 入力がゼロ以上であれば、線形関数とみなせます. そこで、ReLU を利用すれば、擬似的に線形関数(Linear)の性質を利用できるという仮説できまます. しかし、完全に情報の損失を防げるわけでありません. (完全に線形な関数ではないため) そこで、Bottleneck Convolution を導入して、チャネル数を多くして情報量を多くすれば、後続に重要な情報を多く残すことができると考えます. (Bottleneck Convolution は チャネル数を増やすために使用される 1 x1 の Convolution です)

MobileNet V2 の CNN には Depthwise Separable Convolution が利用されているため、CNN のネットワークアーキテクチャは以下のようになります.



線形変換(Linear)のような Active Function (ReLU) と BottleNeck Convolution を 組み合わせた構造を、Linear Bottleneck と呼びます. そして、Depthwise Separable Convolution にLinear Bottleneckを適用します.

Inverted Residual

ResNet の Residual Block を元に(Shortcut Connection を利用して)、CNN (Linear Bottleneck が適用された Depthwise Separable Convolution = Bottleneck Depthwise Separable Convolution) で構築されます. チャネル数の変換は通常の変化とは異なる・逆になるため Inverted Residual と称します.

チャネル方向に注目すると以下のようになります.

  • ResNet (Residual Block) : 大きい -> 小さい -> 大きい
    • 最初の Convolution は特徴量の抽出 (Depthwise (空間方向のConvolution) + Pointwise (チャネル方向のConvolution))
    • 次の Convolution はチャネル数の調整



  • Inverted Residual : 小さい -> 大きい -> 小さい
    • 最初の Convolution は特徴量の抽出と情報損失に備えるための拡大 (Depthwise (空間方向のConvolution) + Pointwise (チャネル方向のConvolution))
    • 次の Convolution はチャネル数の調整



まとめ

  • 精度を効率的に軽量に向上させるという MobileNet の思想をそのままに、改善させた手法

参考

  • MobileNetV2: Inverted Residuals and Linear Bottlenecks
    • 提案論文

arxiv.org

【深層学習】DenseNet

この記事の読者

深層学習・ディープラーニングの手法の1つである「Residual Network」について知りたい.


キーワード・知ってると理解がしやすい

  • CNN
  • ResNet

yhayato1320.hatenablog.com

yhayato1320.hatenablog.com


Index

DenseNet とは

2016 年に発表された ResNet の改善手法です.

ResNet との違い

ResNet の場合は、ある 1 つの層への入力に対し、ある 1 つの層からの出力を結合(加算)する 1 : 1 の対応でしたが、 DenseNetは、それを n : n の対応にします.

ネットワークアーキテクチャ

DenseNet は以下の 4 つで構成されています.

  • Initial Convolution
  • Dense Block
  • Transition Layer
  • Classification Layer

Dense Block

CNN (Convolution + BN + Active Function(ReLU) ) を n : n のShortcut Connection で連結したものです. (n : n とはいっても後方から前方への接続のみです)

Transition layer

1 x 1 Convolution 演算と2 x 2 Average Pooling 演算を行います. Dense Block の間におきます. Convolution 演算 ではチャンネル数の圧縮を行います.

Growth Rate

Dense Block 内のデータのチャネル数をコントロールするパラメータ. 1 つの Dense Block でどの程度フィルター数を設置するか.

参考

  • Densely Connected Convolutional Networks
    • 発表論文

arxiv.org

【深層学習】Residual Network : ResNet

この記事の読者

深層学習・ディープラーニングの手法の1つである「Residual Network」について知りたい.


キーワード・知ってると理解がしやすい

  • CNN
  • Stacking

yhayato1320.hatenablog.com


Index

Residual Network : ResNet とは

2015 年 Microsoft から発表されたCNN の改善手法です. 精度を上げるために層を深くした際に発生した「勾配消失問題」へ改善を行った手法です.

Shortcut Connection (Skip Connection)

Skip Connection / スキップ接続とも呼ばれる、層を超えて情報を前に伝達する手法. この手法を用いることで「勾配消失問題」に対応した.

Residual Block (残差ブロック)

CNN と Shortcut Connection (Skip Connection) とを組み合わせたひとかたまりのブロック. Residual Block を複数組み込むことで、ネットワークを構成していく.

  • 左 : Plain Block
  • 右 : Bottleneck Block

Residual Block のアーキテクチャには、 Bottleneck Block が採用されており、最後のレイヤでチャネル数を決めています.

連結

提案されている Bottleneck Block では入力と出力の幅と高さのサイズが同じになるようにしているため、チャネルサイズさえ調整できれば、 テンサー同士の足し算が可能になり、連結は和演算で行うことが可能です.

Input : W x H x C
Conv1 : kernel = 1 x 1, padding = 0, strode = 1, Channel = OC
Output1 : W x H x OC
Conv2 : kernel = 3 x 3, padding = 1, strode = 1, Channel = OC
Output2 : W x H x OC
Conv3 : kernel = 1 x 1, padding = 0, strode = 1, Channel = C
Output3 : W x H x C

参考

  • Deep Residual Learning for Image Recognition
    • 発表論文

arxiv.org

【深層学習】U-Net #アルゴリズム編

この記事の読者

深層学習・ディープラーニングの手法の1つである「U-Net」について知りたい.


キーワード・知ってると理解がしやすい

  • CNN
  • FCN (Fully Convolution Network)
  • Deconvolution

yhayato1320.hatenablog.com


Index

U-Net とは

2015 年に発表された Semantic Segmentation のタスクの手法. FCN (Fully Convolutional Network) の改善手法.

ネットワークアーキテクチャ

このように、U 字の形状のため、U-Net と呼ぶようです.

重要なポイントは以下の部分になります.

  • Down Sampling
  • Up Sampling
  • Skip Connection
  • Concat

Down Sampling

通常の CNN で、特徴量の抽出を目的とします. 通常と異なる点は、途中の特徴量マップを保存しておくことで、これを Up Sampling で使用します. 論文で、Convolution (Unpadded) + Active Function (ReLU) + Max Pooling を繰り返します.

Up Sampling

Deconvolution を利用することで、特徴量マップのサイズを大きくしていきます.

Skip Connection

Up Sampling 中に抽出した特徴量マップを Down Sampling に組み込むことで、特徴量情報を失わずに、満遍なく利用することができます.

Concat

Up Sampling 中に抽出した特徴量マップを Down Sampling で利用する際は、連結処理をすることで後続のネットワークに情報を加えます.

参考

  • U-Net: Convolutional Networks for Biomedical Image Segmentation
    • 発表論文

arxiv.org