1 赛题背景

为进一步加快“6+5+6+1”西安现代产业以及养老服务等行业领域急需紧缺高技能人才培养,动员广大职工在迎十四运创文明城、建设国家中心城市、助力西安新时代追赶超越高质量发展中展现新作为,市委组织部、市人社局、市总工会决定举办西安市2021年“迎全运、强技能、促提升”高技能人才技能大赛(全市计算机程序设计员技能大赛)。

随着我国经济的发展和城市化进程的加速,生活垃圾对城市环境的威胁日益增加。因此,如何高效、环保地解决处理生活垃圾迫在眉睫。生活垃圾的分类和处理可以有效地增加垃圾处理的效率,也因此成为社会关注的热点。然而,对垃圾分类的知识普及以及工作落实一直以来都是一个难题。本次活动将以垃圾分类为主题,结合人工智能、大数据、计算机视觉技术,实现生活垃圾的智慧分拣。

2 数据说明

本次比赛将提供10,000张垃圾图片,其中8000张用于训练集,1,000张用于测试集。其中,每张图片中的垃圾都属于纸类、塑料、金属、玻璃、厨余、电池这六类垃圾中的一类。

数据文件:

  • train.zip,训练集,包括7831张垃圾图片。

  • validation.zip,测试集,包括2014张垃圾图片。

  • train.csv,训练集图片标签,标签为A-F,分别代表厨余、塑料、金属、纸类、织物、玻璃。

3 数据分析

首先我们可以对赛题数据进行可视化,这里使用opencv读取图片并进行操作:

def show_image(paths):plt.figure(figsize=(10, 8))    for idx, path in enumerate(paths):plt.subplot(1, len(paths), idx+1)img = cv2.imread(path)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(img)plt.xticks([]); plt.yticks([])

从图中可以看出图片主体尺寸较少,但背景所包含的像素较多。接下来可以对类别数量进行统计,在数据集中厨余最多,玻璃垃圾最少。数据集类别整体还是比较均衡,样本比例没有相差很大。

参考上面的操作,可以对数据集每类图片进行可视化:

4 赛题建模

由于赛题任务是一个非常典型的图像分类任务,所以可以直接使用CNN模型训练的过程来完成。在本地比赛中如果使用得到的预训练模型越强,则最终的精度越好。

在构建模型并进行训练之前,非常建议将训练集图片提前进行缩放,这样加快图片的读取速度,也可以加快模型的训练速度。具体的缩放代码如下:

import cv2, glob, osimport numpy as npos.mkdir('train_512')
os.mkdir('validation_512')for path in glob.glob('./train/*'):    if os.path.exists('train_512/' + path.split('/')[-1]):        continueimg = cv2.imread(path)    try:img = cv2.resize(img, (512, 512))cv2.imwrite('train_512/' + path.split('/')[-1], img)    except:        passfor path in glob.glob('./validation/*'):    if os.path.exists('validation_512/' + path.split('/')[-1]):        continueimg = cv2.imread(path)    try:img = cv2.resize(img, (512, 512))cv2.imwrite('validation_512/' + path.split('/')[-1], img)    except:img = np.zeros((512, 512, 3))cv2.imwrite('validation_512/' + path.split('/')[-1], img)

Pytorch版本baseline

如果使用Pytorch,则需要按照如下步骤进行:

  • 定义数据集

  • 定义模型

  • 模型训练和预测

class BiendataDataset(Dataset):    def __init__(self, img_path, img_label, transform=None):self.img_path = img_pathself.img_label = img_labelself.transform = transform    def __getitem__(self, index):        try:img = Image.open(self.img_path[index]).convert('RGB')        except:index = 0img = Image.open(self.img_path[index]).convert('RGB')        if self.transform is not None:img = self.transform(img)label = torch.from_numpy(np.array([self.img_label[index]]))        return img, label    def __len__(self):        return len(self.img_path)

预训练模型推荐使用efficientnet,模型精度会更好。

import timm
model = timm.create_model('efficientnet_b4', num_classes=6, pretrained=True, in_chans=3)

具体的数据扩增方法为:

transforms.Compose([transforms.Resize((300, 300)),transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.RandomAffine(5, scale=[0.95, 1.05]),transforms.RandomCrop((256, 256)),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

TF2.0版本baseline

如果使用TF2.0,则更加简单:

  • 定义ImageDataGenerator

  • 定义模型

  • 模型训练和预测

模型加载代码为:

from efficientnet.tfkeras import EfficientNetB4
models = EfficientNetB4(weights='imagenet', include_top=False)

具体的数据扩增方法为:

train_datagen = ImageDataGenerator(rescale=1. / 255,  # 归一化rotation_range=45,  # 旋转角度width_shift_range=0.1,  # 水平偏移height_shift_range=0.1,  # 垂直偏移shear_range=0.1,  # 随机错切变换的角度zoom_range=0.25,  # 随机缩放的范围horizontal_flip=True,  # 随机将一半图像水平翻转fill_mode='nearest' # 填充像素的方法
)

5 赛题上分思路

如果使用baseline的思路,则可以取得线上0.85的成绩。如果还想取得更优的成绩,可以考虑如下操作:

  1. 对数据集图片的主体物体进行定位&检测。

  2. 通过五折交叉验证,训练得到5个模型然后对测试集进行投票。

  3. 对测试集结果进行数据扩增,然后进行投票。

 baseline地址:https://www.biendata.xyz/media/download_file/21771129e38ed3f5b565af858fcd80b1.zip

参赛办法

扫描下方二维码或点击“阅读原文“

详解这场图片分类赛baseline,赢取官方人才认证+奖金相关推荐

  1. Quartus II 8.1 详解--有图---图片详解 【1讲】

    Quartus II 8.1  详解--有图---图片详解    看图片比较清楚,比文章清楚的多 本文转自 zhangguangyi 51CTO博客,原文链接http://blog.51cto.com ...

  2. java图片上传并解析,详解SpringMVC实现图片上传以及该注意的小细节

    本篇文章主要介绍了详解SpringMVC实现图片上传以及该注意的小细节,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 先附上图片上传的代码 jsp代码如下: ![](${path}/mall/i ...

  3. Java简单类、变量详解(概念和分类、声明、命名、初始化)

    1初识JAVA简单类 (1)创建第一个Java程序的具体步骤: 第一步:创建一个工程,在Package Explorer空白区域中右击New->点击Java Project->填写Proj ...

  4. 详解2020数学建模国赛A题炉温曲线

    详解2020数学建模国赛A题炉温曲线 问题描述 在集成电路板等电子产品生产中,需要将安装有各种电子元件的印刷电路板放置在回焊炉中,通过加热,将电子元件自动焊接到电路板上.在这个生产过程中,让回焊炉的各 ...

  5. python的tkinter插入图片_详解python tkinter 图片插入问题

    通过tkinter.PhotoImage插入GIF, PGM/PPM格式的图片. import tkinter class Gui: def __init__(self): self.gui=tkin ...

  6. Android 视频图片 轮播,详解android 视频图片混合轮播实现

    循环添加视频view  图片view for (int i = 0 ;i if (beansarraylist.get(i).gettype()==1){ videoplayer = new nice ...

  7. css3:border-radius圆角边框详解 (变圆 图片)

    转:http://www.kuqin.com/shuoit/20141014/342620.html border-radius:50% 今天来聊聊这个border-radius属性,radius的英 ...

  8. React中使用Vditor详解(自定义图片)

    安装 npm install vditor -s 引用 导入依赖包 import Vditor from "vditor"; 导入样式 import "vditor/sr ...

  9. iOS疯狂详解之AFNetworking图片缓存问题

    AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...

最新文章

  1. wps定位对话框快捷键_F1~F12快捷键,高效办公的12个方法
  2. 实现位数超过32bit的整数的加减乘除运算_Excel的加减乘除已经不再是你想象的加减乘除...
  3. 栈——用顺序表实现栈操作
  4. CVPR 2019 | INIT:针对实例级的图像翻译
  5. html隐藏定位,html – 如何使绝对定位(溢出:隐藏)容器的绝对定位的子项显示在其父项区域之外?...
  6. IIS7.0站点/虚拟目录中访问共享
  7. 生成技术在人工智能平台中的应用探索
  8. TikZ绘图示例——尺规作图: 圆内接正七边形的近似画法
  9. Flex4_操作XML
  10. 《利用Python进行数据分析·第2版》第13章 Python建模库介绍
  11. 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)...
  12. 初探socket 报式
  13. 遥感原理与应用 【I】
  14. 一个20岁工作了4年男网管真情自白书
  15. 克莱斯勒等公司宣布召回缺陷汽车
  16. 服务器ping不通,但是远程桌面可以连接上
  17. 浅谈电子学--台湾新竹交通大学 陈英龙
  18. SpringBoot - 单元测试利器Mockito入门
  19. MFC 公用函数和函数指针和动态库
  20. ICT案例——园区网配置

热门文章

  1. 减少HQL 的MAP数
  2. 简述 OAuth 2.0 的运作流程
  3. ifrmae内层和外层高度同步
  4. 《软件测试经验与教训》之二——测试内容先后顺序
  5. Web开发人员为什么越来越懒了?
  6. 性能指标:QPS、TPS、RT、吞吐量
  7. 一文读懂物联网 MQTT 协议之基础特性篇
  8. 图算法在斗鱼反作弊中的实践
  9. 面试题:mysql 一棵 B+ 树能存多少条数据?
  10. 程序员10大终极杀器,你get了几个?