2021年中级模拟题(实践)

编辑者:欧新宇
最后修订:2021年12月15日
本教案仅用于内部教学使用,请勿传播


本例所用数据下载地址:IP202101

1. 在目录 data/ 下有一段视频 myVideo.mp4。请使用python编写代码,对视频做分帧处理,读取视频的帧数,并将每一帧保存至 results/myVideo 目录下,命名为 myVideo_0.jpg, myVideo_1.jpg, myVideo_2.jpg...等,以此类推。本项目根目录为 ./Data/IP202101/Q1


2. 有一批彩色积木的图片,放在 data/ 目录下。请使用python编写代码,运用OpenCV库进行图像处理和检测,找到蓝色积木块,并使用绿色框(0,255,0)绘制出蓝色积木的边界矩形。保存绘制后的图像,文件名称修改为 0_checked.jpg, 1_checked.jpg 等以此类推,并保存在 results/checked 目录下。本项目根目录为 ./Data/IP202101/Q2

HSV色彩空间色谱图参考下表:

3. 给定mnist手写数据集(图像大小为28×28),请编写一个卷积神经网络模型完成手写数字的分类模型。要求训练结束后,将最优的模型保存到 results/models/ 目录中。本项目根目录为 ./Data/IP202101/Q3

任务一:搭建一个模型,由一层卷积层,一层最大池化层,一层全连接层组成。卷积层包含10个大小为3×3的卷积核,步长为1,卷积后 特征图尺寸不变;池化层大小为2×2,步长为2;全连接层输出图像属于0到9的每一类的概率。部分代码已经给出。

# 1. 导入必要的依赖
# Q1: 请自行补充需要的依赖

# 2. 设置数据读取器,读取MNIST数据训练器
trainset = paddle.dataset.mnist.train()
testset = paddle.dataset.mnist.test()

# 3. 包装数据读取器,每次读取的数据量设置为batch_size=8,图像形状为 [8, 784]
train_loader = paddle.batch(trainset, batch_size=8)
valid_loader = paddle.batch(testset, batch_size=8)

# 4. 定义mnist数据识别网络结构
class model_mnist(fluid.dygraph.Layer):
    def __init__(self, name_scope, num_classes=1):
        super(model_mnist, self).__init__(name_scope)
        # Q2: 请补充代码外出网络基本层的定义

    def forward(self, x):
        # Q3: 请补充代码完成网络结构

任务二:进行模型训练。自行选择合适的优化方法与参数,利用数据集训练模型。要求训练5轮,每一轮中每个1000个batch输出训练损失;每一轮结束后输出模型在验证集上的准确率与损失。

def mian(model):
    model.train()
    epoch_num = 5

    # Q1: 请补充代码完成模型训练和评估

if __name__ == '__main__':
    # 创建模型
    with fluid.dygraph.guard():
        model = model_mnist('mnist', num_classes=10)

        # 启动训练过程