2021年中级模拟题(实践)【答案及解析】

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


本例所用数据下载地址: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色彩空间色谱图参考下表:

特别说明
1.本代码通过HSV色彩空间实现指定色彩区域的查询
2.在指定色彩区域内,通过边缘识别算法获取方块的边缘
3.通过实现观察方块的尺度来判断方块的面积应该大于10000平方像素,然后通过验证轮廓面积来排除面积较小的区域


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: 请补充代码完成网络结构

【特别说明】

  1. 以上代码,在第一次执行的时候,会自动去服务器上下载mnist数据集,因此必须保证联网,且需要等待一定的时间(根据网络情况可能需要1-5分钟)。下载时显示如下日志信息:
<ipython-input-5-934e9331ae2e>:15: DeprecationWarning: 
Warning:
API "paddle.dataset.mnist.train" is deprecated since 2.0.0, and will be removed in future versions. Please use "paddle.vision.datasets.MNIST" instead.
reason: Please use new dataset API which supports paddle.io.DataLoader 
  trainset = paddle.dataset.mnist.train()
Cache file C:\Users\Administrator\.cache\paddle\dataset\mnist\train-images-idx3-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/train-images-idx3-ubyte.gz 
Begin to download

Download finished
Cache file C:\Users\Administrator\.cache\paddle\dataset\mnist\train-labels-idx1-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/train-labels-idx1-ubyte.gz 
Begin to download
........
Download finished
<ipython-input-5-934e9331ae2e>:16: DeprecationWarning: 
Warning:
API "paddle.dataset.mnist.test" is deprecated since 2.0.0, and will be removed in future versions. Please use "paddle.vision.datasets.MNIST" instead.
reason: Please use new dataset API which supports paddle.io.DataLoader 
  testset = paddle.dataset.mnist.test()
Cache file C:\Users\Administrator\.cache\paddle\dataset\mnist\t10k-images-idx3-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/t10k-images-idx3-ubyte.gz 
Begin to download

Download finished
Cache file C:\Users\Administrator\.cache\paddle\dataset\mnist\t10k-labels-idx1-ubyte.gz not found, downloading https://dataset.bj.bcebos.com/mnist/t10k-labels-idx1-ubyte.gz 
Begin to download
..
Download finished
  1. 由于paddle.dataset.mnist数据集控件在Paddle2.0以后的版本由paddle.dataset.mnist控件所替代。因此,系统还会给出如下警告信息。
<ipython-input-10-8df190a55f79>:15: DeprecationWarning: 
Warning:
API "paddle.dataset.mnist.train" is deprecated since 2.0.0, and will be removed in future versions. Please use "paddle.vision.datasets.MNIST" instead.
reason: Please use new dataset API which supports paddle.io.DataLoader 
  trainset = paddle.dataset.mnist.train()
<ipython-input-10-8df190a55f79>:16: DeprecationWarning: 
Warning:
API "paddle.dataset.mnist.test" is deprecated since 2.0.0, and will be removed in future versions. Please use "paddle.vision.datasets.MNIST" instead.
reason: Please use new dataset API which supports paddle.io.DataLoader 
  testset = paddle.dataset.mnist.test()

任务二:进行模型训练。自行选择合适的优化方法与参数,利用数据集训练模型。要求训练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)

        # 启动训练过程