宁国市网站建设自己做网站需要填税表吗
2026/4/17 2:00:36 网站建设 项目流程
宁国市网站建设,自己做网站需要填税表吗,金湖网站推广,wordpress中dw是什么你是不是也想快速实现图像分类#xff0c;却不想费劲搭建复杂的深度学习框架#xff1f;今天就给大家分享一个超实用的技巧 —— 用 OpenCV 的 DNN 模块直接调用训练好的模型#xff0c;不管是单张图片还是批量图片#xff0c;都能轻松完成分类任务#xff0c;小白也能快速…你是不是也想快速实现图像分类却不想费劲搭建复杂的深度学习框架今天就给大家分享一个超实用的技巧 —— 用 OpenCV 的 DNN 模块直接调用训练好的模型不管是单张图片还是批量图片都能轻松完成分类任务小白也能快速上手一、核心原理DNN 模块到底能干啥简单来说OpenCV 的 DNN 模块就像一个 “模型中转站”。它支持加载 Caffe、TensorFlow、PyTorch 等主流框架训练好的模型不用我们再去手写网络结构、调参训练。我们只需要做两件事准备好模型配置文件和权重文件把输入图像处理成模型能 “看懂” 的样子丢给模型就能直接出分类结果这次我们用的是经典的 GoogLeNet 模型它是基于 ImageNet 数据集训练的可以识别 1000 种常见物体。二、实战步骤从单张图片到批量预测话不多说直接上代码和讲解每一步都给你掰扯明白。1. 前期准备先把需要的工具包导入再处理好标签文件。这个标签文件对应了 ImageNet 的 1000 个分类能把模型输出的数字索引转换成我们能看懂的物体名称。# 导入工具包 import utils_paths import numpy as np import cv2 # 标签文件处理把每行的标签提取出来方便后续对应结果 rows open(synset_words.txt).read().strip().split(\n) classes [r[r.find( ) 1:].split(,)[0] for r in rows]2. 加载预训练模型这里我们加载基于 Caffe 框架训练的 GoogLeNet 模型需要两个文件.prototxt是模型的配置文件定义了网络结构.caffemodel是训练好的权重文件存着网络里的参数。# Caffe所需配置文件加载模型结构和权重 net cv2.dnn.readNetFromCaffe(bvlc_googlenet.prototxt, bvlc_googlenet.caffemodel)3. 单张图片预测一步一步来这是最基础的操作核心就是把图片转换成模型需要的blob格式再传入模型得到结果。# 获取图像路径 imagePaths sorted(list(utils_paths.list_images(images/))) # 读取并预处理单张图片 image cv2.imread(imagePaths[0]) # 第一步调整尺寸。模型训练时用的是224×224测试也得统一尺寸 resized cv2.resize(image, (224, 224)) # 第二步转换成blob。1是缩放因子(104,117,123)是ImageNet的三通道均值 blob cv2.dnn.blobFromImage(resized, 1, (224, 224), (104, 117, 123)) print(First Blob: {}.format(blob.shape)) # 输出blob形状方便检查 # 传入模型做预测 net.setInput(blob) preds net.forward() # 前向传播得到1000个分类的概率值 # 找出概率最大的分类 idx np.argsort(preds[0])[::-1][0] # 排序后取第一个概率最大 # 生成结果文本分类名称 概率百分比 text Label: {}, {:.2f}%.format(classes[idx],preds[0][idx] * 100) # 把结果画到图片上 cv2.putText(image, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX,0.7, (0, 0, 255), 2) # 显示结果 cv2.imshow(Image, image) cv2.waitKey(0)这里要注意两个关键点图片尺寸必须和训练时一致不然模型会 “看不懂”减均值是为了消除光照的影响让分类更准确这个均值是 ImageNet 数据集统计出来的直接用就行4. 批量图片预测效率翻倍如果有一堆图片要分类一个个预测太麻烦用blobFromImages函数注意比单张多了个s就能批量处理速度更快。# Batch数据制作批量处理剩下的图片 images [] for p in imagePaths[1:]: image cv2.imread(p) image cv2.resize(image, (224, 224)) images.append(image) # 转换成批量blob参数和单张一样 blob cv2.dnn.blobFromImages(images, 1, (224, 224), (104, 117, 123)) print(Second Blob: {}.format(blob.shape)) # 批量预测 net.setInput(blob) preds net.forward() # 遍历每个预测结果画到图片上并显示 for (i, p) in enumerate(imagePaths[1:]): image cv2.imread(p) idx np.argsort(preds[i])[::-1][0] text Label: {}, {:.2f}%.format(classes[idx],preds[i][idx] * 100) cv2.putText(image, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX,0.7, (0, 0, 255), 2) cv2.imshow(Image, image) cv2.waitKey(0)三、小技巧和注意事项预处理要一致训练时对图片做了啥操作缩放、减均值、裁剪等测试时必须一模一样不然结果会跑偏。框架选择灵活除了 CaffeOpenCV 还支持readNetFromTensorflow、readNetFromTorch等换个函数就能加载其他框架的模型。批量预测更高效处理大量图片时批量预测比单张循环快很多推荐优先使用。完整代码# 导入工具包 import utils_paths import numpy as np import cv2 # 标签文件处理 rows open(synset_words.txt).read().strip().split(\n) classes [r[r.find( ) 1:].split(,)[0] for r in rows] # Caffe所需配置文件 net cv2.dnn.readNetFromCaffe(bvlc_googlenet.prototxt, bvlc_googlenet.caffemodel) # 图像路径 imagePaths sorted(list(utils_paths.list_images(images/))) # 图像数据预处理 image cv2.imread(imagePaths[0]) resized cv2.resize(image, (224, 224)) # image scalefactor size mean swapRB blob cv2.dnn.blobFromImage(resized, 1, (224, 224), (104, 117, 123)) print(First Blob: {}.format(blob.shape)) # 得到预测结果 net.setInput(blob) preds net.forward() # 排序取分类可能性最大的 idx np.argsort(preds[0])[::-1][0] text Label: {}, {:.2f}%.format(classes[idx], preds[0][idx] * 100) cv2.putText(image, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) # 显示 cv2.imshow(Image, image) cv2.waitKey(0) # Batch数据制作 images [] # 方法一样数据是一个batch for p in imagePaths[1:]: image cv2.imread(p) image cv2.resize(image, (224, 224)) images.append(image) # blobFromImages函数注意有s blob cv2.dnn.blobFromImages(images, 1, (224, 224), (104, 117, 123)) print(Second Blob: {}.format(blob.shape)) # 获取预测结果 net.setInput(blob) preds net.forward() for (i, p) in enumerate(imagePaths[1:]): image cv2.imread(p) idx np.argsort(preds[i])[::-1][0] text Label: {}, {:.2f}%.format(classes[idx], preds[i][idx] * 100) cv2.putText(image, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.imshow(Image, image) cv2.waitKey(0)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询