【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛

news2024/11/27 9:33:57

【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛

文章目录

  • 【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛
    • Task 1两个赛题数据可视化
    • 任务2 苹果病害数据加载与数据增强
    • 任务三

Task 1两个赛题数据可视化

在这个任务中,参赛选手需要对两个赛题的数据进行可视化。对于苹果病害数据,选手可以展示苹果叶片的病害图像以及它们所属的标签。对于建筑物检测数据,选手需要使用"吉林一号"高分辨率卫星遥感影像作为数据集。选手需要展示这些卫星影像,并可视化其中的建筑物变化。

import os, sys, glob, argparse
import pandas as pd
import numpy as np
from tqdm import tqdm

%matplotlib inline
import matplotlib.pyplot as plt

import cv2
from PIL import Image
from sklearn.model_selection import train_test_split, StratifiedKFold, KFold

import torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.benchmark = True

import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
from torch.utils.data.dataset import Dataset
train_path = glob.glob('./train/*/*')
test_path = glob.glob('./test/*')

np.random.shuffle(train_path)
np.random.shuffle(test_path)
plt.figure(figsize=(7, 7))
for idx in range(9):
    plt.subplot(3, 3, idx+1)
    plt.imshow(Image.open(train_path[idx]))
    plt.xticks([]);
    plt.yticks([]);
    
    plt.title(train_path[idx].split('/')[-2])

在这里插入图片描述

import numpy as np
import glob
import cv2

import matplotlib.pyplot as plt

import os, sys, glob, argparse
import pandas as pd
import numpy as np
from tqdm import tqdm

import cv2
from PIL import Image
from sklearn.model_selection import train_test_split, StratifiedKFold, KFold

import torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.benchmark = True

import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
from torch.utils.data.dataset import Dataset
train_tiff1 = glob.glob('./初赛训练集/Image1/*')
train_tiff2 = glob.glob('./初赛训练集/Image2/*')
train_label = glob.glob('./train/label1/*')

train_tiff1.sort()
train_tiff2.sort()
train_label.sort()
test_tiff1 = glob.glob('./初赛测试集/Image1/*')
test_tiff2 = glob.glob('./初赛测试集/Image2/*')

test_tiff1.sort()
test_tiff2.sort()
idx = 20
img1 = cv2.imread(train_tiff1[idx])
img2 = cv2.imread(train_tiff2[idx])
label = cv2.imread(train_label[idx])

plt.figure(dpi=200)
plt.subplot(131)
plt.imshow(img1)
plt.xticks([]); plt.yticks([])

plt.subplot(132)
plt.imshow(img2)
plt.xticks([]); plt.yticks([])

plt.subplot(133)
plt.imshow(label[:, :, 1] * 128)
plt.xticks([]); plt.yticks([])

在这里插入图片描述
方法很简单,总体来说就是使用cv2.imreadplt.imshow(Image.open(train_path[idx]))实现可视化。

任务2 苹果病害数据加载与数据增强

数据加载阶段,选手需要编写代码来读取和处理提供的图像数据。数据增强阶段,选手可以使用各种图像处理技术和方法,如旋转、缩放、翻转、亮度调整等,来增强数据集的多样性和数量。

步骤1:使用OpenCV或者PIL加载数据集(已经在任务一实现)
步骤2:使用torchvision或者OpenCV实现图像分类任务的数据增强

import torch
from torch.utils.data import Dataset
from PIL import Image
import numpy as np

DATA_CACHE = {}
import cv2


class XunFeiDataset(Dataset):

    def __init__(self, img_path, transform=None):
        self.img_path = img_path
        if transform is not None:
            self.transform = transform
        else:
            self.transform = None

    def __getitem__(self, index):
        if self.img_path[index] in DATA_CACHE:
            img = DATA_CACHE[self.img_path[index]]
        else:
            img = cv2.imread(self.img_path[index])
            DATA_CACHE[self.img_path[index]] = img

        if self.transform is not None:
            img = self.transform(image=img)['image']

        if self.img_path[index].split('/')[-2] in [
                'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9'
        ]:
            label = ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8',
                     'd9'].index(self.img_path[index].split('/')[-2])
        else:
            label = -1

        img = img.transpose([2, 0, 1])  # HWC -> CHW numpy中的transpose
        return img, torch.from_numpy(np.array(label))

    def __len__(self):
        return len(self.img_path)
import argparse
import torch
import torchvision.transforms as transforms
from mydatasets.xunfeidataset import XunFeiDataset
import albumentations as A


def get_loader(args, train_path, test_path):
    train_loader = torch.utils.data.DataLoader(XunFeiDataset(
        train_path[:-1000],
        A.Compose([
            A.RandomRotate90(),
            A.Resize(256, 256),
            A.RandomCrop(224, 224),
            A.HorizontalFlip(p=0.5),
            A.RandomContrast(p=0.5),
            A.RandomBrightnessContrast(p=0.5),
            A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225))
        ])),
                                               batch_size=args.batch_size,
                                               shuffle=True,
                                               num_workers=args.num_workers,
                                               pin_memory=True)

    val_loader = torch.utils.data.DataLoader(
        XunFeiDataset(
            train_path[-1000:],
            A.Compose([
                A.Resize(256, 256),
                A.RandomCrop(224, 224),
                # A.HorizontalFlip(p=0.5),
                # A.RandomContrast(p=0.5),
                A.Normalize(mean=(0.485, 0.456, 0.406),
                            std=(0.229, 0.224, 0.225))
            ])),
        batch_size=args.batch_size,
        shuffle=False,
        num_workers=args.num_workers,
        pin_memory=True)

    test_loader = torch.utils.data.DataLoader(XunFeiDataset(
        test_path,
        A.Compose([
            A.Resize(256, 256),
            A.RandomCrop(224, 224),
            A.HorizontalFlip(p=0.5),
            A.RandomContrast(p=0.5),
            A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225))
        ])),
                                              batch_size=args.batch_size,
                                              shuffle=False,
                                              num_workers=args.num_workers,
                                              pin_memory=True)
    return train_loader, val_loader, test_loader

步骤4:实现Mixup数据增强。

def mixup_data(x, y, alpha=1.0, use_cuda=True):
    '''Returns mixed inputs, pairs of targets, and lambda'''
    if alpha > 0:
        lam = np.random.beta(alpha, alpha)
    else:
        lam = 1

    batch_size = x.size()[0]
    if use_cuda:
        index = torch.randperm(batch_size).cuda()
    else:
        index = torch.randperm(batch_size)

    mixed_x = lam * x + (1 - lam) * x[index, :]
    y_a, y_b = y, y[index]
    
    return mixed_x, y_a, y_b, lam

def mixup_criterion(criterion, pred, y_a, y_b, lam):
    return lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)

任务三

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

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

相关文章

卡奥斯开源社区六月创作之星挑战赛开始啦!

活动须知 发布优质文章争榜,获取专属勋章、流量扶持及奖励! 活动时间:6 月 1 日- 6 月 30 日 奖品发放:7月10日 参与方式 完成认证发布优质文章,选中相关活动标签,文章默认参与活动 文章要求 文章符合…

宠物行业传统“夫妻店”,如何向“线下 线上”模式转型?

据研究,目前我国宠物店以单体店为主,占比高达85%。      这些单体店规模较小,以夫妻店为主,并且服务区域有限,较少涉及到大规模连锁运营。      同时,在我国宠物店形态中,区域性小规模的…

YOLOV5 训练

YOLOV5训练过程 CUDA 和cuDnnan 安装教程 windows上安装可以参考这篇知乎文章 数据集准备 自己准备数据集 可以使用 labelImg 工具,直接 pip install labelimg 就可以安装了。 命令行中输入 labelImg 就可以运行 标注数据的输出结果有多种过格式,V…

【数据结构与算法】掌握顺序栈:从入门到实践

🌱博客主页:青竹雾色间. 🌱系列专栏:数据结构与算法 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 前言 顺序栈的实现 初始化栈 判断栈空 判断栈满 入(进)栈 出栈 获取栈…

【算法系列 | 3】深入解析排序算法之插入排序

序言 你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级论点蓝色:用来标记二级论点 决定开一个算法专栏,希望能帮助大…

冒泡排序、插入排序、希尔排序、选择排序

一、排序协议的定义 在博客的开头的,我们先给出排序协议的定义。因为我们本篇博客含有多种排序方式,为了使每种排序方法对外调用方式一致,我们需要定义一个排序的相关协议。所有排序的相关类都必须遵循该协议,让此协议来定义具体…

Aiohttp异步爬取小说排行榜

Aiohttp异步爬取小说排行榜 *** Aiohttp简介及使用 *** ​ Aiohttp是Python的一个第三方网络编程模块, 它可以开发服务端和客户端,服务端也就是我们常说的网站服务器;客户端是访问网站的API接口,常用于接口测试,也可用…

Vue基础第七篇

一、vuex的使用 1.概念 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。 2.何时…

MyBatis操作数据库实现

说明:MyBatis是作用于三层架构开发,数据访问层(Data Access Object)的框架,用于访问数据库,对数据进行操作。 一、环境搭建 首先,创建一个SpringBoot模块,然后把MyBatis的环境搭建…

华为OD机试真题 JavaScript 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…

GEngine一个基于WebGPU的渲染引擎

一、废话篇&#xff1a; 2019年时候就有写一个渲染引擎想法&#xff0c;一直到现在才真正意义上算给实现了当初的想法&#xff0c;写了好几个月了和小伙伴这才有个初版&#xff08;虽然里面还有一堆bug哈&#xff0c;没时间改啊&#xff09;。说在前面GEngine借鉴了其他渲染引擎…

计算机网络方面的面试题目(合集)

python面试题 1、python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock)&#xff0c;这个锁的意思是任一时间只能有一个线程使用解释器&#xff0c;跟单cpu跑多个程序一个意思&#xff0c;大家都是轮着用的&#xff0c;这叫“…

在外web浏览器远程访问jupyter notebook服务器详细教程

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#…

利用 canvas 实现背景图片和其他图片以及文字的组合生成新图片

预览世界效果图如下&#xff1a; 注&#xff1a;以下图片中&#xff0c;二维码部分是我动态生成的&#xff0c;以及姓名和工号位置的参数需要动态替换。 实现思路&#xff1a; 利用 canvas 实现在面板上画图以及绘制文字等等。 官方文档 API 地址如下&#xff1a;canvas AP…

知道效果广告,让你的广告投入更有价值!

效果广告作为一种能直接触达用户的广告&#xff0c;在互联网上遍地开花&#xff0c;今天我们就一起来了解下效果广告吧&#xff5e; 1.背景 在传统的门户广告、搜索广告中&#xff0c;一则广告的呈现是针对其所有可覆盖的受众&#xff0c;而真正对广告信息感兴趣的人群只是广大…

代码审计 底层逻辑

红队利用中&#xff0c;主要有以下几个板块。 找到漏洞-->利用漏洞-->权限维持-->痕迹清除。找到漏洞对应的技能是代码审计。 利用漏洞对应的技能是各和实战中利用技巧绕 waf。 权限维持&#xff0c;抽象来看&#xff0c;就是系统自己启动我的恶意代码&#xff0c;实现…

ROS学习——通信机制(话题通信③—注意事项)

2.1.2 话题通信基本操作A(C) Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 043话题通信(C)4_注意事项_Chapter2-ROS通信机制_哔哩哔哩_bilibili 1. int main(int argc, char const *argv[]){} vscode 中的 main 函数 声明 int main(int argc, char const *argv…

更新Navicat Premium 16.2 之 如何使用Navicat连接Redis的新手教程

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

向clickhouse插入一段由经纬度构成的路径

目录 背景粗暴简单字符串示例 数组套数组示例 LineStringWKT来帮忙参考资料 背景 现有一条路&#xff0c;这条路由好几段路段构成&#xff0c;每个路段又由一些轨迹点先后连接而成&#xff0c;且这些轨迹点数量不固定&#xff0c;有些路段由10个轨迹点连接而成&#xff0c;有些…

13 MCMC——马尔可夫链蒙特卡洛

文章目录 13 MCMC——马尔可夫链蒙特卡洛13.1 MCMC的意义13.2 简单采样方法介绍13.2.1 概率分布采样13.2.2 Rejection Sampling——拒绝采样13.2.3 Importance Sampling——重要性采样 13.3 Markov Chain知识补充13.3.1 Markov Chain定义13.3.2 Markov Chain性质——平稳分布13…