使用VGG16对水果进行图像识别


1. 1。背景

当我使用Keras专注于兴趣实现图像识别时,这出乎意料地容易,因此我决定在希望实现更精确模型的朋友的推荐下使用VGG16。
我是一个初学者,所以我将尝试查找更多信息。
这次,我们将使用苹果Orin的图像来评估它是否可以应用于品种。
只是个备忘录。

2. 2。 VGG16首先是什么? :thinking:

VGG16是在称为" ImageNet"的大规模图像数据集上训练的16层CNN模型。它于2014年宣布。它是各种研究中使用的著名训练模型之一。使用ImageNet训练的其他模型包括AlexNet,GoogLeNet和ResNet。
https://www.y-shinno.com/keras-vgg16/

以下是此处与AlexNet,GoogLeNet和ResNet进行比较的参考。

(来源:http://thunders1028.hatenablog.com/entry/2017/11/01/035609)

牛津大学VGG团队的网络在2014年ILSVRC中获得第二名。普通的CNN由卷积层和池化层组成,后者是AlexNet的更深版本,具有16或19层的重量(卷积层或完全连接的层)。它们分别称为VGG16和VGG19。

它具有以下结构:连续堆叠两到四个带小滤镜的卷积层,并通过合并层将其大小减半。看起来,通过卷积多个较小的滤镜(=加深图层),可以比通过大滤镜一次卷积图像更好地提取特征。 (我不太清楚原因,但是激活函数被传递的次数增加了,所以表达性增加了吗?)[2]

GoogleNet似乎更强大,但我将尝试VGG并强调可理解性。 (看来困难的事情将从下一次开始)

3. 3。 VGG16简介(使用Google Colab)

我将立即编写代码。
首先,导入Keras的

vgg16_fluits.py

1
!pip install keras

接下来,导入所需的库。
VGG16包含在Keras中。
重量在下面的第三行中指定。

1
2
3
4
5
#モデルをimportしてサマリー表示してみる
import numpy as np
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)
model.summary()

<详细信息>

model.summary()结果
型号:" vgg16"

图层(类型)输出形状参数

input_3(InputLayer)(无,224,224,3)0

block1_conv1(Conv2D)(无,224,224,64)1792

block1_conv2(Conv2D)(无,224,224,64)36928

block1_pool(MaxPooling2D)(无,112,112,64)0

block2_conv1(Conv2D)(无,112,112,128)73856

block2_conv2(Conv2D)(无,112,112,128)147584

block2_pool(MaxPooling2D)(无,56、56、128)0

block3_conv1(Conv2D)(无,56,56,56,256)295168

block3_conv2(Conv2D)(无,56,56,56,256)590080

block3_conv3(Conv2D)(无,56,56,56,256)590080

block3_pool(MaxPooling2D)(无,28,28,256)0

block4_conv1(Conv2D)(无,28,28,512)1180160

block4_conv2(Conv2D)(无,28,28,512)2359808

block4_conv3(Conv2D)(无,28,28,512)2359808

block4_pool(MaxPooling2D)(无,14,14,14,512)0

block5_conv1(Conv2D)(无,14,14,14,512)2359808

block5_conv2(Conv2D)(无,14,14,14,512)2359808

block5_conv3(Conv2D)(无,14、14、512)2359808

block5_pool(MaxPooling2D)(无,7,7,512)0

展平(Flatten)(无25088)0

fc1(密集)(无,4096)102764544

fc2(密集)(无,4096)16781312

预测(密集)(无,1000)4097000

参数总数:138,357,544
可训练的参数:138,357,544
不可训练的参数:0

这次使用的图像评估苹果(奥林)。
apple_orin.jpg

1
2
3
4
5
6
7
8
9
10
11
  #画像の読み取り
from PIL import Image
#import glob
url = '/content/drive/My Drive/Colab Notebooks/img'
files=url+"/apple_orin.jpg"
image =Image.open(files)
image=image.convert('RGB')
image=image.resize((224,224))

# 読み込んだPIL形式の画像をarrayに変換
data = np.asarray(image)
1
2
3
4
5
6
7
8
9
10
#評価
from keras.preprocessing import image

#サンプル数の次元を1つ増やし四次元テンソルに
data = np.expand_dims(data, axis=0)
#上位5を出力
preds = model.predict(preprocess_input(data))
results = decode_predictions(preds, top=5)[0]
for result in results:
    print(result)

('n07742313','Granny_Smith',0.9861995)
('n02948072','蜡烛',0.0040857443)
('n07747607','橙色',0.001778649)
('n03887697','paper_towel',0.0016588464)
('n07693725','百吉饼',0.0012920648)

变成

4。结果

" Granny_Smith"的第一名是什么?

格兰尼·史密斯(英语:Granny Smith)是苹果的一个品种。玛丽亚·安·史密斯(Maria Ann Smith)于1868年在澳大利亚作为偶然种苗而开发。
commodity-granny-smith.jpg

通过说

,图像本身就非常接近,因此看起来精度很高。 ImageNet可能没有Orin上的数据。

ImageNet的1000个类顺序,标签和类名称信息汇总在以下JSON文件中。
以下是Granny_Smith。

https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json

由于需要进行单独学习才能进行图像识别甚至判断品种,因此我们将从下一次开始进行学习。

这次的目的是尝试一下,所以可以。

从下一次开始,创建一个可以应用于该品种的模型。

5,考虑

以下几点是使用VGG16模型的关键。

1
model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)

细节

<表格>

参数

说明


<身体>

include_top

是否包括分类为1000个类别的完全连接的图层。

真:包括在内(单击此处可使用原始的1000个分类)


错误:不包括在内(单击此处进行自定义)


权重

重量类型

imagenet:使用ImageNet学习的权重


无:随机


input_tensor

输入模型图像时使用

任意图像数据:使用它


无:未使用


input_shape

指定输入图像的形状

任意形状:使用它


无:已使用(224,224,3)




将include_top设置为False,并使用VGG16进行特征提取以进行微调。 (下一次)

参考(您要做什么)
http://aidiary.hatenablog.com/entry/20170131/1485864665