本篇为《计算机视觉 CV 十天入门基础》系列 Day10。今天我们将学习深度学习在计算机视觉中的基础应用,包括图像分类与目标检测的核心原理,卷积神经网络(CNN)的基本结构与应用,简要介绍主流深度学习框架(如 TensorFlow、Keras、PyTorch),以及如何使用预训练模型进行实际的分类与检测任务。
深度学习是通过多层神经网络学习数据特征的技术。在计算机视觉中,深度学习特别适用于图像分类、目标检测、分割等任务。
卷积神经网络(CNN)是一种深度神经网络,擅长处理具有网格结构的输入数据,尤其在图像分类、目标检测和语义分割等视觉任务中取得了巨大成功。
# pip install tensorflow opencv-python matplotlib
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions
# 加载预训练的 MobileNetV2 模型
model = MobileNetV2(weights='imagenet')
# 读取并预处理输入图像
img_path = 'example.jpg' # 替换为你的图像路径
img = cv2.imread(img_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_resized = cv2.resize(img, (224, 224)) # 调整为 MobileNetV2 输入尺寸
# 预处理图像并预测
img_array = image.img_to_array(img_resized)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)
# 获取预测结果
predictions = model.predict(img_array)
decoded_predictions = decode_predictions(predictions, top=3)[0]
# 打印前3个预测类别及其概率
for i, (imagenet_id, label, score) in enumerate(decoded_predictions):
print(f"{i+1}. {label}: {score*100:.2f}%")
卷积层(Convolutional Layer):通过卷积核对图像进行滤波操作,从局部到全局提取特征。
激活函数(ReLU):非线性激活函数,通常使用 ReLU(Rectified Linear Unit)进行处理。
池化层(Pooling Layer):通过池化操作降低图像维度,减少计算量与过拟合。
全连接层(Fully Connected Layer):将特征映射到输出空间,进行最终的分类任务。
常见CNN架构:
LeNet:用于数字识别的早期CNN模型
AlexNet:通过ReLU加速训练,显著提高图像分类精度
VGGNet:采用更深的网络结构,显著提升性能
ResNet:通过残差连接解决深度网络训练难题
任务1:使用其他预训练模型(如 VGG16、ResNet50)对图像进行分类,比较不同模型的预测效果。
任务2:修改上面的代码,加载自己的图片并查看分类结果,记录模型分类性能。
任务3:尝试将 Keras 的模型转换为 TensorFlow 模型,并进行目标检测。
任务4:利用 TensorFlow 或 PyTorch 在公开数据集(如 CIFAR-10)上进行训练,尝试优化模型性能。
今天我们深入了解了深度学习在计算机视觉中的应用,尤其是图像分类与目标检测:
介绍了卷积神经网络(CNN)如何提取图像特征
实践了如何利用预训练的深度学习模型(如 MobileNetV2)进行图像分类任务
掌握了 TensorFlow 中的 MobileNetV2 模型的基本用法
这些技术为后续的目标检测、图像分割等任务打下了坚实的基础。