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

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

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

文章目录

  • 【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛
    • 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

相关文章

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.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

代码随想录打卡Day25

今天一整天都在教研室做实验,没时间刷题,就做了一题,剩下的明天补 491.递增子序列 这道题目和之前的子集问题很像,但是有一点要注意的,这个输入的数组不能进行排序,所以就不能沿用之前的去重逻辑,这道题要去重还是得借助额外的变量来维护元素使用情况,但是这题的used为集合,且不能为全局变量,只能为树层遍历前定义的一个局部变量,除了这个改动以外,其他地方都是高度相似的。 class Soluti

PMP–一、二、三模–分类–14.敏捷–技巧–原型MVP

文章目录 技巧一模14.敏捷--原型法--项目生命周期--迭代型生命周期,通过连续的原型或概念验证来改进产品或成果。每个新的原型都能带来新的干系人新的反馈和团队见解。题目中明确提到需要反馈,因此原型法比较好用。23、 [单选] 一个敏捷团队的任务是开发一款机器人。项目经理希望确保在机器人被实际建造之前,团队能够收到关于需求的早期反馈并相应地调整设计。项目经理应该使用以下哪一项来实现这个目标?