面试蔚来,飞起。。。


这几天又有一位同学面试了蔚来汽车。比较基础,难度还行。

重点依然是在论文方面,关于论文方面的内容,聊了很多,而且很深入。
最终拿了蔚来的offer。
记录了一部分核心的问题,分享给大家~

咱们今天趁这个机会,聊聊CNN的工作原理~
咱们先来聊聊以卷积神经网络(Convolutional Neural Networks,CNNs) 为论文主题是,可以有哪些考虑的方面,下面给出5点,大家可以参考~
网络结构创新:CNN的网络结构一直在不断演进,你可以考虑提出一种新颖的网络结构,以解决特定的计算机视觉问题。例如,可以探索改进的残差连接、注意力机制或者跨层连接等。
模型优化:CNN模型通常有很多参数,需要大量的计算资源和时间来训练。你可以研究如何通过剪枝、量化、蒸馏等方法,来减少模型的复杂度和计算量,同时保持模型性能。
迁移学习与领域自适应:CNN在迁移学习和领域自适应方面有着广泛的应用。你可以考虑提出一种新的迁移学习方法,能够更好地适应不同的领域或者任务。
解释性与可解释性:CNN模型通常被认为是黑盒模型,难以解释其决策过程。你可以研究如何提高CNN模型的解释性,让人能够更好地理解模型的决策过程。
跨模态学习:跨模态学习是近年来备受关注的研究方向,你可以考虑探索如何将不同模态(如图像和文本)的信息结合起来,来提高计算机视觉任务的性能。
当然,如果要深入,可以根据自己的兴趣和研究方向,选择适合的CNN相关的论文idea。
另外,我整理了700多篇关于计算机视觉的论文~

需要的同学,点击名片,回复“计算机视觉论文”即可~
深入原理
卷积神经网络 是一类深度学习网络,专门用于处理具有类似网格结构的数据,如图像和声音。
CNN在计算机视觉领域取得了巨大成功,被广泛应用于图像分类、物体检测、语义分割等任务。
下面,咱们聊聊关于CNN的一些核心点:
卷积层(Convolutional Layer):卷积层是CNN的核心组成部分,通过卷积操作提取输入图像的特征。卷积操作可以捕获局部的空间信息,并且通过权重共享减少了参数数量。
池化层(Pooling Layer):池化层用于降低卷积层输出的空间维度,减少计算量并提高模型的鲁棒性。常用的池化操作包括最大池化和平均池化。
激活函数(Activation Function):激活函数引入非线性性质,使得CNN能够学习复杂的数据模式。常用的激活函数包括ReLU、Sigmoid和Tanh。
全连接层(Fully Connected Layer):全连接层将卷积层的输出展开成一维向量,并与权重矩阵相乘,得到最终的分类结果。
反向传播(Backpropagation):CNN使用反向传播算法来更新网络参数,使得网络输出尽可能接近真实标签。反向传播通过计算损失函数对各层参数的梯度来实现。
权重共享(Weight Sharing):CNN中的卷积操作使用相同的权重矩阵在不同位置进行计算,这种权重共享减少了模型的参数数量,提高了模型的训练效率。
核心推理
当谈到卷积神经网络(CNN)的原理时,最常见的描述涉及到卷积操作、池化操作、激活函数和全连接层。我会逐步推导这些组成部分的公式,并解释它们的作用。
假设我们有一个输入图像 
,其尺寸为 
,其中 
 是宽度,
 是高度,
 是通道数(比如RGB图像中的3)。
1. 卷积操作(Convolution)
卷积操作将输入图像与卷积核(或滤波器)进行卷积运算,以提取图像的特征。假设我们有一个大小为 
 的卷积核,步长(stride)为 
,填充(padding)为 

卷积操作的输出 
 计算公式如下:
其中:
 是输出特征图的第 
 行,第 
 列,第 
 个通道的像素值。
 是输入图像的像素值。
 是卷积核的权重。
 是偏置项。
2. 池化操作(Pooling)
池化操作用于减小特征图的空间尺寸,降低计算量。常见的池化操作有最大池化和平均池化。假设池化核的大小为 
,池化操作的输出 
 计算公式如下:
其中:
 是池化后的特征图的第 
 行,第 
 列,第 
 个通道的像素值。
3. 激活函数(Activation Function)
激活函数引入非线性,增加网络的表达能力。常见的激活函数有ReLU、Sigmoid和Tanh。假设激活函数为 
,激活函数的输出 
 计算公式如下:
其中:
 是输入激活函数的值。
4. 全连接层(Fully Connected Layer)
全连接层将卷积层输出的特征图展平成一维向量,与权重矩阵相乘,得到最终的分类结果。假设全连接层的权重矩阵为 
,偏置项为 
,全连接层的输出 
 计算公式如下:
这些组成部分一起构成了CNN的基本工作原理。
一个案例
咱们下面举一个关于如何加载图像并进行CNN推理,输出预测结果及可视化特征图。
import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfrom tensorflow.keras import datasets, layers, models# 加载示例图像数据集(这里使用的是Fashion MNIST数据集)(train_images, train_labels), (test_images, test_labels) = datasets.fashion_mnist.load_data()# 数据预处理:将像素值缩放到0到1之间train_images, test_images = train_images / 255.0, test_images / 255.0# 添加一个颜色通道维度train_images = np.expand_dims(train_images, axis=-1)test_images = np.expand_dims(test_images, axis=-1)# 构建CNN模型model = models.Sequential([    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),    layers.MaxPooling2D((2, 2)),    layers.Conv2D(64, (3, 3), activation='relu'),    layers.MaxPooling2D((2, 2)),    layers.Conv2D(64, (3, 3), activation='relu')])# 添加全连接层model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10))# 编译模型model.compile(optimizer='adam',              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),              metrics=['accuracy'])# 训练模型history = model.fit(train_images, train_labels, epochs=10,                     validation_data=(test_images, test_labels))# 可视化模型的第一层卷积核filters, biases = model.layers[0].get_weights()plt.figure(figsize=(8, 8))for i in range(32):    plt.subplot(8, 4, i+1)    plt.imshow(filters[:, :, 0, i], cmap='gray')    plt.axis('off')plt.show()# 可视化模型的特征图# 创建一个新的模型,输出卷积层的特征图activation_model = models.Model(inputs=model.input, outputs=model.layers[0].output)activations = activation_model.predict(test_images[0].reshape(1, 28, 28, 1))plt.figure(figsize=(8, 8))for i in range(32):    plt.subplot(8, 4, i+1)    plt.imshow(activations[0, :, :, i], cmap='viridis')    plt.axis('off')plt.show()# 进行推理并输出预测结果test_img = test_images[0].reshape(1, 28, 28, 1)predictions = model.predict(test_img)predicted_label = np.argmax(predictions)print("Predicted label:", predicted_label)

代码中,关于如何使用CNN对Fashion MNIST数据集进行图像分类,同时可视化了模型的第一层卷积核和特征图。
最后
我整理了700多篇关于计算机视觉的论文~

需要的同学,点击名片,回复“计算机视觉论文”即可~
添加微信:kkcoder,备注:CV,拉你入群,一起学习。

好了,今天的内容先这样,继续想看解决什么问题,评论区留言~
到顶部