基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)

目录

一、项目界面

二、代码实现

1、网络代码

2、训练代码

3、评估代码

4、结果显示

三、项目代码


一、项目界面

二、代码实现

1、网络代码

该网络基于残差模型修改

import torch
import torch.nn as nn
import torchvision.models as modelsclass resnet18(nn.Module):def __init__(self, num_classes=5, pretrained=False):super(resnet18, self).__init__()# 加载ResNet-18模型self.model = models.resnet18(pretrained=pretrained)# print(self.model)# 更改全连接层以输出自定义类别数量self.model.fc = nn.Linear(self.model.fc.in_features, num_classes)def forward(self, x):return self.model(x)if __name__ == '__main__':# 示例用法num_classes = 10model = resnet18(num_classes=num_classes)# 打印模型以确认更改print(model)
2、训练代码
import os
import torch
import torch.nn as nn
from models.resnet18 import resnet18
from utils.utils import train_and_val,plot_acc,plot_loss,plot_lr,MyDataset
import numpy as np
from torch.utils.data import DataLoader
import glob
import pandas as pd
import configdef main(epochs,model):device = torch.device("cuda" if torch.cuda.is_available() else "cpu")if not os.path.exists(config.save_results):os.makedirs(config.save_results)# ----------------------------模型加载-------------------------model = model.to(device)loss_function = nn.CrossEntropyLoss()optimizer = torch.optim.Adam(model.parameters(), lr=config.lr)scheduler = torch.optim.lr_scheduler.StepLR(optimizer,step_size=5,gamma=0.9)  # 每经过5个epoch,学习率乘以0.9# ------------------------------------------------------------# ---------------------------加载数据--------------------------im_train_list = glob.glob(config.train_path + "/*/*." + config.img_)im_val_list = glob.glob(config.val_path + "/*/*." + config.img_)train_dataset = MyDataset(im_train_list, config.label_names)val_dataset = MyDataset(im_val_list, config.label_names)train_loader = DataLoader(train_dataset,batch_size=config.batch_size,shuffle=True)val_loader = DataLoader(val_dataset,batch_size=config.batch_size,shuffle=False)print("num of train", len(train_dataset))print("num of val", len(val_loader))# ------------------------------------------------------------# ---------------------------网络训练--------------------------history = train_and_val(epochs, model, train_loader,val_loader,loss_function, optimizer,scheduler,config.save_results,device)df = pd.DataFrame(history) # 转换为DataFramedf.to_excel(os.path.join(config.save_results,'history.xlsx'), index=False) # 保存为 Excel 文件plot_loss(np.arange(0,epochs),config.save_results, history)plot_acc(np.arange(0,epochs),config.save_results, history)plot_lr(np.arange(0,epochs),config.save_results, history)if __name__ == '__main__':model = resnet18(num_classes=config.num_classes)main(config.epochs,model)
3、评估代码
from sklearn.metrics import classification_report
import torch
import os
import torch.nn as nn
from tqdm import tqdm
import pandas as pd
from models.resnet18 import resnet18
import matplotlib.pyplot as plt
from utils.utils import MyDataset,reports
from torch.utils.data import DataLoader
import seaborn as sns
import glob
import configdef main(model):device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# ----------------------------模型加载-------------------------model = model.to(device)checkpoint = torch.load(os.path.join(config.save_results,"best.pth"))model.load_state_dict(checkpoint, strict=True)model.eval()# ------------------------------------------------------------# ---------------------------加载数据--------------------------im_test_list = glob.glob(config.test_path + "/*/*." + config.img_)test_dataset = MyDataset(im_test_list, config.label_names)test_loader = DataLoader(test_dataset,batch_size=config.batch_size,shuffle=False)print("num of test", len(test_loader))# ------------------------------------------------------------act = nn.Softmax(dim=-1)y_true, y_pred = [], []with torch.no_grad():with tqdm(total=len(test_loader)) as pbar:for images, labels in test_loader:outputs = act(model(images.to(device)))_, predicted = torch.max(outputs, 1)predicted = predicted.cpu()y_pred.extend(predicted.numpy())y_true.extend(labels.cpu().numpy())pbar.update(1)oa,aa,kappa,cls,cm = reports(y_true, y_pred)cr = classification_report(y_true, y_pred, target_names=config.label_names.values(), output_dict=True)df = pd.DataFrame(cr).transpose()df.to_csv(os.path.join(config.save_results,"classification_report.csv"), index=True)print("Accuracy is :", oa)with open(os.path.join(config.save_results,"results.txt"), "a") as file:file.write('OA:{:.4f} AA:{:.4f} kappa:{:.4f}\ncls:{}\n混淆矩阵:\n{}\n'.format(oa, aa, kappa,cls,cm))plt.figure(figsize=(10, 7))sns.heatmap(cm, annot=True, xticklabels=config.label_names.values(), yticklabels=config.label_names.values(), cmap='Blues', fmt="d")plt.xlabel('Predicted')plt.ylabel('True')plt.savefig(os.path.join(config.save_results,'test_confusion_matrix.png'))plt.clf()if __name__ == '__main__':model = resnet18()main(model)
4、结果显示

上述仅仅是简单演示,结果没有参考意义。

三、项目代码

本项目的代码通过以下链接下载:基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构(2):LinkedList和链表[2]

我们在上一篇文章中着重讨论了单链表的实现。其中我们要注意单链表进行遍历时一步一步走的思想。那么这篇文章我们将继续讨论链表的更多内容,那就让我们开始吧。 1.经典单链表算法题 我们将通过几个经典的题对单链表进行进一步的认识。 (1)反转链表 206. 反转链…

cas 5.3服务器搭建

项目环境要求 jdk1.8,tomcat8 网盘下载(官网下载速度慢可以用此方法下载) 网盘链接:8910官网各稳定版本,软件包点击自取 cas5.3git代码 https://github.com/apereo/cas-overlay-template/tree/5.3 刚拉下来的代码目录…

OJ题-反转链表

给你一个单链表的头节点,请反转链表,并返回新的链表 eg: 1,2,3,4,5--->5,4,3,2,1 //反转链表 struct ListNode* reverseList(struct ListNode* head) {//定义三个变量struct ListNode* n1, * n2, * n3;n1 NULL;n2 head;n3 head->n…

鸿蒙开发之ArkTS 基础九 枚举类型

枚举把变量固定在特定的范围内 枚举的语法: enum 枚举名字 { 常量1 值1, 常量1 值1, 常量1 值1, ... } 定义具体如下: 使用具体如下:

centos更改静态ip

点击网络和internet设置 点击更改适配器 、点击属性

【C++题目】1.日期差值

日期差值 题目&#xff1a; 链接&#x1f517;&#xff1a;日期差值 代码&#xff1a; #include <iostream> using namespace std; /* *思路&#xff1a; * 1. 分别求出每一个日期与0000年0月1日距离的天数 * 2. 两个距离天数相减即可得到两个日期相差的天数 *///平年…

宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色&#xff0c;分别为系统管理员、宿舍管理员以及学生。其功能如下&#xff1a; 管理员&#xff1a;宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密…

【高录用 | EI快检索, IEEE出版】第二届人工智能与自动化控制国际学术会议(AIAC 2024)

会议官网&#xff1a;www.icaiac.org The 2nd International Conference on Artificial Intelligence and Automation Controlwww.icaiac.org 电气电子工程师学会&#xff08;IEEE&#xff09;的英文全称是the Institute of Electrical and Electronics Engineers。作为全球最…

hh exe所选的程序不能与此文件类型相关联。请选择其他程序。

按照hh exe打开chm文件显示所选的程序不能与此文件类型相关联。请选择其他程序。 以上错误来自于 cmd命令行 cd C:\Windows\hh.exe 要打开的chm文件报错 其实根本原因是在设置中.chm文件默认打开方法被其他软件占用了&#xff0c;解决办法只能删除那个软件&#xff0c;如果是W…

认知杂谈68《燃爆!兄弟萌不可错过的人生开挂宝典》

内容摘要​&#xff1a; 生活如舞台&#xff0c;我们要做自己人生的导演兼主演。实现自我成长需打牢基础&#xff0c;如读《认知觉醒》等书并制定成长计划。 要向上生长&#xff0c;定短期和长期目标&#xff0c;学新技能、提升沟通能力&#xff0c;可借助在线平台和社群。用番…

医院伤员食堂管理系统开通方法———未来之窗行业应用跨平台架构

一、 医院伤员食堂管理建设必要性 1. 提高服务质量 - 能够更精准地满足伤员的特殊饮食需求&#xff0c;如根据病情提供不同的营养搭配&#xff0c;有助于伤员的康复。 - 及时响应伤员的反馈&#xff0c;改进餐饮服务&#xff0c;提升伤员的满意度。 2. 优化资源配置 …

Java 枚举 新特性

Java 枚举&#xff08;enum&#xff09;自JDK 1.5引入以来&#xff0c;随着版本的升级不断增强。本文将回顾枚举的演进&#xff0c;尤其是结合switch语句的应用&#xff0c;展示枚举如何在现代Java中变得更加灵活。 1. JDK 1.5&#xff1a;Java 枚举的诞生 在JDK 1.5之前&…

‌PhotoZoom Pro 9‌和‌PhotoZoom Classic 9‌都提供了多项新功能

​PhotoZoom 9是一款划时代的、技术上产生革命性影响的数码图片放大工具。该软件使用了全新的S-Spline技术&#xff08;拥有自动调节、领先的差值算法等技术及亮点&#xff09;&#xff0c; 开创了图片放大技术的新领域&#xff0c;采用更为领先的优化算法&#xff0c;对不断放…

【C++11 —— 线程库】

C11 —— 线程库 thread类介绍线程函数参数原子性操作库(atomic)lock_guard与unique_lockmutex的种类lock_guardunique_lock 两个线程交替打印奇偶数 thread类介绍 在C11之前&#xff0c;涉及到多线程的问题&#xff0c;都是和平台相关的&#xff0c;比如windows和Linux下各有…

Android中的冷启动,热启动和温启动

在App启动方式中分为三种&#xff1a;冷启动&#xff08;cold start&#xff09;、热启动&#xff08;hot start&#xff09;、温启动&#xff08;warm start&#xff09; 冷启动&#xff1a; 系统不存在App进程&#xff08;App首次启动或者App被完全杀死&#xff09;时启动A…

Bluetooth Core6.0中关于Channel Sounding设置初始化过程详细介绍

目录 第一步&#xff1a;读取本地设备CS支持功能&#xff1a; Num_Config_Supported ​Max_Consecutive_Procedures_Supported ​Num_Antennas_Supported ​Max_Antenna_Paths_Supported ​Roles_Supported ​Modes_Supported ​RTT_Capability&#xff0c;RTT_AA_Only_…

【第12章】SpringBoot之SpringBootActuator服务监控(上)

文章目录 前言一、准备1. 地址和端口配置2. 引入依赖3. Actuator Properties 二、使用1. Beans (beans)2. Configuration Properties (configprops)3. Environment (env)4. Health (health)5. Heap Dump (heapdump)6. Mappings (mappings)7. Metrics (metrics)8. Thread Dump (…

浅谈vue2.0与vue3.0的区别(整理十六点)

目录 1. 实现数据响应式的原理不同 2. 生命周期不同 3. vue 2.0 采用了 option 选项式 API&#xff0c;vue 3.0 采用了 composition 组合式 API 4. 新特性编译宏 5. 父子组件间双向数据绑定 v-model 不同 6. v-for 和 v-if 优先级不同 7. 使用的 diff 算法不同 8. 兄弟组…

小米,B站网络安全岗位笔试题目+答案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

面试官问:请描述一次你成功解决问题的经历?

面试官为什么要这么问&#xff1f; 面试官问你描述一次成功解决问题的经历&#xff0c;主要是为了评估你的几个关键方面&#xff1a; 问题解决能力&#xff1a;了解你在面对挑战时的思维方式和应对策略。 决策能力&#xff1a;考察你在压力下做出明智决定的能力。 沟通技巧&am…