import os
import numpy as np
import tensorflow as tf
from tensorflow.python.keras.backend import set_session
# from keras.applications.vgg16 import VGG16
# from keras.applications.vgg16 import preprocess_input
# from keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.applications.vgg16 import preprocess_input
from tensorflow.keras.preprocessing import image
from numpy import linalg as la
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
# os.environ['KERAS_BACKEND'] = 'theano'
class VGGNet:
# 初始化
def __init__(self):
config = tf.compat.v1.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.5
set_session(tf.compat.v1.Session(config=config))
# 输入图像的大小
self.input_shape = (224, 224, 3)
# 池化方式
self.pooling = 'max'
# 使用的模型
# - weights:指定使用哪个预训练模型的权重。该参数可以是None(不使用预训练权重),
# 'imagenet' 表示使用在ImageNet数据集上预训练的权重
# - input_shape:指定输入图像的大小
# - include_top:指定是否包含模型的顶部(即全连接层),False表示不包含顶部,只包含模型的卷积部分。
self.model = VGG16(weights='imagenet',
input_shape=(self.input_shape[0],
self.input_shape[1], self.input_shape[2]), pooling=self.pooling,
include_top=False)
# 模型预测操作,预先加载模型权重,以便在后续使用该模型时能够更快地进行推理
# 具体来说,这里使用了一个全零数组作为输入,该数组的维度为(1, 224, 224, 3),
# 与VGG16模型所需的输入维度相同。使用全零数组作为输入的原因是,
# 在预测时,模型会根据输入的形状来推断其内部的参数,从而自动初始化权重。
# 这样,在后续使用该模型时,就可以避免在每次进行预测时都要重新初始化模型权重的问题,从而提高推理速度。
self.model.predict(np.zeros((1, 224, 224, 3)))
# 获取最后一层卷积输出的特征
def extract_feat(self, img_path):
# 加载指定路径的图像为PIL格式,并将其调整为指定大小
img = image.load_img(img_path, target_size=(self.input_shape[0], self.input_shape[1]))
# 将图像转换为numpy数组
img = image.img_to_array(img)
# 在第0个维度上添加一个维度,将图像转换为4D张量
img = np.expand_dims(img, axis=0)
# 对图像进行预处理,将其转换为VGG16模型可以接受的数据格式
img = preprocess_input(img)
# 使用VGG16模型对预处理后的图像进行特征提取
feat = self.model.predict(img)
# 对提取的特征进行归一化处理,即将其除以特征向量的L2范数
norm_feat = feat[0] / la.norm(feat[0])
# 返回处理后的特征向量
return norm_feat
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计是高等教育阶段学生完成学业的一个重要环节,通常在学士或硕士学业即将结束时进行。这是学生将在整个学业中所学知识和技能应用到实际问题上的机会,旨在检验学生是否能够独立思考、解决问题,并展示其专业能力的一项综合性任务。 毕业设计的主要特点包括: 独立性: 毕业设计要求学生具备独立思考和解决问题的能力。学生需要选择一个合适的课题,研究相关文献,进行实地调查或实验,并提出独立见解。 实践性: 毕业设计是将理论知识应用到实际问题中的一次实践。通过完成毕业设计,学生能够将所学的专业知识转化为实际的解决方案,加深对专业领域的理解。 综合性: 毕业设计往往要求学生运用多个学科的知识,综合各种技能。这有助于培养学生的综合素养,提高他们的综合能力。 导师指导: 学生在毕业设计过程中通常由一名指导老师或导师团队提供指导和支持。导师负责引导学生确定研究方向、制定计划、提供建议,并在整个过程中监督进展。 学术规范: 毕业设计要求学生按照学术规范完成研究,包括文献综述、研究设计、数据采集与分析、结论和讨论等环节。学生需要撰写一篇完整的毕业论文,并进行答辩。
资源推荐
资源详情
资源评论
收起资源包目录
Python 图像相似度匹配 + Restful API,本科毕业设计程序.zip (14个子文件)
SJT-code
query_api.py 836B
index.py 2KB
extract_cnn_vgg16_keras.py 3KB
web_restful.py 2KB
gpu_test.py 643B
.idea
ImageIndexVGG.iml 348B
other.xml 186B
misc.xml 216B
inspectionProfiles
Project_Default.xml 449B
profiles_settings.xml 174B
modules.xml 278B
.gitignore 191B
.gitignore 11B
query_online.py 1KB
共 14 条
- 1
资源评论
JJJ69
- 粉丝: 6365
- 资源: 5917
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功