使用MobileNet的图像识别
简介
用图像识别一个物体或特征的过程被称为图像识别。图像识别在不同的领域都能找到它的位置,无论是医学成像、汽车、安全还是检测缺陷。
什么是MobileNet,为什么它如此受欢迎?
MobileNet是使用深度可分离卷积开发的深度学习CNN模型。与其他相同深度的模型相比,这个模型高度减少了参数的数量。这个模型是轻量级的,并被优化为在移动和边缘设备上运行。到目前为止,Mobilenet有三个版本。即MobileNet v1、v2和v3。Mobilenet是由谷歌开发的。
让我们来谈一谈MobileNet V1和V2,它们在ML领域已经有相当长的时间了。
与MobileNet V1相比,MobileNetV2提供了两个广泛的功能。它们是
- MobileNetV2在各层之间有一个线性瓶颈。它通过不允许非线性破坏太多的信息来保存信息
-
瓶颈之间的短距离连接
MobileNet v2的架构
INPUT | OPERATOR | T | C | N | S |
---|---|---|---|---|---|
2242 X 3 | conv2d | − | 32 | 1 | 2 |
1122X 32 | bottleneck | 1 | 16 | 1 | 1 |
1122X 16 | bottleneck | 6 | 24 | 2 | 2 |
562 X 24 | bottleneck | 6 | 32 | 3 | 2 |
282 X 32 | bottleneck | 6 | 64 | 4 | 2 |
142 X 64 | bottleneck | 6 | 96 | 3 | 1 |
142 X 96 | bottleneck | 6 | 160 | 3 | 2 |
72 X 160 | bottleneck | 6 | 320 | 1 | 1 |
72 X 320 | conv2d 1×1 1 | − | 1280 | 1 | 1 |
72 X 1280 | avgpool 7×7 | − | − | 1 | − |
1 X1 X 1280 | conv2d 1×1 | − | k | − | − |
MobileNet v1和Mobilenet V2的比较
SIZE | MOBILENETV1 | MOBILENETV2 | SHUFFLENET (2X,G=3) |
---|---|---|---|
112X112 | 64/1600 | 16/400 | 32/800 |
56×56 | 128/800 | 32/200 | 48/300 |
28×28 | 256/400 | 64/100 | 400/600K |
14×14 | 512/200 | 160/62 | 800/310 |
7×7 | 1024/199 | 320/32 | 1600/156 |
1×1 | 1024/2 | 1280/2 | 1600/3 |
max | 1600K | 400K | 600K |
图像识别的代码实现
示例
## MOBILENET
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.metrics import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.applications import imagenet_utils
import matplotlib.pyplot as plt
from IPython.display import Image,display
%matplotlib inline
mobile = tf.keras.applications.mobilenet.MobileNet()
def format_image(file):
image_path = '/content/images/'
img = image.load_img(image_path + file, target_size=(224, 224))
img_array = image.img_to_array(img)
img_array_exp_dims = np.expand_dims(img_array, axis=0)
return tf.keras.applications.mobilenet.preprocess_input(img_array_exp_dims)
display(Image(filename='/content/images/image.jpg', width=300,height=200))
preprocessed_img = format_image('image.jpg')
prediction_results = mobile.predict(preprocessed_img)
results = imagenet_utils.decode_predictions(prediction_results)
print(results)
输出
[[('n02279972', 'monarch', 0.58884907), ('n02281406', 'sulphur_butterfly',
0.18508224), ('n02277742', 'ringlet', 0.15471826), ('n02281787', 'lycaenid', 0.04744451),
('n02276258', 'admiral', 0.01013135)]]
与其他网络相比,MobileNet的优势
- 移动网络具有更高的分类精度和更少的参数。
-
MobileNets体积小,延迟低,功耗优化,最适合于移动和嵌入式设备。
-
它们是高效的特征提取器,用于分割和物体检测。
图像识别的好处
-
自主车辆和机器人用于探测障碍物
-
高度应用于OCR技术,从图像中检索信息
-
交通车道检测
-
人脸检测和考勤系统
-
给图片加标题和标签,在社会媒体网站上很有用。
总结
图像识别已经成为每个物体检测和视频相关任务的初步任务。由于已经有了大量的预训练模型和架构,它在当前与视觉相关的人工智能领域已经变得非常重要。