生活垃圾数据集(YOLO版)
生活垃圾分类:电池属于有害垃圾,专门收集。 #生活技巧# #节省生活成本# #生活垃圾分类指南# #食物浪费防治#
文章目录 1、数据集介绍1.1、数据集图片组成2.1、获取数据集方式 2、扩展代码2.1、文件结构树2.2、划分数据集2.3、获取数据集文件名字2.4、文件成功对应检测 3、其他文章1、数据集介绍
1.1、数据集图片组成
【有害垃圾】:电池(1 号、2 号、5 号)、过期药品或内包装等;【可回收垃圾】:易拉罐、小号矿泉水瓶;【厨余垃圾】:小土豆、切过的白萝卜、胡萝卜,尺寸为电池大小;【其他垃圾】:瓷片、鹅卵石(小土豆大小)、砖块等。部分类别图片展示:
文件结构:
----ImageSet\ |----classes.txt # 标签种类 |----data-txt\ # 数据集文件集合 | |----test.txt | |----train.txt | |----val.txt |----images\ # 数据集图片 | |----test\ | | |----fimg_23.jpg | | |----fimg_38.jpg | | |----..... | |----train\ | | |----fimg_1.jpg | | |----fimg_2.jpg | | |----..... | |----val\ | | |----fimg_4.jpg | | |----fimg_6.jpg | | |----..... |----labels\ # yolo标签 | |----test\ | | |----fimg_23.txt | | |----fimg_38.txt | | |----..... | |----train\ | | |----fimg_1.txt | | |----fimg_2.txt | | |----..... | |----val\ | | |----fimg_4.txt | | |----fimg_6.txt | | |----.....
12345678910111213141516171819202122232425262728293031322.1、获取数据集方式
点击这里:下载本文生活垃圾数据集
2、扩展代码
2.1、文件结构树
draw-tree.py
from pathlib import Path import os tree_str = '' def generate_tree(pathname, n=0): global tree_str if pathname.is_file(): tree_str += ' |' * n + '-' * 4 + pathname.name + '\n' elif pathname.is_dir(): tree_str += ' |' * n + '-' * 4 + \ str(pathname.relative_to(pathname.parent)) + '\\' + '\n' for cp in pathname.iterdir(): generate_tree(cp, n + 1) if __name__ == '__main__': path=os.getcwd()+'/ImageSet' # 查看当前ImageSet目录下的文件树 generate_tree(Path(path), 0) print(tree_str)
12345678910111213141516171819'2.2、划分数据集
split-data.py
import os, shutil, random from tqdm import tqdm """ 标注文件是yolo格式(txt文件) 训练集:验证集:测试集 (7:2:1) """ def split_img(current_path,img_path, label_path, split_list): try: Data = current_path+'/ImageSets' # Data是你要将要创建的文件夹路径(路径一定是相对于你当前的这个脚本而言的) # os.mkdir(Data) train_img_dir = Data + '/images/train' val_img_dir = Data + '/images/val' test_img_dir = Data + '/images/test' train_label_dir = Data + '/labels/train' val_label_dir = Data + '/labels/val' test_label_dir = Data + '/labels/test' # 创建文件夹 os.makedirs(train_img_dir) os.makedirs(train_label_dir) os.makedirs(val_img_dir) os.makedirs(val_label_dir) os.makedirs(test_img_dir) os.makedirs(test_label_dir) except: print('文件目录已存在') train, val, test = split_list all_img = os.listdir(img_path) all_img_path = [os.path.join(img_path, img) for img in all_img] train_img = random.sample(all_img_path, int(train * len(all_img_path))) train_img_copy = [os.path.join(train_img_dir, img.split('\\')[-1]) for img in train_img] train_label = [toLabelPath(img, label_path) for img in train_img] train_label_copy = [os.path.join(train_label_dir, label.split('\\')[-1]) for label in train_label] for i in tqdm(range(len(train_img)), desc='train ', ncols=80, unit='img'): _copy(train_img[i], train_img_dir) _copy(train_label[i], train_label_dir) all_img_path.remove(train_img[i]) val_img = random.sample(all_img_path, int(val / (val + test) * len(all_img_path))) val_label = [toLabelPath(img, label_path) for img in val_img] for i in tqdm(range(len(val_img)), desc='val ', ncols=80, unit='img'): _copy(val_img[i], val_img_dir) _copy(val_label[i], val_label_dir) all_img_path.remove(val_img[i]) test_img = all_img_path test_label = [toLabelPath(img, label_path) for img in test_img] for i in tqdm(range(len(test_img)), desc='test ', ncols=80, unit='img'): _copy(test_img[i], test_img_dir) _copy(test_label[i], test_label_dir) def _copy(from_path, to_path): shutil.copy(from_path, to_path) def toLabelPath(img_path, label_path): img = img_path.split('\\')[-1] label = img.split('.jpg')[0] + '.txt' return os.path.join(label_path, label) if __name__ == '__main__': current_path=os.current_path() img_path = current_path+'/images' # 你的图片存放的路径(路径一定是相对于你当前的这个脚本文件而言的) label_path = current_path+'/labels' # 你的txt文件存放的路径(路径一定是相对于你当前的这个脚本文件而言的) split_list = [0.7, 0.2, 0.1] # 数据集划分比例[train:val:test] split_img(current_path,img_path, label_path, split_list)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172732.3、获取数据集文件名字
list_name.py
import os """ 整体目录 ----ImageSets\ |----images\ | |----test\ | |----train\ | |----val\ |----labels\ | |----test\ | |----train\ | |----val\ """ def generate(current_path): # 存放图片的路径 这里images下面分别有train,test和val文件夹 for item in os.listdir(current_path): files_path=current_path+'/'+item files = os.listdir(files_path) # 全部的图片名称 files.sort() print '****************' print 'input :', item print 'start...' # 打开train.txt item_txt='ImageSets/data-txt/'+item+'.txt' listText = open(item_txt, 'a') for file in files: # 具体图片存放路径,如 data/images/train/1.jpg name = 'data/images/'+item+'/'+file + '\n' listText.write(name) listText.close() print 'down!' print '****************' if __name__ == '__main__': current_path=os.getcwd()+'/ImageSets/images' # # 查看当前ImageSet\images目录下各个文件的名字 generate(current_path)
123456789101112131415161718192021222324252627282930313233343536373839404142432.4、文件成功对应检测
del-error-files.py用于获取数据集文件后,检测images文件和labels文件是否都一一对应上。
创建.py文件放在mages文件和labels同目录下运行
import os currentPath=os.getcwd() currentPath=currentPath print(currentPath) labelArray=[] imagesArray=[] def split_extension(fileName): return fileName.split('.')[0] print('自检程序启动!查找到labels目录下异常文件:') error_label_names = [] for la_name in os.listdir('labels'): la_name = split_extension(la_name) is_exists = False for im_name in os.listdir('images'): im_name = split_extension(im_name) if la_name == im_name: is_exists = True if not is_exists: error_la_name = la_name + '.txt' error_label_names.append(error_la_name) labelArray.append(error_la_name) print(error_la_name) print('自检程序启动!查找到images目录下异常文件:') error_image_names = [] for im_name in os.listdir('images'): im_name = split_extension(im_name) is_exists = False for la_name in os.listdir('labels'): la_name = split_extension(la_name) if la_name == im_name: is_exists = True if not is_exists: error_im_name = im_name + '.jpg' error_image_names.append(error_im_name) print(error_im_name) imagesArray.append(error_im_name) # 自动删除文件 def delLabels(): for item in labelArray: labelPath=currentPath+'/labels/'+item os.remove(labelPath) print(labelPath+'\t'+'删除成功') def delImages(): for item in imagesArray: imagesPath=currentPath+'/images/'+item os.remove(imagesPath) print(imagesPath+'\t'+'删除成功') if __name__ == '__main__': delLabels() delImages()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657583、其他文章
双向控制舵机(树莓派版)YOLOv5s网络模型讲解(一看就会)参考文献
【yolo训练数据集】标注好的垃圾分类数据集共享
基于YOLOv8分割模型实现垃圾识别
TACO垃圾图像数据集
网址:生活垃圾数据集(YOLO版) https://www.yuejiaxmz.com/news/view/294994
相关内容
基于深度学习的生活垃圾检测与分类系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)智能生活垃圾检测与分类系统(UI界面+YOLOv5+训练数据集)
基于GIS遥感数据分析的生活垃圾空间分布模型
依托“垃圾”大数据,城市生活垃圾管理亟须步入新赛道 – 绿色和平
垃圾桶也有芯片?鄞州生活垃圾智慧化收运迎来3.0版时代!
生活垃圾收集运输节能规范
垃圾清理app合集大全
生活垃圾
速清手机垃圾 v1.5.4 安卓版
环境部发布《生活垃圾焚烧发电厂自动监测数据应用管理规定》