智慧工地AI算法开发与搭配AI盒子 二维码
发表时间:2025-02-20 14:44 工地算法应用场景较复杂一些,不同的工地场景也不一样,包括常见的安全帽识别,人形检测,火焰检测,目标跟踪,安全视觉分析,人员滞留检测,摔倒识别,工作服反光识别等等不下几十种识别场景。
算法可以搭配定昌的AI边缘计算盒子来使用,RK3588的6TOPS 大算力可以满足智能工地,工业生产等AI算法的开发与应用落地。 这里定昌小编以经典的安全帽AI识别为例简单介绍下。 一、安全帽识别是目标检测算法,需要经过安全帽图片数据集采集,训练数据,识别目标等步骤。 如:先在电脑上建立E:\AI数据集\ztl_safe_hat_dataset_2024.11.8-1636\文件夹:这个文件夹中创建images 文件夹,用于放所有待标注的图片,labels文件夹,用于labelimg工具标注后,存放标签文件。本例子中,E:\AI数据集\ztl_safe_hat_dataset_2024.11.8-1636\images文件夹,存放了3769张数据集图片。
说明备注下: 1、收集数据,数据集图片应该包含人戴安全帽(%60)、人不戴安全帽(40%)、多场景、多角度、多类型安全帽、远近不一、画面清晰和几乎无遮挡等特点。 2、数据集应做的多样化,以便训练出来的模型有较好的泛化能力。 3、数据集内的图片应该清晰、画面少遮挡和少模糊不清的目标等特征,这样做出来的数据集,训练时提取的特征就更清晰,否则会有很多误识别。 4、但目标的数据集图片一般在1万张左右,anchor框在5万个左右,这样是最理想的数据集。过多过少都可能不是那么完美,当然几千张图片也可能训出在特定环境下,表现还不错的模型。 5、有些数据集可能对模型效果有正向作用,有些数据集可能是负向作用,对于AI模型来说,正向和负向作用都有它的用途。数据集不是越多越好,也不是越杂越好,数据在精,不在多。 6、数据集的制作和训练的方法等都决定了AI模型的效果,这里需要做大量的实验,总结经验,才能做出符合场景需求的AI模型。 打开labelimg,选择“打开目录”->选择文件夹“E:\AI数据集\ztl_safe_hat_dataset_2024.11.8-1636\images”,确定。
在选择标签存放的路径,选择文件夹“E:\AI数据集\ztl_safe_hat_dataset_2024.11.8-1636\labels”,确定。
此时,labelimg标注环境就构建好了,就可以开始标注了。标注数据后,可以看到labelimg的标签和坐标自动保存到labels目录下。
二、安全帽数据集切分方法 将数据集按80%是train训练集,20%是val验证集来划分,这个比例训练出来的模型效果是比较理想的。
划分train训练集和val验证集时,要注意images和labels要一一对应。手动划分比较麻烦,而且得注意images和labels要严格对应,容易出错,效率低,以下是我写的自动划分数据集的代码和说明。 (ultralytics_yolov8) root@dev:/jwq/script# catrun_split_train_val.py import os import random import shutil # 设置文件夹路径 base_dir = '/jwq/test/ztl_safe_hat_dataset_2024.11.8-1636' images_dir = os.path.join(base_dir,'images') labels_dir = os.path.join(base_dir,'labels') train_dir = os.path.join(base_dir, 'train') val_dir = os.path.join(base_dir, 'val') # 确保目标文件夹存在 os.makedirs(os.path.join(train_dir, 'images'),exist_ok=True) os.makedirs(os.path.join(train_dir,'labels'), exist_ok=True) os.makedirs(os.path.join(val_dir,'images'), exist_ok=True) os.makedirs(os.path.join(val_dir,'labels'), exist_ok=True) # 支持的图片格式 image_extensions = ('.jpg', '.jpeg', '.png','.bmp', '.tiff') # 获取所有图片文件名 image_files = [f for f inos.listdir(images_dir) if f.lower().endswith(image_extensions)] # 清除没有对应标签文件的图片 image_files_with_labels = [f for f inimage_files if os.path.isfile(os.path.join(labels_dir, f.rsplit('.', 1)[0] +'.txt'))] # 打印清理前后的图片数量 print(f"Total images before cleaning:{len(image_files)}") print(f"Total images after cleaning:{len(image_files_with_labels)}") # 随机打乱列表 random.shuffle(image_files_with_labels) # 计算分割点 split_index =int(len(image_files_with_labels) * 0.8) # 分割成训练集和验证集 train_images =image_files_with_labels[:split_index] val_images =image_files_with_labels[split_index:] # 复制图片和标签到相应的文件夹 def copy_files(file_list, target_image_dir,target_label_dir): for file_name in file_list: # 复制图片 shutil.copy2(os.path.join(images_dir,file_name), os.path.join(target_image_dir, file_name)) # 复制标签 label_file = file_name.rsplit('.', 1)[0] +'.txt' shutil.copy2(os.path.join(labels_dir,label_file), os.path.join(target_label_dir, label_file)) # 复制训练集 copy_files(train_images,os.path.join(train_dir, 'images'), os.path.join(train_dir, 'labels')) # 复制验证集 copy_files(val_images,os.path.join(val_dir, 'images'), os.path.join(val_dir, 'labels')) # 打印分割后的集合大小 print(f"Training set size:{len(train_images)}") print(f"Validation set size:{len(val_images)}") 三、安全帽识别训练和模型效果评估方法,请按本文的YoloV8训练章节训练。
说明: 1、本次训练1000张数据集,200个epochs训练2h结束。80%是train训练集,20%是val验证集。 2、从训练结果看,head的mAP50为0.989,safe_hat的为0.99,all为0.99。说明训练效果较好,但是存在过拟合的风险。此时应该增加不同场景的类似数据,这样可以有效的降低过拟合。 3、Head的mAP50比safe_hat的低,可能的因素是head的数据量比safe_hat少,应稍微多补充head的数据,否则可能会存在safe_hat误识别成head。
说明: 1、从推理结果看,在如此清晰的画面中,YoloV8M的模型,safe_hat的置信度只有0.88左右,说明数据量还不够。这个置信度应该在0.95左右才是比较理想的。 有一个手部的特征识别成safe_hat 0.33的置信度,这可能的原因: 1、标注的数据有一些是模糊不清的小目标,脏数据,导致识别时,这种类似的模糊不清的数据也识别成目标。可见,数据在精,不在多。 2、负样本不够,导致模型无法抑制这些本应该是背景的特征。所以,需要不同场景的数据集,这样才能抑制足够的背景特征。 3、0.33的置信度,说明,这个数据集还有得救,只要按1/2点来改进,完全可以抑制掉这个置信度的目标。 4、当然,这个0.33的目标可以通过AI应用层调置信度,但是,作为模型本身来说,从模型本身入手,可以给后续AI应用留更多的改进空间。
说明: 1、本次训练3760张左右数据集,179个epochs训练2h结束。80%是train训练集,20%是val验证集。 2、可以看到上一次1000张数据集要200个epochs才训练结束,而3760张数据集要179个epochs就训练完了,也就是模型已经拟合了。更精准的数据,模型更快的提取到每个目标所需的共同特征,所以模型就很快的拟合了。
说明: 1、从最新的推理结果来看,之前存在的0.33误识别目标已经消失,这表明上一次所采取的改进措施确实有效。 2、为了提升目标检测类AI算法的准确性,可以采用几种有效的策略,包括使用更加精确的数据集、引入多样化的应用场景数据以及利用负样本来增强模型的学习能力。这些方法共同作用有助于提高算法精度的表现。 如有疑问,欢迎致电或加我们客服进一步了解,竭诚为你服务。 声明:此文为广州定昌电子小编辛苦码字原创编辑,部分素材来源于自家工厂及合作客户,网络分享,如有权利声明或内容有误,欢迎联系小编处理或更正(邮箱:91hui@163.com),欢迎你转载,务必请标明出处链接:https://www.gzdcsmt.com/sys-nd/2812.html
|
你的姓名 * 你的联系方式 * 你的公司名称 补充说明 提交 |