​Xception v3:深度学习的新篇章

文摘   2024-10-29 21:36   中国澳门  

简介

Xception v3,作为深度学习领域的一大突破,是由Google团队继Inception系列之后提出的又一力作。它不仅继承了Inception架构的核心思想,还通过引入深度可分离卷积(depthwise separable convolution),进一步优化了模型的性能和效率。

Xception v3的核心改进

Xception v3的核心改进在于其对Inception v3中的卷积操作进行了革命性的替换。传统的卷积操作试图在3D空间(高度、宽度、通道)中学习特征,而Xception v3则采用了深度可分离卷积,将通道的卷积与空间的卷积进行分离,这样做的好处是减少了模型的参数量和计算量,同时提高了模型的效率。

深度可分离卷积

深度可分离卷积是Xception v3的亮点之一,它将传统的卷积操作分解为两个步骤:首先进行逐通道的空间卷积(depthwise convolution),然后通过1x1的卷积(pointwise convolution)来合并跨通道的信息。这种设计不仅减少了参数数量,还提高了模型的计算效率。

Xception v3的结构

Xception v3的结构可以分为三个部分:Entry flow、Middle flow和Exit flow。这种结构设计使得模型在保持深度的同时,也能够有效地控制参数数量和计算复杂度。

  • Entry flow:包含若干个卷积层,用于初步提取图像特征。
  • Middle flow:通过重复的卷积层和深度可分离卷积层,进一步提取和加工特征。
  • Exit flow:最终的卷积层,用于生成模型的输出。

 

Xception v3的性能

在ImageNet数据集上,Xception v3展现出了略优于Inception v3的性能。更重要的是,Xception v3在参数数量与Inception v3相当的情况下,实现了性能的提升,这表明Xception v3在模型参数的使用上更为高效。

Xception v3的应用前景

Xception v3因其高效的特征提取能力和较低的计算成本,被广泛应用于图像分类、目标检测和图像分割等计算机视觉任务中。特别是在移动和嵌入式设备上,Xception v3的轻量化特性使其成为理想的选择。

结论

Xception v3作为Inception系列的延续,通过深度可分离卷积的引入,不仅提升了模型的性能,还大幅提高了计算效率。它的出现,为深度学习在资源受限的环境中的应用提供了新的可能性,预示着深度学习模型设计的新方向。


代码实现

import timefrom matplotlib import pyplot as pltimport numpy as npimport cv2import osfrom keras.applications import Xceptionfrom keras.applications.xception import preprocess_inputfrom keras.models import Modelfrom keras.layers import Dense, Flattenfrom keras.optimizers import Adamfrom sklearn.model_selection import train_test_splitfrom tqdm import tqdm
# 读取数据(仅加载前1000个样本)def load_data(txt_file, img_size, max_samples=1000): images = [] labels = [] count = 0 # 计数器 with open(txt_file, 'r') as file: for line in tqdm(file.readlines(), ncols=150, colour='red'): if count >= max_samples: # 只加载前 max_samples 个数据 break img_path, label = line.strip().split() img = cv2.imread(img_path) img = cv2.resize(img, (img_size, img_size)) # 调整图像大小 img = preprocess_input(img) # 预处理 images.append(img) labels.append(int(label)) count += 1 return np.array(images), np.array(labels)
# 记录训练开始时间start_time = time.time()# 加载训练数据集img_size = 299 # Xception 输入尺寸train_txt_file = r"data\datapath\training_set.txt" # 训练集 txt 文件路径X_train, y_train = load_data(train_txt_file, img_size, max_samples=20000)
# 加载测试数据集test_txt_file = r"data\datapath\testing_set.txt" # 测试集 txt 文件路径X_test, y_test = load_data(test_txt_file, img_size, max_samples=1000)
# 使用 Xception 模型base_model = Xception(weights='imagenet', include_top=False, input_shape=(img_size, img_size, 3))
# 取消 Xception 的卷积层冻结,使模型可训练for layer in base_model.layers: layer.trainable = True
# 添加自定义的全连接层x = Flatten()(base_model.output)x = Dense(128, activation='relu')(x)x = Dense(64, activation='relu')(x)output = Dense(1, activation='sigmoid')(x) # 二分类问题
# 创建模型model = Model(inputs=base_model.input, outputs=output)
# 编译模型model.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy', metrics=['acc'])
# 训练模型batch_size = 32epochs = 10
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(X_test, y_test))# 记录训练结束时间并计算训练时间train_time = time.time() - start_timeprint(f"Total Training Time: {train_time:.2f} seconds")
# 打印训练精度train_acc = history.history['acc'][-1]print(f"Final Training Accuracy: {train_acc * 100:.2f}%")
# 记录测试开始时间start_test_time = time.time()
# 评估模型test_loss, test_acc = model.evaluate(X_test, y_test)
# 记录测试结束时间并计算测试时间test_time = time.time() - start_test_timeprint(f"Total Testing Time: {test_time:.2f} seconds")print(f"Test Accuracy: {test_acc * 100:.2f}%")
# 绘制损失曲线plt.plot(history.history['loss'], label='Training Loss')plt.plot(history.history['acc'], label='Training accuracy')plt.title('Training and Validation Loss')plt.xlabel('Epochs')plt.ylabel('Loss')plt.legend()plt.show()


海洋遥感Dynamic和AI
海洋遥感(基于光学遥感、合成孔径雷达、卫星测高数据等的海洋现象研究),主要方法为人工智能与海洋动力学的结合,本公粽号将会进行代码、资料,文献等分享。