公開:

ResNetとは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


ResNetとは

ResNetは畳み込みニューラルネットワーク(CNN)の一種であり、画像認識タスクにおいて高い精度を達成するために開発されました。ResNetの特徴は、スキップ接続と呼ばれる構造にあります。

スキップ接続とは、層を飛び越えて直接入力を出力に接続する構造のことです。これにより、勾配の流れが改善され、より深いネットワークを学習することが可能になりました。

ResNetは、2015年にMicrosoft Researchのチームによって提案されました。ImageNetの画像認識タスクにおいて、当時の最先端モデルを上回る性能を示し、注目を集めました。

ResNetには、層の数に応じて様々なバリエーションが存在します。代表的なものとしては、ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152などがあります。

ResNetは、画像認識だけでなく、物体検出やセグメンテーションなど、様々なコンピュータビジョンのタスクに応用されています。また、転移学習にも適しており、事前学習済みのResNetを用いることで、少量のデータでも高い精度を達成できます。

ResNetのアーキテクチャ

ResNetのアーキテクチャに関して、以下3つを簡単に解説していきます。

  • ResNetのスキップ接続
  • ResNetの残差ブロック
  • ResNetの層の構成

ResNetのスキップ接続

ResNetの中核をなすのが、スキップ接続と呼ばれる構造です。スキップ接続では、ある層の出力を次の層だけでなく、数層先の層にも直接接続します。これにより、勾配の流れが改善され、深いネットワークでも効果的に学習できるようになりました。

スキップ接続は、恒等写像(Identity Mapping)とも呼ばれます。入力をそのまま出力に渡すことで、情報の流れを妨げずに済むため、深いネットワークでも勾配の消失や爆発を防ぐことができます。この仕組みにより、ResNetは100層以上の深いネットワークを学習することに成功しました。

スキップ接続は、ResNetの各ブロックに組み込まれています。ブロックの入力が、そのままブロックの出力に足し合わされる形で接続されています。これにより、ネットワークは入力に対する残差(Residual)を学習することになります。

ResNetの残差ブロック

ResNetは、残差ブロックと呼ばれる構造を積み重ねることで構成されています。残差ブロックは、畳み込み層、バッチ正規化層、活性化関数(ReLU)を組み合わせたものです。ブロックの入力は、畳み込み層を通った後、バッチ正規化と活性化関数が適用されます。

残差ブロックには、複数の畳み込み層が含まれる場合もあります。例えば、ResNet-50では、3つの畳み込み層からなる「ボトルネック構造」が採用されています。ボトルネック構造では、次元を減らしてから増やすことで、計算量を抑えつつ、特徴量の抽出能力を高めています。

残差ブロックは、スキップ接続と組み合わせることで、効果的に勾配を伝播させることができます。ブロックの出力は、入力とブロックの出力の和となります。これにより、ネットワークは入力に対する残差を学習することになります。

ResNetの層の構成

ResNetは、複数の残差ブロックを積み重ねることで構成されています。層の数によって、ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152などのバリエーションがあります。数字は、層の総数を表しています。

ResNetの最初の層は、7x7のカーネルサイズを持つ畳み込み層です。その後、最大プーリング層が続きます。次に、複数の残差ブロックが積み重ねられます。ブロックの数は、ResNetのバリエーションによって異なります。

残差ブロックを積み重ねた後、グローバル平均プーリング層と全結合層が続きます。全結合層では、クラス数に応じた出力が得られます。ResNetは、この出力をソフトマックス関数に通すことで、各クラスの確率を計算します。

ResNetの学習と転移学習

ResNetの学習と転移学習に関して、以下3つを簡単に解説していきます。

  • ResNetの学習方法
  • ResNetの転移学習
  • ResNetの学習時の注意点

ResNetの学習方法

ResNetの学習には、一般的に確率的勾配降下法(SGD)が用いられます。SGDでは、ミニバッチと呼ばれる少量のデータを用いて、パラメータの更新を行います。ResNetの学習では、ミニバッチサイズは32や64が一般的です。

学習率は、学習の進行に合わせて適応的に変化させる必要があります。ResNetの学習では、学習率の減衰(Learning Rate Decay)が一般的に用いられます。例えば、一定のエポック数ごとに学習率を0.1倍するといった方法があります。

ResNetの学習には、正則化手法も重要です。代表的なものとしては、Weight Decayと呼ばれる手法があります。Weight Decayは、パラメータの値に対してペナルティを与えることで、過学習を抑制します。

ResNetの転移学習

ResNetは、転移学習に適したモデルとして知られています。転移学習とは、事前に学習済みのモデルを、新しいタスクに応用する手法のことです。ResNetの場合、ImageNetで学習済みのモデルを用いることが一般的です。

転移学習では、学習済みのResNetの全結合層を新しいタスクのクラス数に合わせて変更します。そして、新しいデータセットを用いて、全結合層のみを再学習します。この際、ResNetの畳み込み層は固定され、更新されません。

転移学習は、少量のデータでも高い精度を達成できる手法として知られています。ResNetの転移学習では、学習済みの特徴抽出器を活用することで、効率的に新しいタスクを学習できます。ただし、タスクによっては、畳み込み層のファインチューニングが必要な場合もあります。

ResNetの学習時の注意点

ResNetの学習では、いくつかの注意点があります。まず、データの前処理が重要です。ResNetは、入力画像のサイズを224x224に統一することを前提としています。また、画像の正規化も必要です。一般的には、ImageNetのデータセットの平均値と標準偏差を用いて正規化します。

次に、ハイパーパラメータの設定にも注意が必要です。学習率や Weight Decay の値は、タスクやデータセットに応じて適切に設定する必要があります。また、バッチサイズやエポック数も、データセットのサイズに合わせて調整が必要です。

最後に、過学習への対策も重要です。ResNetは、高い表現力を持つモデルであるため、過学習しやすい傾向にあります。データ拡張(Data Augmentation)や、前述の Weight Decay などの正則化手法を適切に用いることが重要です。

ResNetの応用例

ResNetの応用例に関して、以下3つを簡単に解説していきます。

  • ResNetを用いた物体検出
  • ResNetを用いたセグメンテーション
  • ResNetを用いた画像生成

ResNetを用いた物体検出

ResNetは、物体検出のタスクにも広く用いられています。物体検出とは、画像内の物体の位置を特定し、そのクラスを分類するタスクです。代表的な物体検出モデルとしては、Faster R-CNNやSSDなどがあります。

これらのモデルでは、ResNetを特徴抽出器として用いることが一般的です。ResNetで抽出された特徴量を用いて、物体の候補領域を生成し、その領域に対してクラス分類と境界ボックスの回帰を行います。ResNetを用いることで、高精度な物体検出が可能になります。

物体検出では、ResNetの転移学習が効果的です。ImageNetで学習済みのResNetを用いて、物体検出用のデータセットで再学習することで、高い精度を達成できます。ただし、物体検出では、入力画像のサイズが大きくなるため、計算量が増大する点に注意が必要です。

ResNetを用いたセグメンテーション

ResNetは、セグメンテーションのタスクにも用いられています。セグメンテーションとは、画像内のピクセルを、物体やシーンのカテゴリに分類するタスクです。代表的なセグメンテーションモデルとしては、FCNやU-Netなどがあります。

これらのモデルでは、ResNetをエンコーダとして用いることが一般的です。ResNetで抽出された特徴量を、デコーダと呼ばれる構造で元の画像サイズに復元し、ピクセル単位の分類を行います。ResNetを用いることで、高精度なセグメンテーションが可能になります。

セグメンテーションでも、ResNetの転移学習が効果的です。ただし、セグメンテーションでは、物体検出と比べて、より詳細な空間情報が必要となります。そのため、ResNetの畳み込み層のファインチューニングが必要な場合が多いです。

ResNetを用いた画像生成

ResNetは、画像生成のタスクにも応用されています。画像生成とは、与えられた条件に基づいて、新しい画像を生成するタスクです。代表的な画像生成モデルとしては、GANやVAEなどがあります。

これらのモデルでは、ResNetを生成器や識別器として用いることがあります。生成器では、ResNetを用いて、ランダムなノイズから画像を生成します。識別器では、ResNetを用いて、生成された画像と実際の画像を識別します。

画像生成では、ResNetの構造を変更することが一般的です。例えば、畳み込み層の代わりに、転置畳み込み層を用いて、画像のサイズを大きくしていきます。また、畳み込みのカーネルサイズやストライドも、生成する画像のサイズに合わせて調整が必要です。

参考サイト

  1. Microsoft. https://www.microsoft.com/ja-jp

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「AI」に関するコラム一覧「AI」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。