【大作业-04】手把手教你构建垃圾分类系统-基于tensorflow2.3

AI摘要

本文手把手教你构建基于TensorFlow 2.3的垃圾分类系统,涵盖环境配置、代码实现、模型训练与测试,以及桌面程序构建。重点介绍了如何使用已有的物体分类模板代码训练自己的数据集,包括数据预处理、模型选择(如LeNet和MobileNet)、模型训练与评估,以及最终的图形界面实现。文章还讨论了垃圾分类的意义和应用,提供了详细的代码和资源链接,适合希望深入了解图像分类和计算机视觉领域的读者。

B站视频:手把手教你构建垃圾分类系统-基于tensorflow2.3_哔哩哔哩_bilibili

代码地址:trash_classification_tf2.3: 基于tensorflow2.3的垃圾分类系统 (gitee.com)

模型和数据集地址:垃圾分类数据集和tf代码-8w张图片245个类.zip-深度学习文档类资源-优快云下载

大家有什么想法也可以在评论区留言,我会根据留言情况出对应的教程。

哈喽,大家好,这里是dejahu,本期教程给大家带来的是基于tensorflow2.3的垃圾分类系统,主要还是为了教会大家如何使用我写好的物体分类模板代码去训练自己的数据集(手把手教你用tensorflow2.3训练自己的分类数据集_dejahu的博客-优快云博客)。本期构建的模型将会采用我事先清洗好的数据集,包含4个大类和245个小类,为了方便对比,我将会训练两个卷积神经网络模型,一个是结构比较简单的lenet模型,一个是结构相对复杂但是网络更加轻量的mobilnet模型,最后通过pyqt5构建图形化的界面,用户上传图片,系统给出垃圾的具体种类,效果如下:

image-20210625133930243

image-20210625134014304

这段话大家可以写在实验报告的前面,说明垃圾分类的意义。2019年9月,为推动全国公共机构做好生活垃圾分类工作,发挥率先示范作用,国家机关事务管理局印发通知,公布《公共机构生活垃圾分类工作评价参考标准》,并就进一步推进有关工作提出要求。垃圾分类在我国很多城市已经推行了很长的一段时间并且将会持续推行下去,垃圾分类可以提高垃圾的资源价值和经济价值,力争物尽其用,减少垃圾处理量和处理设备的使用,降低处理成本,减少土地资源的消耗,具有社会、经济、生态等几方面的效益。

环境配置

Ananconda和pycharm软件安装

我们的代码是基于python进行开发的,所以在正式开始之前,你需要保证你的电脑上已经配置好了python的基础环境。这里我们将会使用到两个软件:一个是anaconda,用来帮助我们控制虚拟环境,一个是pycharm,用来帮助我们编写和调试代码,关于pycharm和ananconda的具体使用我在这里就不再进行赘述了,不会使用这两个软件的小伙伴可以看这期教程,里面详细演示了如何正确使用ananconda和pycharm,以及通过更换源的方式来提高anaconda中下载第三方库的速度的方法。

环境配置博客地址:如何在pycharm中配置anaconda的虚拟环境_dejahu的博客-优快云博客

在命令行中输出conda,如果输出下列信息,则表示ananconda安装完毕。

image-20210625134126925

另外pycharm我推荐大家使用最新的社区版本,免费而且功能强大,这是我本机的版本。

image-20210625134140526

代码配套虚拟环境配置

首先从下方链接下载代码并进行解压:

代码地址:trash_classification_tf2.3: 基于tensorflow2.3的垃圾分类系统 (gitee.com)

解压之后在代码目录下打开cmd

创建虚拟环境

image-20210625153604709

激活虚拟环境

image-20210625153635327

安装程序所需的第三方库

image-20210625153656623

数据处理

模型和数据集地址:垃圾分类数据集和tf代码-8w张图片245个类.zip-深度学习文档类资源-优快云下载

我通过爬虫的形式爬取了数据集并进行了清洗和分类,大家在下方的链接下载压缩包解压之后,可以在这个txt文件中获取该数据集的百度网盘链接,通过网盘下载之后进行解压即可:

image-20210625134928624

解压之后的数据集如下图所示,每个子文件夹存放的分别是对应名称的垃圾图片。

0ef0f54df64291822809b6ba7419af60

这里数据集一共包含4个大类和245个小类,大概有8w张图片左右,四个大类分别是厨余垃圾、可回收物、有害垃圾和其他垃圾,245个小类的具体类别如下:

trash_jpg
├─ 其他垃圾_PE塑料袋
├─ 其他垃圾_U型回形针
├─ 其他垃圾_一次性杯子
├─ 其他垃圾_一次性棉签
├─ 其他垃圾_串串竹签
├─ 其他垃圾_便利贴
├─ 其他垃圾_创可贴
├─ 其他垃圾_卫生纸
├─ 其他垃圾_厨房手套
├─ 其他垃圾_厨房抹布
├─ 其他垃圾_口罩
├─ 其他垃圾_唱片
├─ 其他垃圾_图钉
├─ 其他垃圾_大龙虾头
├─ 其他垃圾_奶茶杯
├─ 其他垃圾_干燥剂
├─ 其他垃圾_彩票
├─ 其他垃圾_打泡网
├─ 其他垃圾_打火机
├─ 其他垃圾_搓澡巾
├─ 其他垃圾_果壳
├─ 其他垃圾_毛巾
├─ 其他垃圾_涂改带
├─ 其他垃圾_湿纸巾
├─ 其他垃圾_烟蒂
├─ 其他垃圾_牙刷
├─ 其他垃圾_电影票
├─ 其他垃圾_电蚊香
├─ 其他垃圾_百洁布
├─ 其他垃圾_眼镜
├─ 其他垃圾_眼镜布
├─ 其他垃圾_空调滤芯
├─ 其他垃圾_笔
├─ 其他垃圾_胶带
├─ 其他垃圾_胶水废包装
├─ 其他垃圾_苍蝇拍
├─ 其他垃圾_茶壶碎片
├─ 其他垃圾_草帽
├─ 其他垃圾_菜板
├─ 其他垃圾_车票
├─ 其他垃圾_酒精棉
├─ 其他垃圾_防霉防蛀片
├─ 其他垃圾_除湿袋
├─ 其他垃圾_餐巾纸
├─ 其他垃圾_餐盒
├─ 其他垃圾_验孕棒
├─ 其他垃圾_鸡毛掸
├─ 厨余垃圾_八宝粥
├─ 厨余垃圾_冰激凌
├─ 厨余垃圾_冰糖葫芦
├─ 厨余垃圾_咖啡
├─ 厨余垃圾_圣女果
├─ 厨余垃圾_地瓜
├─ 厨余垃圾_坚果
├─ 厨余垃圾_壳
├─ 厨余垃圾_巧克力
├─ 厨余垃圾_果冻
├─ 厨余垃圾_果皮
├─ 厨余垃圾_核桃
├─ 厨余垃圾_梨
├─ 厨余垃圾_橙子
├─ 厨余垃圾_残渣剩饭
├─ 厨余垃圾_水果
├─ 厨余垃圾_泡菜
├─ 厨余垃圾_火腿
├─ 厨余垃圾_火龙果
├─ 厨余垃圾_烤鸡
├─ 厨余垃圾_瓜子
├─ 厨余垃圾_甘蔗
├─ 厨余垃圾_番茄
├─ 厨余垃圾_秸秆杯
├─ 厨余垃圾_秸秆碗
├─ 厨余垃圾_粉条
├─ 厨余垃圾_肉类
├─ 厨余垃圾_肠
├─ 厨余垃圾_苹果
├─ 厨余垃圾_茶叶
├─ 厨余垃圾_草莓
├─ 厨余垃圾_菠萝
├─ 厨余垃圾_菠萝蜜
├─ 厨余垃圾_萝卜
├─ 厨余垃圾_蒜
├─ 厨余垃圾_蔬菜
├─ 厨余垃圾_薯条
├─ 厨余垃圾_薯片
├─ 厨余垃圾_蘑菇
├─ 厨余垃圾_蛋
├─ 厨余垃圾_蛋挞
├─ 厨余垃圾_蛋糕
├─ 厨余垃圾_豆
├─ 厨余垃圾_豆腐
├─ 厨余垃圾_辣椒
├─ 厨余垃圾_面包
├─ 厨余垃圾_饼干
├─ 厨余垃圾_鸡翅
├─ 可回收物_不锈钢制品
├─ 可回收物_乒乓球拍
├─ 可回收物_书
├─ 可回收物_体重秤
├─ 可回收物_保温杯
├─ 可回收物_保鲜膜内芯
├─ 可回收物_信封
├─ 可回收物_充电头
├─ 可回收物_充电宝
├─ 可回收物_充电牙刷
├─ 可回收物_充电线
├─ 可回收物_凳子
├─ 可回收物_刀
├─ 可回收物_包
├─ 可回收物_单车
├─ 可回收物_卡
├─ 可回收物_台灯
├─ 可回收物_吊牌
├─ 可回收物_吹风机
├─ 可回收物_呼啦圈
├─ 可回收物_地球仪
├─ 可回收物_地铁票
├─ 可回收物_垫子
├─ 可回收物_塑料制品
├─ 可回收物_太阳能热水器
├─ 可回收物_奶粉桶
├─ 可回收物_尺子
├─ 可回收物_尼龙绳
├─ 可回收物_布制品
├─ 可回收物_帽子
├─ 可回收物_手机
├─ 可回收物_手电筒
├─ 可回收物_手表
├─ 可回收物_手链
├─ 可回收物_打包绳
├─ 可回收物_打印机
├─ 可回收物_打气筒
├─ 可回收物_扫地机器人
├─ 可回收物_护肤品空瓶
├─ 可回收物_拉杆箱
├─ 可回收物_拖鞋
├─ 可回收物_插线板
├─ 可回收物_搓衣板
├─ 可回收物_收音机
├─ 可回收物_放大镜
├─ 可回收物_日历
├─ 可回收物_暖宝宝
├─ 可回收物_望远镜
├─ 可回收物_木制切菜板
├─ 可回收物_木桶
├─ 可回收物_木棍
├─ 可回收物_木质梳子
├─ 可回收物_木质锅铲
├─ 可回收物_木雕
├─ 可回收物_枕头
├─ 可回收物_果冻杯
├─ 可回收物_桌子
├─ 可回收物_棋子
├─ 可回收物_模具
├─ 可回收物_毯子
├─ 可回收物_水壶
├─ 可回收物_水杯
├─ 可回收物_沙发
├─ 可回收物_泡沫板
├─ 可回收物_灭火器
├─ 可回收物_灯罩
├─ 可回收物_烟灰缸
├─ 可回收物_热水瓶
├─ 可回收物_燃气灶
├─ 可回收物_燃气瓶
├─ 可回收物_玩具
├─ 可回收物_玻璃制品
├─ 可回收物_玻璃器皿
├─ 可回收物_玻璃壶
├─ 可回收物_玻璃球
├─ 可回收物_瑜伽球
├─ 可回收物_电动剃须刀
├─ 可回收物_电动卷发棒
├─ 可回收物_电子秤
├─ 可回收物_电熨斗
├─ 可回收物_电磁炉
├─ 可回收物_电脑屏幕
├─ 可回收物_电视机
├─ 可回收物_电话
├─ 可回收物_电路板
├─ 可回收物_电风扇
├─ 可回收物_电饭煲
├─ 可回收物_登机牌
├─ 可回收物_盒子
├─ 可回收物_盖子
├─ 可回收物_盘子
├─ 可回收物_碗
├─ 可回收物_磁铁
├─ 可回收物_空气净化器
├─ 可回收物_空气加湿器
├─ 可回收物_笼子
├─ 可回收物_箱子
├─ 可回收物_纸制品
├─ 可回收物_纸牌
├─ 可回收物_罐子
├─ 可回收物_网卡
├─ 可回收物_耳套
├─ 可回收物_耳机
├─ 可回收物_衣架
├─ 可回收物_袋子
├─ 可回收物_袜子
├─ 可回收物_裙子
├─ 可回收物_裤子
├─ 可回收物_计算器
├─ 可回收物_订书机
├─ 可回收物_话筒
├─ 可回收物_豆浆机
├─ 可回收物_路由器
├─ 可回收物_轮胎
├─ 可回收物_过滤网
├─ 可回收物_遥控器
├─ 可回收物_量杯
├─ 可回收物_金属制品
├─ 可回收物_钉子
├─ 可回收物_钥匙
├─ 可回收物_铁丝球
├─ 可回收物_铅球
├─ 可回收物_铝制用品
├─ 可回收物_锅
├─ 可回收物_锅盖
├─ 可回收物_键盘
├─ 可回收物_镊子
├─ 可回收物_闹铃
├─ 可回收物_雨伞
├─ 可回收物_鞋
├─ 可回收物_音响
├─ 可回收物_餐具
├─ 可回收物_餐垫
├─ 可回收物_饰品
├─ 可回收物_鱼缸
├─ 可回收物_鼠标
├─ 有害垃圾_指甲油
├─ 有害垃圾_杀虫剂
├─ 有害垃圾_温度计
├─ 有害垃圾_灯
├─ 有害垃圾_电池
├─ 有害垃圾_电池板
├─ 有害垃圾_纽扣电池
├─ 有害垃圾_胶水
├─ 有害垃圾_药品包装
├─ 有害垃圾_药片
├─ 有害垃圾_药瓶
├─ 有害垃圾_药膏
├─ 有害垃圾_蓄电池
└─ 有害垃圾_血压计

数据集下载之后即可使用,不需要进行进一步的处理,大家只需要记住数据集的位置即可,在后面我们将会把代码中的数据集位置修改为我们自己的数据集位置,比如我这里的数据集位置是F:\datas\tmp\data\tttt\trash_jpg。

模型训练

代码可以在下方的码云链接中进行下载,如果不像训练的小伙伴可以在下方的模型和数据集下载地址下载我训练好的模型,模型的位置了code目录的models目录下。

数据集和模型地址:垃圾分类数据集和tf代码-8w张图片245个类.zip-深度学习文档类资源-优快云下载

image-20210625135712173

两个模型训练的代码分别是train_cnn.py和train_mobilenet.py,分别对应cnn模型和mobilenet模型的训练。

image-20210625135831675

cnn模型训练

cnn模型训练部分通过tensorflow构建了一个简单的卷积神经网络,这个神经网络由两层卷积和两层池化所构成,之后将特征拉直之后送入到两个全连接层进行分类,模型的具体结构如下:

image-20210625140010130

模型的具体构建如下,这里我们采用adam的优化器,并使用交叉熵作为我们的损失函数。

# 模型加载
def model_load(IMG_SHAPE=(224, 224, 3), class_num=245):
    # 通过keras构建模型
    model = tf.keras.models.Sequential([
        tf.keras.layers.experimental.preprocessing.Rescaling(1. / 255, input_shape=IMG_SHAPE),  # 归一化,将像素值处理成0到1之间的值
        tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),  # 卷积层,32个输出通道,3*3的卷积核,激活函数为relu
        tf.keras.layers.MaxPooling2D(2, 2),  # 池化层,特征图大小减半
        # Add another convolution
        tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层,32个输出通道,3*3的卷积核,激活函数为relu
        tf.keras.layers.MaxPooling2D(2, 2),  # 池化层,特征图大小减半
        tf.keras.layers.Flatten(),  # 将二维的特征图拉直
        # The same 128 dense layers, and 10 output layers as in the pre-convolution example:
        tf.keras.layers.Dense(128, activation='relu'),  # 128个神经元的全连接层
        tf.keras.layers.Dense(class_num, activation='softmax')  # 输出层,对应数据集具体的类别数目
    ])
    model.summary()  # 输出模型信息
    # 模型训练
    model.compile(optimizer='adam', loss='categorical_crossentropy',
                  metrics=['accuracy'])  # 编译模型,指定模型的优化器是adam,模型使用的损失函数的交叉熵损失函数
    return model  # 返回模型

如果想要自己训练,只需配置到基本的环境之后,修改数据集的位置即可,我在代码中标注了todo的地方都是大家需要修改的地方,如下图所示,在代码的82行我指明的是我们的数据集的位置,在代码的87行,我指明训练好的模型将会保存在models目录下,并且在代码的95行,我指明了我训练的轮数是30轮,也就是在这8个g的数据集上要跑30个来回。

image-20210625140413822

训练结束之后,将会得到训练生成的模型保存在models目录下以及训练过程的折线图,在results目录下,如下图所示,从图中可以看出,随着训练的进行,模型的准确率在不断提高,误差在不断下降。

results_cnn_epoch30

mobilenet模型训练

mobilenet是我非常喜欢的一个模型,这个模型采用了深度可分离卷积的技术,提高了网络的层次,提升了准确率,而且模型非常轻量,训练好的mobilenet模型不到20m,在cpu的条件下或者是在手机的条件下都有不错的性能,模型的结构图如下,模型比较深,我只截取了部分,大家可以下载netron软件自行查看模型结构。

image-20210625142218267

这里的训练方式我们采用的是迁移学习的方式,即只使用mobilenet的特征提取层,特征提取层的参数已经在大型数据集imagenet上训练好,不需要再进行训练,我们只需要添加全连接层,对应到具体的分类数据即可,详细的代码如下:

# 模型加载,指定图片处理的大小和是否进行迁移学习
def model_load(IMG_SHAPE=(224, 224, 3), class_num=245):
    # 微调的过程中不需要进行归一化的处理
    base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
                                                   include_top=False,
                                                   weights='imagenet') # 加载mobilenetv2模型
    base_model.trainable = False # 将主干的特征提取网络参数进行冻结
    model = tf.keras.models.Sequential([
        tf.keras.layers.experimental.preprocessing.Rescaling(1. / 127.5, offset=-1, input_shape=IMG_SHAPE), # 归一化处理,将像素值处理为-1到1之间
        base_model,
        tf.keras.layers.GlobalAveragePooling2D(), # 全局平均池化
        tf.keras.layers.Dense(class_num, activation='softmax') # 设置最后的全连接层,用于分类
    ])
    model.summary() # 输出模型信息
    # 模型训练
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 用于编译模型,指定模型的优化器是adam优化器,模型的损失函数是交叉熵损失函数
    return model # 返回模型

同cnn模型的训练一样,如果需要自己训练的话,只需要修改几个参数即可,如下所示:

image-20210625142755881

训练完成之后,同样是得到训练好的模型,模型将会保存再models目录下,以及训练过程中的折线图,如下所示:

results_mobilenet_epoch30

模型测试

模型的测试部分也是分别对两个模型进行测试,主要是测试两个模型在测试集上的准确率表现,测试的代码是test_model.py,模型的测试通过evaluate函数进行,执行该函数之前需要先加载数据集和训练好的模型,我们有两个模型,所以我们应该要得到这两个模型的准确率信息,需要修改的地方有四处,如下所示:

image-20210625143505273

修改完成之后直接执行该文件即可,会在命令行中输出具体的准确率信息,如下所示:

image-20210625143818024

上面两个红框就是模型对应的具体准确率信息,可以看出cnn模型的准确率只有68%,mobilnet的准确率比较高,大概是在83%左右,也就是相对于cnn模型来说,mobilenet模型的准确率大概有15个百分点的提升,所以在后面的模型使用的时候我们选择mobilnet模型。

另外,我还对mobilenet模型测试了四个大类上的分别准确率信息,由于数据集过大,这部分代码在跑的时候十分不稳定,所以在这里我放了结果,具体的逻辑也在test_model代码中,需要现将测试结果保存在pkl文件之后再进行热力图的绘制,具体的结果如下:

测试热力图

模型使用

桌面程序构建

桌面程序的构建使用的是pyqt5,pyqt5构建出来的界面相对比较美观一些,大家只需要掌握qt中的信号和槽函的机制就能很方便的开发出自己的界面程序,我们所开发的界面程序主要是两个功能,即上传图片和图片预测的功能,界面的程序是代码中的window_trash.py,大家需要在代码中的18行修改为自己训练好的模型位置即可。

image-20210625150201587

其中图片上传和预测的逻辑如下,用户点击上传图片的功能进行图片的上传,系统将图片处理成224的大小方便后面送入模型进行预测,点击预测按钮之后系统调用在18行中加载好的模型预测结果并进行显示。

    # 上传图片
    def change_img(self):
        openfile_name = QFileDialog.getOpenFileName(self, 'chose files', '', 'Image files(*.jpg *.png *jpeg)')
        img_name = openfile_name[0]
        if img_name == '':
            pass
        else:
            target_image_name = "images/tmp_single" + img_name.split(".")[-1]
            shutil.copy(img_name, target_image_name)
            self.to_predict_name = target_image_name
            img_init = cv2.imread(self.to_predict_name)
            h, w, c = img_init.shape
            scale = 400 / h
            img_show = cv2.resize(img_init, (0, 0), fx=scale, fy=scale)
            cv2.imwrite("images/show.png", img_show)
            img_init = cv2.resize(img_init, (224, 224))
            cv2.imwrite('images/target.png', img_init)
            self.img_label.setPixmap(QPixmap("images/show.png"))

    # 预测图片
    def predict_img(self):
        img = Image.open('images/target.png')
        img = np.asarray(img)
        outputs = self.model.predict(img.reshape(1, 224, 224, 3))
        result_index = int(np.argmax(outputs))
        result = self.class_names[result_index]
        names = result.split("_")
        # print(result)
        if names[0] == "厨余垃圾":
            self.label_info.setText(
                "厨余垃圾是指居民日常生活及食品加工、饮食服务、单位供餐等活动中产生的垃圾,包括丢弃不用的菜叶、剩菜、剩饭、果皮、蛋壳、茶渣、骨头等。由于厨余垃圾含有极高的水分与有机物,很容易腐坏,产生恶臭。经过妥善处理和加工,可转化为新的资源,高有机物含量的特点使其经过严格处理后可作为肥料、饲料,也可产生沼气用作燃料或发电,油脂部分则可用于制备生物燃料。")
        if names[0] == "有害垃圾":
            self.label_info.setText(
                "有害垃圾指对人体健康或者自然环境造成直接或者潜在危害的生活废弃物。常见的有害垃圾包括废灯管、废油漆、杀虫剂、废弃化妆品、过期药品、废电池、废灯泡、废水银温度计等,有害垃圾需按照特殊正确的方法安全处理,一般需要经过特殊的处理之后才可以进行焚烧,堆肥,填埋处理")
        if names[0] == "可回收物":
            self.label_info.setText(
                " 根据《城市生活垃圾分类及其评价标准》行业标准以及参考德国垃圾分类法,可回收物是指适宜回收循环使用和资源利用的废物。主要包括:纸类,塑料,金属,玻璃,织物等。主要的处理方式有:1.垃圾再生法;2.垃圾焚烧法;3.垃圾堆肥法;4.垃圾生物降解法。")
        if names[0] == "其他垃圾":
            self.label_info.setText(
                "其他垃圾指危害比较小,没有再次利用的价值的垃圾,其他垃圾包括砖瓦陶瓷、渣土、卫生间废纸、瓷器碎片、动物排泄物、一次性用品等难以回收的废弃物。一般都采取填埋、焚烧、卫生分解等方法处理,部分还可以使用生物分解的方法解决")
        self.result.setText(names[0])
        self.result_f.setText(names[1])

效果如下:

image-20210625150904213

flask网页端程序构建

程序还在构建中,感兴趣的小伙伴可以持续关注,大概7月份会出相关教程

手机安卓程序构建

程序还在构建中,感兴趣的小伙伴可以持续关注,大概7月份会出相关教程

写在最后

大家好,这里是dejahu,你所看到的这篇教程是大作业怎么搞系列的其中一篇,大作业怎么搞系列的初衷是为了帮助大家写大作业的时候能够有所参考,目前来看这个系列的反响还不错,这个系列目前出的教程基本都是围绕使用tensorflow2.3建立图像分类模型进行的,关于如何使用tensorflow2.3训练自己的数据集我也出了一期详细的教程(手把手教你用tensorflow2.3训练自己的分类数据集_dejahu的博客-优快云博客),所以目前关于图像分类的部分我打算暂时就不再更新了,有问题的小伙伴可以在评论区留言。

因为我本身的研究方向是计算机视觉,擅长的开发语言是python,所以下面会有一些其他的策划,大概是这样的:

  • 网页端和移动端的模型部署
  • 详解卷积神经网络
  • 一些好的神经网络模型的介绍
  • 使用pytorch进行图像分类
  • yolo系列算法
  • Pyqt5构建图形化界面教程
  • 图像处理基础知识

最后,还是感谢大家一路一来的支持,嘻嘻!

基于TensorFlow的简单的垃圾分类系统的实现 垃圾分类是近段时间来,全国范围内的热点问题,它是需要落实到我们每一个人身上来。但是由于范围太广且是最近才开展的工作,所以还是有“混合垃圾”出现。人工智能机器学习也是今年来快速发展的技术,那么利用TensorFlow去简单进行垃圾分类其实也是非常不错的选择。本文就使用TensorFlow中比较常见且使用非常广泛的卷积神经网络来实现智能垃圾分类的目标,卷积神经网络是现今图像分类的比较好的解决方案。TensorFlow扎根于Python中,并且还是跨平台的,兼容性方面自然不必多讲,主要是其整个的生态是十分健全的, 阅读详情

相关推荐

基于TensorFlow的简单的垃圾分类系统

*计算机系统的介绍。

2301_79809972的博客 858

1W+张高质量图像数据-----tensorflow垃圾分类器实现,附完整项目

本系统的训练数据集共13100张,采用多个开源数据集,使用软件,人工等方法筛查合并而成,做了4分类,30小类,数据格式全为jpg,如下图:部分数据集展示类别一览--tea--eggshell--bag--can--shoes--anvil--pot--ointment--meal--bone--pulp还有一个二分类的数据集(可回收垃圾,有机垃圾),也可达90%的准确率,相对简单,在3轮epoch左右就会过拟合。

goodness_for_me的博客 2226

如何使用Python、TensorFlow和Keras来进行垃圾分类?

垃圾分类是现代城市中越来越重要的问题,通过垃圾分类可以有效地减少环境污染和资源浪费。随着人工智能技术的发展,使用机器学习模型进行垃圾分类已经成为了一种趋势。本文将介绍如何使用Python、TensorFlow和Keras来进行垃圾分类。

梦在硅谷的博客 1275

CNN tensorflow keras基本概念 — 垃圾分类项目

神经网络基本概念,以垃圾分类为列一、简单概念二、为什么用激活函数2.1 sigmoid2.2 Tanh函数2.3 ReLUsoftmax函数激活函数的如何选择三、垃圾分类代码 垃圾分类数据集 链接:https://pan.baidu.com/s/1a5wVYRPLOY4fI0SF-rTYlg 提取码:u4lc 一、简单概念 1、stride :表示卷积的步长; 2、fsize:表示卷积层滤波器的大...

小麦粒的Python 1万+

【信息科学与工程学】计算机科学与自动化—第十五篇 云计算 11 算法篇01

编号类型领域问题问题的数学分析(含几何学/拓扑学/代数学/数论/集合论/离散数学/概率论/统计学/其他)及数值分析及算法分析及参数列表及参数数值设计C/C++/rust/python代码软件(含编译器)及硬件资源需求(CPU/GPU/内存【NAND/DRAM/HBM/其他】/HBM、HDD、SSD、RAID卡、其他)关联知识1工作负载调度数据中心最小化总完成时间/成本。

weixin_49199313的博客 220

【大作业-03】手把手教你用tensorflow2.3训练自己的分类数据集

配合视频一起食用这篇教程效果更佳:课设题目没想好?手把手教你用tensorflow2构建果蔬识别系统 tensorflow2.x版本对小白非常友好,2.x的api中对keras进行了合并,大家只需要安装tensorflow就可以使用里面封装好的keras,利用keras可以快速地加载数据集和构建模型,下面我们直接来看以下通过tensorflow2.3训练自己的分类数据集吧。 注:本文主要针对图片形式的数据集构建分类模型,文本数据、目标检测等任务暂不涉及。 本文使用到的代码已在码云上开源,请大家自行下载,st

dejahu的博客 6万+

Pycharm创建虚拟环境使用tensorflow

Pycharm创建虚拟环境使用tensorflow

weixin_40623018的博客 979

树莓派智能垃圾分类桶实战:从硬件拼接到AI识别全流程解析

在嵌入式AI与物联网不断融合的背景下,利用Python与树莓派构建智能交互系统已成为开发者实践的热门方向。GPIO引脚精准控制舵机、超声波等传感器,结合TFLite与OpenCV实现本地图像识别,让“感知-决策-执行”链路完整落地。此类设计不仅适用于智能垃圾分类桶,还能迁移到智能家居、无人售货等场景。本文围绕树莓派智能垃圾分类桶的真实项目,拆解硬件架构、模型推理、状态机设计、开机自启等关键环节,展示如何将离散技术组合成可靠的产品级方案。

weixin_29166013的博客 297

肆十二大作业系列清单

文章目录第1期:花卉识别第2期:果蔬识别第3期:分类任务通用数据集训练方式第4期:垃圾分类第5期:口罩检测第6期:人脸识别第7期:皮肤病分割第8期:火灾检测第9期:手势识别第10期:Pytorch花卉识别第11期:绝缘子缺陷检测第12期:交通标志检测第13期:麦穗计数第14期:眼底血管分割第15期:舌象分割第16期:海上...

weixin_36472567的博客 2823

从高分大作业到开源项目:YOLOv8果蔬识别系统全流程实战解析

目标检测是计算机视觉的核心任务之一,其原理是通过算法定位并识别图像中的物体。YOLO系列模型因其在速度与精度间的出色平衡,成为工业界和学术界的首选框架。掌握YOLOv8的完整应用链路,对于构建可落地的视觉系统具有重要价值,广泛应用于安防监控、自动驾驶、工业质检及智慧农业等领域。本文以果蔬识别这一经典场景为例,深入剖析从数据工程、模型训练调优到工程化部署的全过程。项目不仅提供了模块化的代码结构、详细的配置说明和可复现的环境依赖,还针对训练中常见的“标签文件找不到”等错误提供了解决方案,并探讨了在资源受限的嵌入

weixin_34163553的博客 519

PyTorch CPU-only训练CIFAR100全栈优化实战

深度学习模型部署不仅依赖GPU加速,更需扎实的CPU端到端工程能力。本文围绕图像分类基础任务CIFAR100,系统阐释在纯CPU资源约束下的建模原理:从硬件层缓存特性与内存带宽限制,到框架层PyTorch的GIL规避与OpenMP/BLAS后端适配,再到算法层轻量化设计(深度可分离卷积、通道剪枝)与训练策略(梯度累积、内存映射加载)。技术价值在于突破‘有GPU才可训AI’的认知惯性,构建资源感知型AI工程范式。典型应用场景包括边缘设备部署、老旧服务器迁移、教学实训及低算力环境模型验证——尤其适用于PyTor

weixin_34121282的博客 362

人工智能大作业清单

Hello,各位小伙伴,大家好,由于之前的博客都是断断续续的发布,导致有些小伙伴看到之后不知道去哪里找下一期以及去哪里下载项目中对应的资源,这里我将所有的大作业都整理了处理,每个项目都提供了项目的效果图、博客地址、视频地址以及资源地址,方便大家进行索引。我们设置这个专栏的目的主要是为了帮助大家掌握常用的计算机视觉的算法,以实际操作为导向,学习知识的同时帮助大家完成对应的大作业,本栏目涵盖了计算机视觉中常见的四个任务,即分类、分割、检测和实例分割。

2401_84067250的博客 2844

Atlas200DK端侧人脸识别门禁全栈部署指南

嵌入式AI系统指在资源受限的硬件上直接运行人工智能模型并完成闭环控制的技术范式。其核心原理是通过模型轻量化、硬件加速推理与底层驱动协同,突破CPU算力与内存带宽瓶颈,实现低延迟、离线化、高鲁棒性的实时响应。技术价值在于摆脱云端依赖,满足安防、工业等场景对隐私性、可靠性和确定性时延的刚性需求。典型应用场景包括智能门禁、边缘巡检、车载识别等。本文聚焦昇腾生态下的Atlas200DK平台,深度解析人脸识别在真实门禁场景中的端到端落地——涵盖MindSpore模型训练、ATC模型编译、DVPP硬件预处理、ACL推理

congjukun0600的博客 401

基于TensorFlow与CNN的猫狗图像分类实战:从环境搭建到模型部署

卷积神经网络(CNN)作为计算机视觉领域的核心技术,通过卷积、池化等操作自动提取图像特征,是实现图像分类、目标检测等任务的基础。其核心原理在于利用局部连接和权值共享高效处理网格状数据,在图像识别中展现出强大性能。在工程实践中,结合TensorFlow等深度学习框架,开发者能够快速构建和训练CNN模型,大幅降低实现门槛。本文聚焦于猫狗图像分类这一经典应用场景,详细解析从数据准备、模型构建、训练调优到评估部署的完整流程,并深入探讨了数据增强、迁移学习等关键调优策略,为毕业设计、课程作业及AI入门提供了一套可复用

weixin_30613433的博客 301

手把手教你:图像识别的垃圾分类系统

本文主要介绍如何使用python搭建:一个基于深度残差网络(ResNet)的图像识别垃圾分类系统。 博主也参考过网上其他博主介绍:ResNet或图像分类的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个分类或预测系统即可。 本文只会告诉你如何快速搭建一个基于ResNet的图像分类系统并运行,原理的东西可以参考其他博主。 也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。

大雾的小屋的博客 4万+

垃圾分类数据集和tf代码-8w张图片245个类.zip

垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测试时识别准确率为百分百。垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测试时识别准确率为百分百。垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测试时识别准确率为百分百。垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测试时识别准确率为百分百。垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测试时识别准确率为百分百。垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测试时识别准确率为百分百。垃圾分类数据集及代码,智能垃圾分类赛道。使用PyQt5进行界面设计,做了数据集并进行测试,使用神经网络进行图像识别处理。测

如何在pycharm中使用tensorflow

需求: 需要在pycharm中跑一个深度学习的项目 但是tensorflow包导不入 问题分析: 当前使用的是anaconda的3.8版本,无法正常下载tensorflow包,需要构建虚拟环境使用3.7及以下的解释器才可以 利用anaconda虚拟环境 首先打开anaconda prompt:创建一个新的3.7的虚拟环境: //镜像只用国内的 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/fr

小楼一夜听春雨 1万+

rv1106 模型部署

ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式,支持多种深度学习框架,包括 TensorFlow、PyTorch、Caffe 等。将模型转换为 ONNX 格式后,可以更容易地在不同的深度学习框架中进行部署和推理,而无需重新训练模型。

weixin_50993868的博客 1287
上一篇: 垃圾分类数据集-8w张图片245个类附赠tensorflow代码
下一篇: dejahu深度学习笔记00-深度学习基础
肆十二
肆十二 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论 52
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆十二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值