寻找网站建设员广州网站建设专注乐云seo

news/2025/9/22 21:23:14/文章来源:
寻找网站建设员,广州网站建设专注乐云seo,一元钱购买网站空间,广州公关公司基于WIN10的64位系统演示 一、写在前面 本期开始#xff0c;我们继续学习深度学习图像目标检测系列#xff0c;SSD#xff08;Single Shot MultiBox Detector#xff09;模型。 二、SSD简介 SSD#xff08;Single Shot MultiBox Detector#xff09;是一种流行的目标检…基于WIN10的64位系统演示 一、写在前面 本期开始我们继续学习深度学习图像目标检测系列SSDSingle Shot MultiBox Detector模型。 二、SSD简介 SSDSingle Shot MultiBox Detector是一种流行的目标检测算法由 Wei Liu, Dragomir Anguelov, Dumitru Erhan 等人于 2016 年提出。它是一种单阶段的目标检测算法与当时流行的两阶段检测器如 Faster R-CNN相比SSD 提供了更快的检测速度同时仍然具有较高的准确性。 以下是 SSD 的主要特点和组件 1多尺度特征映射 SSD 从不同的层级提取特征图这使得它能够有效地检测不同大小的物体。这是通过在多个特征图上执行预测来实现的其中每个特征图代表不同的尺度。 2默认框或称为先验框、锚框 在每个特征图位置SSD 定义了多个具有不同形状和大小的默认框。这些默认框用于与真实边界框进行匹配并提供回归目标以调整预测的边界框大小和位置。 3单阶段检测器 与两阶段检测器不同SSD 在单个前向传递中同时进行边界框回归和类别分类从而实现了速度和准确性之间的平衡。 4损失函数 SSD 使用了组合损失包括边界框回归的平滑 L1 损失和类别预测的交叉熵损失。 5数据增强 为了提高模型的性能SSD 使用了多种数据增强技术包括随机裁剪、缩放和颜色扭曲等。 6模型骨干 原始的 SSD 使用 VGG-16 作为其骨干网络但后续的变种如 SSDlite 使用了更轻量级的骨干网络如 MobileNet。 三、数据源 来源于公共数据文件设置如下 大概的任务就是用一个框框标记出MTB的位置。 四、SSD实战 直接上代码 import os import random import torch import torchvision from torchvision.models.detection import ssd300_vgg16 from torchvision.transforms import functional as F from PIL import Image from torch.utils.data import DataLoader import xml.etree.ElementTree as ET import matplotlib.pyplot as plt from torchvision import transforms import albumentations as A from albumentations.pytorch import ToTensorV2 import numpy as np# Function to parse XML annotations def parse_xml(xml_path):tree ET.parse(xml_path)root tree.getroot()boxes []for obj in root.findall(object):bndbox obj.find(bndbox)xmin int(bndbox.find(xmin).text)ymin int(bndbox.find(ymin).text)xmax int(bndbox.find(xmax).text)ymax int(bndbox.find(ymax).text)# Check if the bounding box is validif xmin xmax and ymin ymax:boxes.append((xmin, ymin, xmax, ymax))else:print(fWarning: Ignored invalid box in {xml_path} - ({xmin}, {ymin}, {xmax}, {ymax}))return boxes# Function to split data into training and validation sets def split_data(image_dir, split_ratio0.8):all_images [f for f in os.listdir(image_dir) if f.endswith(.jpg)]random.shuffle(all_images)split_idx int(len(all_images) * split_ratio)train_images all_images[:split_idx]val_images all_images[split_idx:]return train_images, val_images# Dataset class for the Tuberculosis dataset class TuberculosisDataset(torch.utils.data.Dataset):def __init__(self, image_dir, annotation_dir, image_list, transformNone):self.image_dir image_dirself.annotation_dir annotation_dirself.image_list image_listself.transform transformdef __len__(self):return len(self.image_list)def __getitem__(self, idx):image_path os.path.join(self.image_dir, self.image_list[idx])image Image.open(image_path).convert(RGB)xml_path os.path.join(self.annotation_dir, self.image_list[idx].replace(.jpg, .xml))boxes parse_xml(xml_path)# Check for empty bounding boxes and return Noneif len(boxes) 0:return Noneboxes torch.as_tensor(boxes, dtypetorch.float32)labels torch.ones((len(boxes),), dtypetorch.int64)iscrowd torch.zeros((len(boxes),), dtypetorch.int64)target {}target[boxes] boxestarget[labels] labelstarget[image_id] torch.tensor([idx])target[iscrowd] iscrowd# Apply transformationsif self.transform:image self.transform(image)return image, target# Define the transformations using torchvision data_transform torchvision.transforms.Compose([torchvision.transforms.ToTensor(), # Convert PIL image to tensortorchvision.transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # Normalize the images ])# Adjusting the DataLoader collate function to handle None values def collate_fn(batch):batch list(filter(lambda x: x is not None, batch))return tuple(zip(*batch))def get_ssd_model_for_finetuning(num_classes):# Load an SSD model with a VGG16 backbone without pre-trained weightsmodel ssd300_vgg16(pretrainedFalse, num_classesnum_classes)return model# Function to save the model def save_model(model, pathRetinaNet_mtb.pth, save_full_modelFalse):if save_full_model:torch.save(model, path)else:torch.save(model.state_dict(), path)print(fModel saved to {path})# Function to compute Intersection over Union def compute_iou(boxA, boxB):xA max(boxA[0], boxB[0])yA max(boxA[1], boxB[1])xB min(boxA[2], boxB[2])yB min(boxA[3], boxB[3])interArea max(0, xB - xA 1) * max(0, yB - yA 1)boxAArea (boxA[2] - boxA[0] 1) * (boxA[3] - boxA[1] 1)boxBArea (boxB[2] - boxB[0] 1) * (boxB[3] - boxB[1] 1)iou interArea / float(boxAArea boxBArea - interArea)return iou# Adjusting the DataLoader collate function to handle None values and entirely empty batches def collate_fn(batch):batch list(filter(lambda x: x is not None, batch))if len(batch) 0:# Return placeholder batch if entirely emptyreturn [torch.zeros(1, 3, 224, 224)], [{}]return tuple(zip(*batch))#Training function with modifications for collecting IoU and loss def train_model(model, train_loader, optimizer, device, num_epochs10):model.train()model.to(device)loss_values []iou_values []for epoch in range(num_epochs):epoch_loss 0.0total_ious 0num_boxes 0for images, targets in train_loader:# Skip batches with placeholder dataif len(targets) 1 and not targets[0]:continue# Skip batches with empty targetsif any(len(target[boxes]) 0 for target in targets):continueimages [image.to(device) for image in images]targets [{k: v.to(device) for k, v in t.items()} for t in targets]loss_dict model(images, targets)losses sum(loss for loss in loss_dict.values())optimizer.zero_grad()losses.backward()optimizer.step()epoch_loss losses.item()# Compute IoU for evaluationwith torch.no_grad():model.eval()predictions model(images)for i, prediction in enumerate(predictions):pred_boxes prediction[boxes].cpu().numpy()true_boxes targets[i][boxes].cpu().numpy()for pred_box in pred_boxes:for true_box in true_boxes:iou compute_iou(pred_box, true_box)total_ious iounum_boxes 1model.train()avg_loss epoch_loss / len(train_loader)avg_iou total_ious / num_boxes if num_boxes ! 0 else 0loss_values.append(avg_loss)iou_values.append(avg_iou)print(fEpoch {epoch1}/{num_epochs} Loss: {avg_loss} Avg IoU: {avg_iou})# Plotting loss and IoU valuesplt.figure(figsize(12, 5))plt.subplot(1, 2, 1)plt.plot(loss_values, labelTraining Loss)plt.title(Training Loss across Epochs)plt.xlabel(Epochs)plt.ylabel(Loss)plt.subplot(1, 2, 2)plt.plot(iou_values, labelIoU)plt.title(IoU across Epochs)plt.xlabel(Epochs)plt.ylabel(IoU)plt.show()# Save model after trainingsave_model(model)# Validation function def validate_model(model, val_loader, device):model.eval()model.to(device)with torch.no_grad():for images, targets in val_loader:images [image.to(device) for image in images]targets [{k: v.to(device) for k, v in t.items()} for t in targets]model(images)# Paths to your data image_dir tuberculosis-phonecamera annotation_dir tuberculosis-phonecamera# Split data train_images, val_images split_data(image_dir)# Create datasets and dataloaders train_dataset TuberculosisDataset(image_dir, annotation_dir, train_images, transformdata_transform) val_dataset TuberculosisDataset(image_dir, annotation_dir, val_images, transformdata_transform)# Updated DataLoader with new collate function train_loader DataLoader(train_dataset, batch_size4, shuffleTrue, collate_fncollate_fn) val_loader DataLoader(val_dataset, batch_size4, shuffleFalse, collate_fncollate_fn)# Model and optimizer model get_ssd_model_for_finetuning(2) optimizer torch.optim.Adam(model.parameters(), lr0.001)# Train and validate train_model(model, train_loader, optimizer, devicecuda, num_epochs10) validate_model(model, val_loader, devicecuda)#######################################Print Metrics###################################### def calculate_metrics(predictions, ground_truths, iou_threshold0.5):TP 0 # True PositivesFP 0 # False PositivesFN 0 # False Negativestotal_iou 0 # to calculate mean IoUfor pred, gt in zip(predictions, ground_truths):pred_boxes pred[boxes].cpu().numpy()gt_boxes gt[boxes].cpu().numpy()# Match predicted boxes to ground truth boxesfor pred_box in pred_boxes:max_iou 0matched Falsefor gt_box in gt_boxes:iou compute_iou(pred_box, gt_box)if iou max_iou:max_iou iouif iou iou_threshold:matched Truetotal_iou max_iouif matched:TP 1else:FP 1FN len(gt_boxes) - TPprecision TP / (TP FP) if (TP FP) ! 0 else 0recall TP / (TP FN) if (TP FN) ! 0 else 0f1_score (2 * precision * recall) / (precision recall) if (precision recall) ! 0 else 0mean_iou total_iou / (TP FP) if (TP FP) ! 0 else 0return precision, recall, f1_score, mean_ioudef evaluate_model(model, dataloader, device):model.eval()model.to(device)all_predictions []all_ground_truths []with torch.no_grad():for images, targets in dataloader:images [image.to(device) for image in images]predictions model(images)all_predictions.extend(predictions)all_ground_truths.extend(targets)precision, recall, f1_score, mean_iou calculate_metrics(all_predictions, all_ground_truths)return precision, recall, f1_score, mean_ioutrain_precision, train_recall, train_f1, train_iou evaluate_model(model, train_loader, cuda) val_precision, val_recall, val_f1, val_iou evaluate_model(model, val_loader, cuda)print(Training Set Metrics:) print(fPrecision: {train_precision:.4f}, Recall: {train_recall:.4f}, F1 Score: {train_f1:.4f}, Mean IoU: {train_iou:.4f})print(\nValidation Set Metrics:) print(fPrecision: {val_precision:.4f}, Recall: {val_recall:.4f}, F1 Score: {val_f1:.4f}, Mean IoU: {val_iou:.4f})#sheet header | Metric | Training Set | Validation Set | divider ----------------------------------------train_metrics f| Precision | {train_precision:.4f} | {val_precision:.4f} | recall_metrics f| Recall | {train_recall:.4f} | {val_recall:.4f} | f1_metrics f| F1 Score | {train_f1:.4f} | {val_f1:.4f} | iou_metrics f| Mean IoU | {train_iou:.4f} | {val_iou:.4f} |print(header) print(divider) print(train_metrics) print(recall_metrics) print(f1_metrics) print(iou_metrics) print(divider)#######################################Train Set###################################### import numpy as np import matplotlib.pyplot as pltdef plot_predictions_on_image(model, dataset, device, title):# Select a random image from the datasetidx np.random.randint(50, len(dataset))image, target dataset[idx]img_tensor image.clone().detach().to(device).unsqueeze(0)# Use the model to make predictionsmodel.eval()with torch.no_grad():prediction model(img_tensor)# Inverse normalization for visualizationinv_normalize transforms.Normalize(mean[-0.485/0.229, -0.456/0.224, -0.406/0.225],std[1/0.229, 1/0.224, 1/0.225])image inv_normalize(image)image torch.clamp(image, 0, 1)image F.to_pil_image(image)# Plot the image with ground truth boxesplt.figure(figsize(10, 6))plt.title(title with Ground Truth Boxes)plt.imshow(image)ax plt.gca()# Draw the ground truth boxes in bluefor box in target[boxes]:rect plt.Rectangle((box[0], box[1]), box[2]-box[0], box[3]-box[1],fillFalse, colorblue, linewidth2)ax.add_patch(rect)plt.show()# Plot the image with predicted boxesplt.figure(figsize(10, 6))plt.title(title with Predicted Boxes)plt.imshow(image)ax plt.gca()# Draw the predicted boxes in redfor box in prediction[0][boxes].cpu():rect plt.Rectangle((box[0], box[1]), box[2]-box[0], box[3]-box[1],fillFalse, colorred, linewidth2)ax.add_patch(rect)plt.show()# Call the function for a random image from the train dataset plot_predictions_on_image(model, train_dataset, cuda, Selected from Training Set)#######################################Val Set####################################### Call the function for a random image from the validation dataset plot_predictions_on_image(model, val_dataset, cuda, Selected from Validation Set) 需要从头训练的就不跑了。 结尾我开始摆烂了。

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

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

相关文章

做花茶网站解说大庆市住房和城乡建设局网站

该知识领域涉及如下考点,具体内容分布于如下各个子章节: 理解安全并将其融入软件开发生命周期 (SDLC) 中在软件开发环境中识别和应用安全控制评估软件安全的有效性评估获得软件对安全的影响定义并应用安全编码准则和标准 6.1. 系统开发控制 6.1.1. 软…

网站支付链接怎么做张家港网页设计培训

同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。 安装好mysql后&#x…

河北邢台解封了吗seo网络优化师招聘

1、说说 Redis 都有哪些应用场景?缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。共享Session:对于一些依赖 …

百度site app网站添加到网站首页源文件中的代码是哪些?网站新类型

人脸对比 人脸对比,顾名思义,就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS:作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集: 人脸数据_数据集-飞桨AI Studio星河社区 (b…

上海做网站的多吗wordpress小说站数据库

队列(Queue) 在Python的queue模块中,Queue类是一个线程安全的队列实现,用于在多线程编程中安全地交换信息。它遵循先入先出(FIFO)的原则。Queue类提供了几种主要的方法: put(item): 将一个项目…

详细介绍:深入理解Kafka事务

详细介绍:深入理解Kafka事务pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

能碳园区 / 工厂系统 - 智慧园区

智慧能碳园区 / 工厂:能碳协同驱动的低碳高效运营新范式 在 “双碳” 目标与产业数字化深度融合的背景下,智慧能碳园区 / 工厂已成为企业绿色转型的核心载体 —— 它并非 “智慧能源” 与 “碳管理” 的简单叠加,而…

郑州网站推广营销wordpress 修改邮箱

我们做接口测试时候,会发现通常需要测试的接口类型有好几种,比较多的是http类型的接口,其他还有webservice接口,rpc接口等等,本次主要说下http类型的接口我们该怎么测试,还有该测试哪些东西。HTTP接口概念:…

上海工程建设执业资格注册中心网站网站建设排名北京

在计算机科学的世界里,排序是一项基本而重要的操作。无论是数据库管理、搜索引擎,还是日常编程,高效的排序算法都是提高性能的关键。本文将介绍四种基本的排序算法:冒泡排序、选择排序、插入排序和快速排序,并探讨它们…

有什么免费开发网站建设软件有哪些做外贸有哪些好的网站有哪些

java8根据某个id删选Java 8带有新的Optional类型,类似于其他语言中可用的类型。 这篇文章将介绍这种新类型的使用方式,即主要用途。 什么是可选类型? 可选的是新容器类型,如果有可用值,则该容器类型将包装单个值。 因…

汕头网站优化公司沈阳电商网站建设

本章主要讲解微信公众号自定义菜单、微信网页开发、模板消息推送等功能的实现;发福利了,下方关注公众号,就能免费获取项目源码1、自定义菜单开发前需要了解以下几点:1、微信公众号的自定义菜单最多包括3个一级菜单,每个…

深圳网站建设与设计制作笑话小网站模板html

它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3 4) 5 - 6 就是中缀表达式- 3 4 …

dell公司网站设计特色石油 技术支持 东莞网站建设

上篇文章介绍了如何利用pyhook模块监听鼠标键盘的事件,接下来如果需要通过监听的事件内容,来做对应的操作,需要对event的内容进行相应的判断。 如果仅仅通过event.key来进行判断,可以写成str(evnet.key) F12等,如果需…

佛山网站开发公司秦皇岛微信公众号

2019双11,支付宝参战的第十一年。 与十一年前相比,双11的许多东西都改变了。比如金额——2684亿,差不多是十一年前的5000倍;比如流量——订单峰值54.4万笔/秒,曾经是想都不敢想的数字;再比如层出不穷的新技…

国外域名查询网站装修设计公司哪个好

前言 今天我们来做个小试验,用PHP和RabbitMQ实现消息队列功能。 前期准备,需要安装好docker、docker-compose的运行环境。 如何使用docker部署php服务_php如何使用docker发布-CSDN博客 一、安装RabbitMQ 1、创建相关目录,执行如下命令。…

代码随想录算法训练营第五天 |242.有效的字母异位词、349. 两个数组的交集、第202题. 快乐数、1. 两数之和

242.有效的字母异位词思路:想到的是分别遍历两个数组,然后用map统计值,一个数组遍历的时候对值++,一个--,如果value没有能消除完,那就不一样。 优化:其实一次遍历就可以做完。func isAnagram(s string, t string…

Python - GaussDB table sync to Hive

Python - GaussDB table sync to Hive import psycopg2 from datetime import date, datetimeSRC_TABLE = "aaa" TARGET_TABLE = "bbb"# ---------------------------- # Step 1: Connect to Gaus…

淄博网站开发恶意代码 wordpress

下载地址:网盘下载 基本介绍 编辑内容简介 到底是本什么书,拥有这样一份作序推荐人列表:阿里集团章文嵩博士|新浪TimYang|去哪网吴永强|丁香园冯大辉|蘑菇街岳旭强|途牛汤峥嵘|豆瓣洪强宁|某电商陈皓/林昊…… 这本书出自某电商技术部总监之手…

Photoshop 2025 v26.0(PS2025)下载安装教程(含一键安装包下载)

目录一、PS2025 软件介绍:学 Photoshop 2025 v26.0 下载安装教程前,先懂它为啥好用二、Photoshop 2025 v26.0 下载方法三、Photoshop 2025 v26.0 安装教程详细步骤步骤 1:解压安装包 ——Photoshop 2025 v26.0 下载…