PyTorchにおける画像認識のための機械学習モデルの概要
PyTorchのtorchvision.modelsで使える訓練済み機械学習モデルを紹介します
torchvision.modelsとは
PyTorchの画像認識用ライブラリ・フレームワーク
https://pytorch.org/docs/stable/torchvision/models.html
訓練済み機械学習モデルとは
すでに膨大な学習データで訓練させた結果が配布されている機械学習モデル
自分で機械学習モデルをゼロから訓練するには膨大なデータセットと膨大な計算リソースが必要となるが、その必要がない
訓練済みのデータをダウンロードするだけですぐに使える
訓練済み機械学習モデルをファインチューニングという手法で、ゼロから訓練するよりは少ない計算リソースで、特定の用途にカスタマイズすることもできる
結論
現状、ResNet50が一番バランスがイイ
ResNet50は、訓練済みモデルの容量が小さくて、計算量も少なくて、精度も高い
以下を見るべし
https://www.learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/
https://gyazo.com/8a3112c0789fd41b96a841b59d1d4cdd
画像認識機械学習モデルについて知ったかぶりするための最低限の知識
ResNet50が一番バランスがイイ
計算量を抑えつつ、訓練済みモデルの容量を小さくしたいならSqueezNet
計算量が増えてでも精度を上げたいならResNeXt
PyTorch自体も結局ResNet50とResNet101をメインで使っている
以下を見るべし
https://pytorch.org/docs/stable/torchvision/models.html#semantic-segmentation
torchvision.models.segmentation.fcn_resnet50
torchvision.models.segmentation.fcn_resnet101
torchvision.models.segmentation.deeplabv3_resnet50
torchvision.models.segmentation.deeplabv3_resnet101
↑ResNet50あるいはResNet101をベースに作られた機械学習モデル
https://pytorch.org/docs/stable/torchvision/models.html#object-detection-instance-segmentation-and-person-keypoint-detection
torchvision.models.detection.fasterrcnn_resnet50_fpn
torchvision.models.detection.retinanet_resnet50_fpn
torchvision.models.detection.maskrcnn_resnet50_fpn
torchvision.models.detection.keypointrcnn_resnet50_fpn
↑ResNet50をベースに作られた機械学習モデル
とはいえ
とりあえずResNet50が最優先候補であるものの、用途によっては別のモデルのほうが良かったりもするので、
torchvision.modelsで使える訓練済み機械学習モデルを一通り説明します(親切)
torchvision.modelsで使える訓練済み各機械学習モデルの概要
AlexNet
VGG
ResNet
SqueezeNet
DenceNet
Inception v3
GoogLeNet
ShuffleNet v2
MobileNet v2
ResNeXt
Wide ResNet
MNASNet
AlexNet
画像認識に初めてConvolutional Neural NetworkとDeap Leaningの概念を取り入れたモデル
VGG(VGGNetと呼ばれることも多い)
ニューラルネットワークの層数を増やすことで性能が上がることを示したモデル
vggは画風変換、画風ベクトル検索などに有用であることが知られている
https://pytorch.org/tutorials/advanced/neural_style_tutorial.html
vggの中間ベクトルが、画像の「画風に関する情報」(どの色が頻繁に用いられているか等)を特徴ベクトルとして保持していると考えられる
別の機械学習モデルでもできるのでは?という気がするもののそうした事例は知らない
以下の派生モデルがある
vgg11
vgg11_bn
vgg13
vgg13_bn
vgg16
vgg16_bn
vgg19
vgg19_bn
ResNet
ニューラルネットワークの層数を増やしすぎると性能が悪化するという問題を突破したモデル
現状、resnet50が計算量、訓練済みモデルのサイズ、精度のバランスが最も良い
リアルタイム物体検出のBackboneアルゴリズムとして採用されていることが多い
以下の派生モデルがある
resnet18
resnet34
resnet50
resnet101
resnet152
SqueezeNet
AlexNetと同程度の性能を保ちつつ学習データを極めて小さくしてメモリ消費量を減らすことを目指して作られたモデル
以下の派生モデルがある
squeezenet1_0
squeezenet1_1
DenseNet
ResNetと同様に、ニューラルネットワークの層数を増やしすぎると性能が悪化するという問題を突破する別のアイデアで作られたモデル
以下の派生モデルがある
densenet121
densenet169
densenet161
densenet201
Inception v3
GoogLeNet
ShuffleNet v2
SqueezeNet同様、モバイル端末などリソースの限られた状況でも高性能・高精度で動くことを目指して作られたモデル
以下の派生モデルがある
shufflenet_v2_x0_5
shufflenet_v2_x1_0
shufflenet_v2_x1_5
shufflenet_v2_x2_0
MobileNet v2
SqueezeNet同様、モバイル端末などリソースの限られた状況でも高性能・高精度で動くことを目指して作られたモデル
ResNeXt
以下の派生モデルがある
resnext50_32x4d
resnext101_32x8d
Wide ResNet
以下の派生モデルがある
wide_resnet50_2
wide_resnet101_2
MNASNet
以下の派生モデルがある
mnasnet0_5
mnasnet0_75
mnasnet1_0
mnasnet1_3