MST

星途 面试题库

面试题:Python在深度学习模型下的复杂条件策略判断

基于深度学习的图像识别模型(如ResNet),识别图像中的物体,识别结果为类别编号。现在有一个需求,当识别出的物体是特定类别(假设类别编号为5),并且图像中的物体面积占比大于0.3(需自行设计方法计算面积占比),同时模型预测的置信度大于0.8时,对图像进行特定处理(如将图像灰度化并保存新图像),否则不做处理。请用Python实现整个流程,包括必要的库导入、模型加载(假设模型已保存为合适格式可加载)、条件判断及处理逻辑,要求代码具备较高的可读性和可维护性。
32.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import cv2
import numpy as np
import torch
import torchvision.models as models
from torchvision import transforms

# 导入其他可能需要的库

# 1. 加载模型
model = models.resnet18(pretrained=False)
# 假设模型已经训练好并保存,这里加载模型
model.load_state_dict(torch.load('your_trained_model.pth'))
model.eval()

# 2. 图像预处理
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 3. 读取图像
image_path = 'your_image.jpg'
image = cv2.imread(image_path)
image_original = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = transform(image).unsqueeze(0)

# 4. 模型预测
with torch.no_grad():
    outputs = model(image)
    _, predicted = torch.max(outputs.data, 1)
    confidence = torch.softmax(outputs, dim=1)[0][predicted.item()].item()

# 5. 计算物体面积占比(简单假设物体是通过轮廓检测得到,这里是一个简化示例)
gray = cv2.cvtColor(image_original, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if contours:
    max_contour = max(contours, key=cv2.contourArea)
    object_area = cv2.contourArea(max_contour)
    image_area = image_original.shape[0] * image_original.shape[1]
    area_ratio = object_area / image_area
else:
    area_ratio = 0

# 6. 条件判断及处理
if predicted.item() == 5 and area_ratio > 0.3 and confidence > 0.8:
    # 将图像灰度化
    gray_image = cv2.cvtColor(image_original, cv2.COLOR_BGR2GRAY)
    # 保存新图像
    cv2.imwrite('processed_image.jpg', gray_image)