首页 > 其他分享 >使用PyTorch框架来训练语义分割模型——航空影像输电线路与输电塔分割数据集,使用U-Net架构进行实现。前端界面使用Flask,UI界面使用PyQt5。电缆,铁塔木塔混凝土数据集

使用PyTorch框架来训练语义分割模型——航空影像输电线路与输电塔分割数据集,使用U-Net架构进行实现。前端界面使用Flask,UI界面使用PyQt5。电缆,铁塔木塔混凝土数据集

时间:2024-12-15 09:28:50浏览次数:11  
标签:segmentation 界面 self PyQt5 label 输电 使用 app result

在这里插入图片描述
航空影像的输电线路与输电塔分割数据集。在这里插入图片描述

该数据集包含1234张图像,超高分辨率(约3840×2160)标注了11447个对象,
属于5个不同的类别,包括电缆(cable)、铁塔(tower_lattice)、木塔(tower_wooden)以及其他两种类型:混凝土或钢结构混合塔(tower_tucohy)和空白肉眼不可见线缆(void),
共3GB 在这里插入图片描述
好的,我们将基于提供的航空影像数据集构建一个输电线路与输电塔分割系统。我们将使用PyTorch框架来训练一个语义分割模型,并使用U-Net架构进行实现。前端界面将使用Flask,而UI界面将使用PyQt5。
PyQt5 UI 应用入口

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog, QMessageBox
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
import requests
import json
import base64

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Aerial Imagery Segmentation System")
        self.setGeometry(100, 100, 800, 600)

        self.image_label = QLabel(self)
        self.image_label.setAlignment(Qt.AlignCenter)

        self.upload_button = QPushButton("Upload Image", self)
        self.upload_button.clicked.connect(self.upload_image)

        self.result_label = QLabel("", self)
        self.result_label.setAlignment(Qt.AlignCenter)
        self.result_label.setStyleSheet("font-size: 16px; font-weight: bold;")

        self.segmentation_label = QLabel(self)
        self.segmentation_label.setAlignment(Qt.AlignCenter)

        layout = QVBoxLayout()
        layout.addWidget(self.image_label)
        layout.addWidget(self.upload_button)
        layout.addWidget(self.result_label)
        layout.addWidget(self.segmentation_label)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def upload_image(self):
        options = QFileDialog.Options()
        file_path, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", "Images (*.png *.xpm *.jpg);;All Files (*)", options=options)
        if file_path:
            pixmap = QPixmap(file_path)
            self.image_label.setPixmap(pixmap.scaled(400, 400, Qt.KeepAspectRatio))

            files = {'file': open(file_path, 'rb')}
            response = requests.post('http://127.0.0.1:5000/predict', files=files)
            result = response.json()

            pred_base64 = result['prediction']
            pred_bytes = base64.b64decode(pred_base64)
            pred_pixmap = QPixmap()
            pred_pixmap.loadFromData(pred_bytes)

            self.segmentation_label.setPixmap(pred_pixmap.scaled(400, 400, Qt.KeepAspectRatio))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())




项目结构

aerial_imagery_segmentation/
├── data/
│   ├─`在这里插入代码片`─ images/
│       ├── img_00001.png
│       ├── img_00002.png
│       └── ...
│   └── masks/
│       ├── img_00001_mask.png
│       ├── img_00002_mask.png
│       └── ...
├── models/
│   ├── unet.pth
├── app.py          # Flask应用入口
├── ui_app.py       # PyQt5 UI应用入口
├── train_unet.py   # U-Net模型训练脚本
├── utils.py        # 工具函数
├── requirements.txt  # 依赖项
└── README.md       # 项目说明文档

安装依赖项

首先,安装所需的Python库:

pip install torch torchvision flask pyqt5 matplotlib scikit-learn pandas seaborn albumentations opencv-python-headless

数据集准备

假设你已经有一个航空影像分割数据集,目录结构如上所示。如果没有,可以从公开的数据集中下载或自行收集。

训练模型

U-Net 模型训练

前端界面 (Flask)

app.py 文件
templates/index.html 文件

创建一个简单的HTML模板用于上传图片并显示预测结果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Aerial Imagery Segmentation</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #f4f4f4;
        }
        .container {
            text-align: center;
            background-color: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        input[type="file"] {
            margin-bottom: 20px;
        }
        button {
            padding: 10px 20px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .result {
            margin-top: 20px;
            font-size: 1.2em;
        }
        .segmentation-result {
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Upload Aerial Image</h1>
        <form id="upload-form" enctype="multipart/form-data">
            <input type="file" id="file-input" name="file" accept="image/*" required>
            <br><br>
            <button type="submit">Predict</button>
        </form>
        <div class="segmentation-result" id="segmentation-result"></div>
    </div>

    <script>
        document.getElementById('upload-form').addEventListener('submit', function(event) {
            event.preventDefault();
            const formData = new FormData(this);

            fetch('/predict', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                const imgElement = document.createElement('img');
                imgElement.src = 'data:image/png;base64,' + data.prediction;
                document.getElementById('segmentation-result').innerHTML = '';
                document.getElementById('segmentation-result').appendChild(imgElement);
            })
            .catch(error => console.error('Error:', error));
        });
    </script>
</body>
</html>

UI界面 (PyQt5)

ui_app.py 文件

运行项目

  1. 启动Flask服务器:

    python app.py
    
  2. 启动PyQt5 UI应用:

    python ui_app.py
    

解释

  1. 数据预处理: 使用 albumentations 进行数据增强。
  2. 模型训练: 使用自定义的U-Net模型进行训练,并绘制损失曲线。
  3. Flask应用: 提供一个简单的Web界面用于上传图像并获取预测结果。
  4. PyQt5 UI应用: 提供一个图形化的用户界面用于上传图像并显示预测结果。

通过这些步骤,你可以构建一个完整的航空影像分割系统,包括训练、评估、前端和服务端代码。

标签:segmentation,界面,self,PyQt5,label,输电,使用,app,result
From: https://blog.csdn.net/2401_88441190/article/details/144440383

相关文章

  • 使用YOLOv8网络构建一个完整垃圾检测识别系统,如何实现——垃圾检测识别_垃圾分类系统_
    垃圾检测识别/垃圾分类系统/垃圾识别-cnn网络-带UI界面该项目已训练好网络模型,配置好环境即可直接运行使用,运行效果见图像项目基本介绍:【网络】深度学习CNN网络yolo8网络【环境】python>=3.5ptorchopencvpyqt5【文件】训练预测全部源代码、训练好的模型,项目报告文......
  • 如何使用yolov8训练无人机视角坦克检测数据集 人 交通工具 数据集voc :3500+张 5类 并
    无人机视角坦克检测数据集人交通工具房屋检测数据集目标检测带标注voc内含有img和groundtruth数量:3500+张目标:human、truck、vehicle、house、tank完整训练脚本fromultralyticsimportYOLO#加载预训练的YOLOv8m模型model=YOLO('yolov8m.pt')#训练模......
  • 使用button当按钮和使用div当按钮有什么区别?
    在前端开发中,使用<button>元素和<div>元素作为按钮时,有一些关键的区别,这些区别涉及到语义、可访问性、默认行为和样式等方面。1.语义<button>:语义明确,表示一个按钮,用于提交表单或触发某些动作。屏幕阅读器和其他辅助技术可以正确识别并宣布这是一个按钮,从而提高网站的......
  • 使用js写一个方法操作css变量
    在前端开发中,你可以使用JavaScript来操作CSS变量(也称为自定义属性)。CSS变量在:root伪类或特定的选择器中定义,然后通过var(--variable-name)在样式表或内联样式中引用。以下是一个示例方法,展示了如何使用JavaScript来读取、设置和更新CSS变量:1.读取CSS变量要读取CSS变量,可以使......
  • Less现在最新的版本是使用的是什么语言编写的?
    Less本身是一种动态预处理语言,其基本语言是层叠样式表(CSS),用于为前端开发提供更为灵活和强大的样式编写能力。关于Less最新版本是使用什么语言编写的这一问题,实际上,Less的编写并不依赖于某一特定的编程语言来实现其核心功能,而是作为一种扩展CSS的语言存在。不过,Less的编译器和解释......
  • 怎样使用Sass的Mixin功能?
    在前端开发中,Sass(SyntacticallyAwesomeStylesheets)的Mixin功能是一种强大的工具,它允许开发者定义可复用的样式块,并在整个样式表中多次使用,从而提高开发效率和代码的可维护性。以下是使用SassMixin功能的基本步骤和示例:一、定义MixinMixin在Sass中通过@mixin指令来定义。你可......
  • 使用Javelin AI Gateway简化你的大语言模型开发
    引言在当今快速发展的技术世界中,大语言模型(LLM)被广泛应用于各种AI应用中。然而,随着各种LLM提供商的涌现,如何高效地管理和集成这些模型成为了开发者面临的重大挑战。JavelinAIGateway是一个企业级API网关服务,专门为AI应用而设计。它能够简化与多个大语言模型提供商(如OpenA......
  • 使用 Ada 实现文字识别
    我们将使用Ada语言与TesseractOCR集成,实现从图像中提取文字的功能。Ada本身没有现成的OCR库,因此我们将通过调用外部的Tesseract程序来完成图像文字识别。步骤安装TesseractOCR首先,确保你已安装TesseractOCR工具。在Linux或macOS上,可以通过以下命令安装:bash......
  • 使用任务队列TaskQueue和线程池ThreadPool技术实现自定义定时任务框架详解
    前言在桌面软件开发中,定时任务是一个常见的需求,比如定时清理日志、发送提醒邮件或执行数据备份等操作。在C#中有一个非常著名的定时任务处理库Hangfire,不过在我们深入了解Hangfire之前,我们可以手动开发一个定时任务案例,用以帮助我们理解Hangfire的核心原理。我们可以利用......
  • oscp备考,oscp系列——Kioptix Level 1~5靶场详解,附重新使用VMware克隆的下载地址,VMwar
    公众号:泷羽Sec-尘宇安全oscp备考,oscp系列——KioptixLevel1~5靶场详解下载地址:https://pan.quark.cn/s/d290014bb3d8oscp备考,oscp系列——KioptixLevel1靶场前言oscp备考,oscp系列——KioptixLevel1靶场KioptixLevel1难度为简单靶场,主要考察nmap的使用已......