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

本文主要是介绍【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

文章目录

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

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 pltimport cv2
from PIL import Image
from sklearn.model_selection import train_test_split, StratifiedKFold, KFoldimport torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.benchmark = Trueimport 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 cv2import matplotlib.pyplot as pltimport os, sys, glob, argparse
import pandas as pd
import numpy as np
from tqdm import tqdmimport cv2
from PIL import Image
from sklearn.model_selection import train_test_split, StratifiedKFold, KFoldimport torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.benchmark = Trueimport 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 npDATA_CACHE = {}
import cv2class XunFeiDataset(Dataset):def __init__(self, img_path, transform=None):self.img_path = img_pathif transform is not None:self.transform = transformelse:self.transform = Nonedef __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]] = imgif 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 = -1img = img.transpose([2, 0, 1])  # HWC -> CHW numpy中的transposereturn 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 Adef 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 = 1batch_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, lamdef mixup_criterion(criterion, pred, y_a, y_b, lam):return lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)

任务三 果病害模型训练与预测

参赛选手需要使用加载和增强后的苹果病害数据集,构建模型并进行训练和预测。选手可以选择适合的深度学习框架和模型架构,并使用训练集进行模型训练。然后,选手需要使用训练好的模型对测试集中的苹果叶片病害图像进行预测。

步骤1:自定义数据集读取
步骤2:自定义CNN模型
model.py

import torch.nn as nn
import torchvision.models as modelsclass XunFeiNet(nn.Module):def __init__(self, name='RN18'):super(XunFeiNet, self).__init__()if name == 'RN18':model = models.resnet18(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(512, 9)elif name == 'RN34':model = models.resnet34(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(512, 9)elif name == 'RN50':model = models.resnet50(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(2048, 9)elif name == 'RN101':model = models.resnet101(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(2048, 9)elif name == 'RN152':model = models.resnet152(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(2048, 9)self.resnet = modeldef forward(self, img):out = self.resnet(img)return out

engine.py

import torch
import numpy as np
from utils import mixup_data, mixup_criteriondef train(train_loader, model, criterion, optimizer, args):mix_up = args.mixupalpha = args.alphamodel.train()train_loss = 0.0for i, (input, target) in enumerate(train_loader):input = input.cuda()target = target.cuda()if mix_up:input, targets_a, targets_b, lam = mixup_data(input, target, alpha)# compute outputoutput = model(input)if mix_up:loss = mixup_criterion(criterion, output, targets_a, targets_b, lam)else:loss = criterion(output, target)# compute gradient and do SGD stepoptimizer.zero_grad()loss.backward()optimizer.step()if i % 20 == 0:print('Train loss', loss.item())train_loss += loss.item()return train_loss / len(train_loader)def validate(val_loader, model, criterion):model.eval()val_acc = 0.0with torch.no_grad():# end = time.time()for i, (input, target) in enumerate(val_loader):input = input.cuda()target = target.cuda()# compute outputoutput = model(input)loss = criterion(output, target)val_acc += (output.argmax(1) == target).sum().item()return val_acc / len(val_loader.dataset)def predict(test_loader, model, criterion):model.eval()val_acc = 0.0test_pred = []with torch.no_grad():for i, (input, target) in enumerate(test_loader):input = input.cuda()target = target.cuda()# compute outputoutput = model(input)test_pred.append(output.data.cpu().numpy())return np.vstack(test_pred)

任务4:苹果病害模型优化与多折训练

参赛选手需要对苹果病害模型进行优化,并进行多折交叉验证训练。选手可以通过调整模型架构、超参数调优、正则化等方法来优化模型的性能。此外,选手还需要实现多折交叉验证来更准确地评估模型的性能和泛化能力。
模型优化在上述mode.py中已经实现,本任务只考虑交叉验证

这篇关于【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559167

相关文章

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

用Pytho解决分类问题_DBSCAN聚类算法模板

一:DBSCAN聚类算法的介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,DBSCAN算法的核心思想是将具有足够高密度的区域划分为簇,并能够在具有噪声的空间数据库中发现任意形状的簇。 DBSCAN算法的主要特点包括: 1. 基于密度的聚类:DBSCAN算法通过识别被低密

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用以下哪种方法? 易错14.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。