当前位置: 首页 > news >正文

昇思25天学习打卡营第19天|应用实践之基于MobileNetv2的垃圾分类

基本介绍

        今天的应用实践是垃圾分类代码开发,整体流程是读取本地图像数据作为输入,对图像中的垃圾物体进行检测,并且将检测结果图片保存到文件中。采用的是MobileNetv2模型,使用官方提供的数据集,数据集分为4大类(干垃圾、可回收物、湿垃圾、有害垃圾),每个大类里面都有一些具体物体。

MobileNetv2模型简介

        MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络,相比于传统的卷积神经网络,MobileNet网络使用深度可分离卷积(Depthwise Separable Convolution)的思想在准确率小幅度降低的前提下,大大减小了模型参数与运算量。并引入宽度系数 α和分辨率系数 β使模型满足不同应用场景的需求。由于MobileNet网络中Relu激活函数处理低维特征信息时会存在大量的丢失,所以MobileNetV2网络提出使用倒残差结构(Inverted residual block)和Linear Bottlenecks来设计网络,以提高模型的准确率,且优化后的模型更小。

图中Inverted residual block结构是先使用1x1卷积进行升维,然后使用3x3的DepthWise卷积,最后使用1x1的卷积进行降维,与Residual block结构相反。Residual block是先使用1x1的卷积进行降维,然后使用3x3的卷积,最后使用1x1的卷积进行升维。

详细内容可参见MobileNetV2论文

MobileNetv2代码实践

        官方给的代码实践是经典的深度学习流程。即数据集预处理,模型搭建,模型训练,模型评估,模型推理。不过今天新增一步,就是导出AIR模型文件,用于后续Atlas 200 DK上的模型转换与推理,但是手上没有Atlas 200DK开发板,所以这步做不了,只导出AIR模型文件。详细的可直接参考官方的代码实践,这里给出我自己的运行结果和部分代码。

  • 数据集预处理后部分可视化

  • 模型训练超参数配置代码
# 垃圾分类数据集标签,以及用于标签映射的字典。
garbage_classes = {'干垃圾': ['贝壳', '打火机', '旧镜子', '扫把', '陶瓷碗', '牙刷', '一次性筷子', '脏污衣服'],'可回收物': ['报纸', '玻璃制品', '篮球', '塑料瓶', '硬纸板', '玻璃瓶', '金属制品', '帽子', '易拉罐', '纸张'],'湿垃圾': ['菜叶', '橙皮', '蛋壳', '香蕉皮'],'有害垃圾': ['电池', '药片胶囊', '荧光灯', '油漆桶']
}class_cn = ['贝壳', '打火机', '旧镜子', '扫把', '陶瓷碗', '牙刷', '一次性筷子', '脏污衣服','报纸', '玻璃制品', '篮球', '塑料瓶', '硬纸板', '玻璃瓶', '金属制品', '帽子', '易拉罐', '纸张','菜叶', '橙皮', '蛋壳', '香蕉皮','电池', '药片胶囊', '荧光灯', '油漆桶']
class_en = ['Seashell', 'Lighter','Old Mirror', 'Broom','Ceramic Bowl', 'Toothbrush','Disposable Chopsticks','Dirty Cloth','Newspaper', 'Glassware', 'Basketball', 'Plastic Bottle', 'Cardboard','Glass Bottle', 'Metalware', 'Hats', 'Cans', 'Paper','Vegetable Leaf','Orange Peel', 'Eggshell','Banana Peel','Battery', 'Tablet capsules','Fluorescent lamp', 'Paint bucket']index_en = {'Seashell': 0, 'Lighter': 1, 'Old Mirror': 2, 'Broom': 3, 'Ceramic Bowl': 4, 'Toothbrush': 5, 'Disposable Chopsticks': 6, 'Dirty Cloth': 7,'Newspaper': 8, 'Glassware': 9, 'Basketball': 10, 'Plastic Bottle': 11, 'Cardboard': 12, 'Glass Bottle': 13, 'Metalware': 14, 'Hats': 15, 'Cans': 16, 'Paper': 17,'Vegetable Leaf': 18, 'Orange Peel': 19, 'Eggshell': 20, 'Banana Peel': 21,'Battery': 22, 'Tablet capsules': 23, 'Fluorescent lamp': 24, 'Paint bucket': 25}# 训练超参
config = EasyDict({"num_classes": 26,"image_height": 224,"image_width": 224,#"data_split": [0.9, 0.1],"backbone_out_channels":1280,"batch_size": 16,"eval_batch_size": 8,"epochs": 10,"lr_max": 0.05,"momentum": 0.9,"weight_decay": 1e-4,"save_ckpt_epochs": 1,"dataset_path": "./data_en","class_index": index_en,"pretrained_ckpt": "./mobilenetV2-200_1067.ckpt" # mobilenetV2-200_1067.ckpt 
})
  • 模型训练结果

        由于时间原因,我只训练了两轮,准确率只达到20%左右,正常使用训练个几十轮的才会有比较好的效果

  • 模型推理结果

        选用一些图片进行推理,但没有可视化,推理的图像如下

总结

        今天MobileNetv2的模型结构介绍的比较少,详细的需要看论文,但是论文是纯英文的,看起来有难度,所以就去找了别人写的博客看看。看完了解后就开始运行代码,其实今天的重点应该是后续的ATC工具的使用,没有条件就没有进行了。后续我又看了,发现在线环境是符合要求的,只是不太会使用ATC工具,就没有做这个模型转换的步骤了。

Jupyter运行情况

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Rust vs Go: 特点与应用场景分析
  • 音视频入门基础:H.264专题(12)——FFmpeg源码中通过SPS属性计算视频分辨率的实现
  • WPF设置全局样式
  • 学Java JVM:全面解析Java虚拟机
  • 人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作与代码详解
  • 基于STM32设计的药品柜温湿度监测系统(华为云IOT)(184)
  • Linux 命令集
  • 【ai】决策树
  • 关于魔兽世界服务器负载的资料、计算和思考
  • 修改ES索引名称
  • vue3中谷歌地图+外网申请-原生-实现地址输入搜索+点击地图获取地址回显 +获取国外的geoJson实现省市区级联选择
  • 什么是软件定义安全SDSec
  • Archery 之SQL审核系统部署
  • MT6825磁编码IC在智能双旋机器人中的应用
  • 端到端拥塞控制的本质
  • @jsonView过滤属性
  • [译]如何构建服务器端web组件,为何要构建?
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【EOS】Cleos基础
  • Babel配置的不完全指南
  • CSS 专业技巧
  • css选择器
  • Hibernate【inverse和cascade属性】知识要点
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java知识点总结(JavaIO-打印流)
  • Vue2 SSR 的优化之旅
  • vue总结
  • 翻译:Hystrix - How To Use
  • 工程优化暨babel升级小记
  • 检测对象或数组
  • 数据科学 第 3 章 11 字符串处理
  • 数组的操作
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • Python 之网络式编程
  • 正则表达式-基础知识Review
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #ifdef 的技巧用法
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (6)STL算法之转换
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (zhuan) 一些RL的文献(及笔记)
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)ssm高校实验室 毕业设计 800008
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)理解angular中的module和injector,即依赖注入
  • (三分钟)速览传统边缘检测算子
  • (十六)视图变换 正交投影 透视投影
  • (一) storm的集群安装与配置
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)