【2025校招】4399 NLP算法工程师笔试题

目录

  • 1. 第一题
  • 2. 第二题
  • 3. 第三题

⏰ 时间:2024/08/19
🔄 输入输出:ACM格式
⏳ 时长:2h

本试卷分为单选,自我评价题,编程题

单选和自我评价这里不再介绍,4399的编程题一如既往地抽象,明明是NLP岗位的笔试题,却考了OpenCV相关的知识。btw,跟网友讨论了下,4399似乎不同时间节点的笔试题是一样的???

1. 第一题

第一题是LC原题:441. 排列硬币,题目和题解请前往LC查看。

2. 第二题

题目描述

请使用OpenCV库编写程序,实现在视频文件中实时追踪一个人手持手机绿幕的四个顶点的坐标。

要求

  1. 使用颜色分割技术检测绿幕区域。(8分)
  2. 使用适当的方法(如轮廓检测)找到绿幕的四个顶点。(10分)
  3. 在视频帧中标记出这四个顶点。(8分)

手机绿幕指:手机屏幕显示全绿色图片,用于后期处理替换为其他界面,绿色范围:lower_green = np.array([35, 100, 100])upper_green = np.array([85, 255, 255])

测试用例

输入:green_screen_track.mp4

输出:带顶点标记的视频序列帧图片


题解

import cv2
import numpy as nplower_green = np.array([35, 100, 100])
upper_green = np.array([85, 255, 255])def get_largest_contour(contours):""" 获取最大轮廓 """max_contour = max(contours, key=cv2.contourArea)return max_contourdef get_four_vertices(contour):""" 近似轮廓为四边形 """epsilon = 0.02 * cv2.arcLength(contour, True)approx = cv2.approxPolyDP(contour, epsilon, True)if len(approx) == 4:return approx.reshape(4, 2)else:return Nonedef main(video_path):cap = cv2.VideoCapture(video_path)while cap.isOpened():ret, frame = cap.read()if not ret:breakhsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)mask = cv2.inRange(hsv_frame, lower_green, upper_green)contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)if contours:largest_contour = get_largest_contour(contours)vertices = get_four_vertices(largest_contour)if vertices is not None:for (x, y) in vertices:cv2.circle(frame, (x, y), 5, (0, 0, 255), -1)cv2.polylines(frame, [vertices], isClosed=True, color=(0, 255, 0), thickness=2)cv2.imshow('Green Screen Tracking', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == "__main__":video_path = 'green_screen_track.mp4'main(video_path)

3. 第三题

You can use Chinese to answer the questions.

Problem Description

You need to use the Swin Transformer model to train a binary classifier to identify whether an image contains a green screen. Green screens are commonly used in video production and photography for background replacement in post-production. Your task is to write a program that uses the Swin Transformer model to train and evaluate the performance of this classifier.

Input Data

  1. Training Dataset: A set of images, including images with and without green screens.
  2. Labels: Labels for each image, where 0 indicates no green screen and 1 indicates the presence of a green screen.

Output Requirements

  1. Trained Model: Train a binary classifier using the Swin Transformer model.
  2. Model Evaluation: Evaluate the model’s accuracy, precision, recall, and F1-score on a validation or test set.

Programming Requirements

  1. Data Preprocessing: Including image loading, normalization, and label processing.
  2. Model Definition: Using the Swin Transformer model.
  3. Training Process: Including loss function, optimizer, and training loop.
  4. Evaluation Process: Evaluate the model’s performance on the validation or test set.
  5. Results Presentation: Output evaluation metrics and visualize some prediction results.

Here is a sample code framework to help you get started:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset
from torchvision import transforms, datasets
from swin_transformer_pytorch import SwinTransformer
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from PIL import Image# Dataset class definition
class GreenScreenDataset(Dataset):def __init__(self, image_paths, labels, transform=None):self.image_paths = image_pathsself.labels = labelsself.transform = transformdef __len__(self):return len(self.image_paths)def __getitem__(self, idx):image = Image.open(self.image_paths[idx]).convert('RGB')label = self.labels[idx]if self.transform:image = self.transform(image)return image, label# Data preprocessing, please define transform
# TODO# Load datasets
train_dataset = GreenScreenDataset(train_image_paths, train_labels, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)val_dataset = GreenScreenDataset(val_image_paths, val_labels, transform=transform)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)# Define the SwinTransformer model
# TODO# Loss function and optimizer
criterion = nn.CrossEntropyLoss()
# TODO# Training process
def train(model, train_loader, criterion, optimizer, num_epochs=10):model.train()for epoch in range(num_epochs):running_loss = 0.0for images, labels in train_loader:# TODO: forward pass, compute loss, backpropagation, optimizer steprunning_loss += loss.item()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}')# Evaluation process
def evaluate(model, val_loader):model.eval()all_preds = []all_labels = []with torch.no_grad():for images, labels in val_loader:outputs = model(images)_, preds = torch.max(outputs, 1)all_preds.extend(preds.cpu().numpy())all_labels.extend(labels.cpu().numpy())accuracy = accuracy_score(all_labels, all_preds)# TODO: Calculate precision, recall, and F1-scoreprint(f'Accuracy: {accuracy:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1-score: {f1:.4f}')# Train the model
train(model, train_loader, criterion, optimizer, num_epochs=10)# Evaluate the model
evaluate(model, val_loader)

题解

该问题要求训练一个基于Swin Transformer模型的二分类器,用以识别图像中是否包含绿幕。解决方案涉及数据预处理、模型设计、训练和评估等多个环节。

首先,在数据预处理阶段,图像需要被调整大小并进行归一化,以满足Swin Transformer的输入需求。此外,数据集中的标签是二值化的,分别代表有无绿幕(0表示无绿幕,1表示有绿幕),确保数据集类能够准确处理这些标签是至关重要的。在模型设计上,使用了预训练的Swin Transformer模型,并针对二分类任务进行了微调。输出层被替换为一个具有两个节点的全连接层,分别对应两个类别。通过这种方式,模型能够有效地适应二分类任务。训练过程采用了标准的训练循环,设置了损失函数和优化器,并使用学习率调度器动态调整学习率。此外,为了防止过拟合,模型在训练过程中还应用了正则化技术,如dropout。在模型评估阶段,除了准确率,还使用了精确率、召回率和F1分数等指标,以全面评估模型在二分类任务中的表现。同时,为了更直观地展示模型效果,选择了一些样本图像进行可视化,显示它们的预测结果与实际标签的对比。

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset
from torchvision import transforms
from swin_transformer_pytorch import SwinTransformer
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np# 数据集类定义
class GreenScreenDataset(Dataset):def __init__(self, image_paths, labels, transform=None):self.image_paths = image_pathsself.labels = labelsself.transform = transformdef __len__(self):return len(self.image_paths)def __getitem__(self, idx):image = Image.open(self.image_paths[idx]).convert('RGB')label = self.labels[idx]if self.transform:image = self.transform(image)return image, torch.tensor(label, dtype=torch.long)# 数据预处理
transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])train_dataset = GreenScreenDataset(train_image_paths, train_labels, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)val_dataset = GreenScreenDataset(val_image_paths, val_labels, transform=transform)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)model = SwinTransformer(hidden_dim=96,layers=(2, 2, 6, 2),num_heads=(3, 6, 12, 24),num_classes=2,window_size=7,input_resolution=224
)
model = model.to(torch.device('cuda' if torch.cuda.is_available() else 'cpu'))criterion = nn.CrossEntropyLoss()
optimizer = optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)# 训练
def train(model, train_loader, criterion, optimizer, scheduler, num_epochs=10):model.train()for epoch in range(num_epochs):running_loss = 0.0for images, labels in train_loader:images, labels = images.to(device), labels.to(device)optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()scheduler.step()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}')# 模型评估
def evaluate(model, val_loader):model.eval()all_preds = []all_labels = []with torch.no_grad():for images, labels in val_loader:images, labels = images.to(device), labels.to(device)outputs = model(images)_, preds = torch.max(outputs, 1)all_preds.extend(preds.cpu().numpy())all_labels.extend(labels.cpu().numpy())accuracy = accuracy_score(all_labels, all_preds)precision = precision_score(all_labels, all_preds)recall = recall_score(all_labels, all_preds)f1 = f1_score(all_labels, all_preds)print(f'Accuracy: {accuracy:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1-score: {f1:.4f}')return all_preds, all_labels# 可视化
def visualize_predictions(val_loader, model):model.eval()images, labels = next(iter(val_loader))images, labels = images.to(device), labels.to(device)outputs = model(images)_, preds = torch.max(outputs, 1)images = images.cpu().numpy()preds = preds.cpu().numpy()labels = labels.cpu().numpy()# 可视化前6个样本plt.figure(figsize=(12, 8))for i in range(6):plt.subplot(2, 3, i + 1)image = np.transpose(images[i], (1, 2, 0))image = image * np.array([0.229, 0.224, 0.225]) + np.array([0.485, 0.456, 0.406])  # 反归一化image = np.clip(image, 0, 1)plt.imshow(image)plt.title(f'Pred: {preds[i]}, Actual: {labels[i]}')plt.axis('off')plt.show()device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
train(model, train_loader, criterion, optimizer, scheduler, num_epochs=10)
all_preds, all_labels = evaluate(model, val_loader)
visualize_predictions(val_loader, model)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级调度1

一.初始化容器InitContainer 1.定义 initContainers 是 Kubernetes Pod 中的一个功能,用于在主容器启动之前执行初始化任务。initContainers 与主容器的作用不同,它们在主容器启动之前运行,并且可以完成准备工作,如下载依赖、配…

Nginx: 反向代理之upstream模块以及完整配置反向代理示例

upstream模块 对于upstream模块而说,它默认已经被编译进Nginx中了想禁用的话,通过 –without-http_upstream_model 这样一个参数来明确的禁用 1 )基本用法 1.1 upstream 语法: upstream name { … }默认值:无上下文…

xss-labs通关攻略 11-15关

第十一关:less-11 步骤一:利用burp抓包 步骤二:添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第十二关:less-12 步骤一:利用burp抓包 步骤二:修改User A…

springboot集成elasticsearch(7.17.22)

官方文档地址:Javadoc | Elasticsearch Java API Client [7.17] | Elastic springboot版本2.1.3 1.pom文件 以下是如何使用maven作为依赖关系管理器配置依赖关系。将以下内容添加到pom.xml文件中: 注:版本号一定要和elasticsearch的版本号…

IDEA2022配置JDK1.8版本与Maven3.3依赖包

第一步: 根据window / linux环境,安装不同IDEA2022 和 下载不同JDK1.8。 Maven依赖包可在不同环境共用,但需要更换Maven依赖包中conf > settings.xml。 第二步: 配置IEDA中JDK1.8版本 File > Project Structure > Proj…

如何使用JMeter的JSON提取器解析JSON响应

在性能测试和API测试中,经常需要处理JSON格式的数据。Apache JMeter提供了一个强大的工具——JSON提取器,用于从JSON响应中提取特定的值。本文将通过一个实际的例子,演示如何使用JMeter的JSON提取器来解析JSON响应。 背景 假设我们收到了一…

gevent 入门篇

gevent 入门篇 并发编程模型主要有: 多进程,多线程,事件驱动, 协程. gevent 是基于协程的异步框架,它需要依赖于greenlet.gevent有什么样的优势? 先来通过一个简单的例子对比同步执行一个方法和使用gevent的异步方式. 普通的单线程同步执行任务 import timedef sync_task()…

Chrome 渲染器中的对象转换到 RCE

在本文中,我将利用CVE-2024-5830,这是 Chrome 的 JavaScript 引擎 v8 中的一个类型混淆错误,我于 2024 年 5 月将其报告为错误 342456991。该错误已在版本126.0.6478.56/57中修复。此错误允许通过一次访问恶意网站在 Chrome 的渲染器沙箱中执行远程代码执行 (RCE)。 V8 中的…

前端Html5/Css3—div盒子模型

文章目录 第六章 盒子模型6.1 border边框6.2 border-width粗细6.3 border-style边框样式6.4 border简写6.5 margin外边距6.6 padding内边距6.7 盒子模型尺寸6.8 box-sizing6.9 border-radius圆角边框6.9.1 制作圆形6.9.2 半圆6.9.3 四分之一圆 6.10 box-shadow盒子阴影 第六章 …

速盾:中小企业网站cdn加速方案?

中小企业网站在如今的互联网时代中起到了非常重要的作用,能够帮助企业提升品牌形象、增加曝光度、吸引潜在客户等。然而,随着用户对网页加载速度的要求越来越高,网站的访问速度成为决定用户是否留在网站的关键因素之一。为了提升网站的访问速…

通过css,js html结合实现第一个页面

html以及 js代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link …

react调用子组件方法`TS2304: Cannot find name ‘Ref‘`

文章目录 发现宝藏1. 使用正确的 React.Ref 类型2. 使用 React.Ref 或 React.RefObject 作为 ref 类型3. 确保你的 tsconfig.json 设置正确总结 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

【机器学习】独立成分分析的基本概念、应用领域、具体实例(含python代码)以及ICA和PCA的联系和区别

引言 独立成分分析&#xff08;Independent Component Analysis&#xff0c;简称ICA&#xff09;是一种统计方法&#xff0c;用于从多个观察到的混合信号中提取出原始的独立信号源 文章目录 引言一、独立成分分析1.1 定义1.2 独立成分分析的基本原理1.3 独立成分分析的步骤1.3.…

Java重修笔记 第四十三天 Set 集合、HashSet 类

Set 接口 1. 它是无序的&#xff08;添加和取出的顺序不一致&#xff0c;但取出的结果是固定的&#xff09;&#xff0c;没有索引 2. Set 接口也是 Collection 的子接口&#xff0c;所以继承了 Collection 的方法 3. Set 接口的遍历方式有两种&#xff0c;迭代器和增强 for…

计算机专业的真正的就业情况

首先听到计算机行业&#xff0c;大多数人岗位已经饱和&#xff0c;前端已死&#xff0c;程序员35岁危机。但是事实上这些认知都是片面的&#xff0c;今天由我来为大家分析计算机行业的内幕。 疫情过后&#xff0c;过内各种行业都受到了冲击&#xff0c;你们敢说除了体制内的行业…

速盾:高防 CDN 如何提高电子商务网站的性能和用户体验?

随着电子商务的迅速发展&#xff0c;电子商务网站的性能和用户体验成为了至关重要的因素。其中&#xff0c;高防 CDN&#xff08;内容分发网络&#xff09;可以为电子商务网站提供很大的帮助&#xff0c;使其能够提高性能和用户体验。下面将详细介绍高防 CDN 如何实现这一目标。…

RACL: Adversarially Robust Neural Architectures

RACL: 对抗鲁棒网络架构 论文链接&#xff1a;https://arxiv.org/abs/2009.00902v2 Abstract 深度神经网络(DNN)容易受到对抗性攻击。现有的方法致力于开发各种鲁棒训练策略或正则化来更新神经网络的权值。但除了权重之外&#xff0c;网络中的整体结构和信息流是由网络架构明…

模块一(任务3):WDM系统原理解读

一、WDM的概念及波段划分 1、WDM系统概念 WDM系统就像高铁系统一样&#xff0c;这里可以将一根光纤看做是一个多车道的高速铁路。 把不同波长的光信号组合起来&#xff08;也就是复用&#xff09;&#xff0c;进入到同一根光纤中进行传输&#xff0c;在接收端将组合波长的光信…

图形学论文笔记

文章目录 PBD&#xff1a;XPBD&#xff1a;shape matching PBD&#xff1a; 【深入浅出 Nvidia FleX】(1) Position Based Dynamics 最简化的PBD(基于位置的动力学)算法详解-论文原理讲解和太极代码 最简化的PBD(基于位置的动力学)算法详解-论文原理讲解和太极代码 XPBD&…

​经​纬​恒​润​一​面​

1. 请尽可能详细地说明&#xff0c;浏览器有哪些本地存储方式&#xff0c;区别是什么&#xff0c;应用场景是什么&#xff1f;你的回答中不要写出示例代码。 浏览器提供了多种本地存储方式&#xff0c;主要包括以下几种&#xff1a; 1. Cookies 定义&#xff1a;Cookies 是一…