使用MobileNet进行图像识别
介绍
通过图像来识别物体或特征的过程被称为图像识别。图像识别在医学成像、汽车、安全和检测缺陷等不同领域都有应用。
什么是MobileNet以及为什么它如此受欢迎
MobileNet是使用深度可分离卷积开发的深度学习CNN模型。与同样深度的其他模型相比,该模型大大减少了参数数量。该模型轻巧且经过优化,可在移动设备和边缘设备上运行。到目前为止,已发布了三个版本的MobileNet,即MobileNet v1、v2和v3。MobileNet是由Google开发的。
让我们稍微了解一下已经存在于机器学习领域已经有一段时间的MobileNet V1和V2。
MobileNetV2相对于MobileNet V1提供了两个全面的特性。它们是:
- MobileNetV2在层之间使用了线性瓶颈。它通过不允许非线性破坏太多信息来保留信息。
-
瓶颈之间的短连接
MobileNetv2的架构
输入 | 操作符 | T | C | N | S |
---|---|---|---|---|---|
2242 X 3 | conv2d | - | 32 | 1 | 2 |
112 2 X 32 | bottleneck | 1 | 16 | 1 | 1 |
112 2 X 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相比其他网络的优势
- MobileNet具有更高的分类准确度和较少的参数。
-
MobileNet小巧,延迟低,功耗优化,非常适合移动和嵌入式设备。
-
它们是用于分割和目标检测的高效特征提取器。
图像识别的好处
-
用于自动驾驶车辆和机器人来检测障碍物。
-
在OCR技术中广泛应用于从图像中提取信息。
-
交通车道检测。
-
人脸检测和考勤系统。
-
图像字幕和标记,在社交媒体网站中非常有用。
结论
图像识别已经成为每个物体检测和视频相关任务的初步任务。随着已经可用的大量预训练模型和架构,图像识别在与视觉相关的当前人工智能领域非常重要。