详解这场图片分类赛baseline,赢取官方人才认证+奖金
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的成绩。如果还想取得更优的成绩,可以考虑如下操作:
对数据集图片的主体物体进行定位&检测。
通过五折交叉验证,训练得到5个模型然后对测试集进行投票。
对测试集结果进行数据扩增,然后进行投票。
baseline地址:https://www.biendata.xyz/media/download_file/21771129e38ed3f5b565af858fcd80b1.zip
参赛办法
扫描下方二维码或点击“阅读原文“
详解这场图片分类赛baseline,赢取官方人才认证+奖金相关推荐
- Quartus II 8.1 详解--有图---图片详解 【1讲】
Quartus II 8.1 详解--有图---图片详解 看图片比较清楚,比文章清楚的多 本文转自 zhangguangyi 51CTO博客,原文链接http://blog.51cto.com ...
- java图片上传并解析,详解SpringMVC实现图片上传以及该注意的小细节
本篇文章主要介绍了详解SpringMVC实现图片上传以及该注意的小细节,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 先附上图片上传的代码 jsp代码如下: ![](${path}/mall/i ...
- Java简单类、变量详解(概念和分类、声明、命名、初始化)
1初识JAVA简单类 (1)创建第一个Java程序的具体步骤: 第一步:创建一个工程,在Package Explorer空白区域中右击New->点击Java Project->填写Proj ...
- 详解2020数学建模国赛A题炉温曲线
详解2020数学建模国赛A题炉温曲线 问题描述 在集成电路板等电子产品生产中,需要将安装有各种电子元件的印刷电路板放置在回焊炉中,通过加热,将电子元件自动焊接到电路板上.在这个生产过程中,让回焊炉的各 ...
- python的tkinter插入图片_详解python tkinter 图片插入问题
通过tkinter.PhotoImage插入GIF, PGM/PPM格式的图片. import tkinter class Gui: def __init__(self): self.gui=tkin ...
- Android 视频图片 轮播,详解android 视频图片混合轮播实现
循环添加视频view 图片view for (int i = 0 ;i if (beansarraylist.get(i).gettype()==1){ videoplayer = new nice ...
- css3:border-radius圆角边框详解 (变圆 图片)
转:http://www.kuqin.com/shuoit/20141014/342620.html border-radius:50% 今天来聊聊这个border-radius属性,radius的英 ...
- React中使用Vditor详解(自定义图片)
安装 npm install vditor -s 引用 导入依赖包 import Vditor from "vditor"; 导入样式 import "vditor/sr ...
- iOS疯狂详解之AFNetworking图片缓存问题
AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...
最新文章
- wps定位对话框快捷键_F1~F12快捷键,高效办公的12个方法
- 实现位数超过32bit的整数的加减乘除运算_Excel的加减乘除已经不再是你想象的加减乘除...
- 栈——用顺序表实现栈操作
- CVPR 2019 | INIT:针对实例级的图像翻译
- html隐藏定位,html – 如何使绝对定位(溢出:隐藏)容器的绝对定位的子项显示在其父项区域之外?...
- IIS7.0站点/虚拟目录中访问共享
- 生成技术在人工智能平台中的应用探索
- TikZ绘图示例——尺规作图: 圆内接正七边形的近似画法
- Flex4_操作XML
- 《利用Python进行数据分析·第2版》第13章 Python建模库介绍
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)...
- 初探socket 报式
- 遥感原理与应用 【I】
- 一个20岁工作了4年男网管真情自白书
- 克莱斯勒等公司宣布召回缺陷汽车
- 服务器ping不通,但是远程桌面可以连接上
- 浅谈电子学--台湾新竹交通大学 陈英龙
- SpringBoot - 单元测试利器Mockito入门
- MFC 公用函数和函数指针和动态库
- ICT案例——园区网配置