开发板咨询电话热线:13378450634
X86,PCBA咨询电话:18620626517

智慧工地AI算法开发与搭配AI盒子

 二维码
发表时间:2025-02-20 14:44作者:广州定昌电子gzdcsmt.com

工地算法应用场景较复杂一些,不同的工地场景也不一样,包括常见的安全帽识别,人形检测,火焰检测,目标跟踪,安全视觉分析,人员滞留检测,摔倒识别,工作服反光识别等等不下几十种识别场景。


工地上的安全帽识别.jpg

算法可以搭配定昌的AI边缘计算盒子来使用,RK3588的6TOPS 大算力可以满足智能工地,工业生产等AI算法的开发与应用落地。


RK3588边缘计算盒子-6TOPS-AI算力.jpg

这里定昌小编以经典的安全帽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张数据集图片。


安全帽数据集.jpg


说明备注下:


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”,确定。


选择数据集IMAGE文件夹.jpg


在选择标签存放的路径,选择文件夹“E:\AI数据集\ztl_safe_hat_dataset_2024.11.8-1636\labels”,确定。


选择标签存放的路径.jpg


此时,labelimg标注环境就构建好了,就可以开始标注了。标注数据后,可以看到labelimg的标签和坐标自动保存到labels目录下。


labelimg标注环境就构建好了.jpg



二、安全帽数据集切分方法


将数据集按80%是train训练集,20%是val验证集来划分,这个比例训练出来的模型效果是比较理想的。


按80%是train训练集,20%是val验证集来划分.jpg


划分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训练章节训练。


YoloV8训练1.jpg


说明:

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。


YoloV8M的模型,safe_hat的置信度.jpg


说明:

1、从推理结果看,在如此清晰的画面中,YoloV8M的模型,safe_hat的置信度只有0.88左右,说明数据量还不够。这个置信度应该在0.95左右才是比较理想的。

有一个手部的特征识别成safe_hat 0.33的置信度,这可能的原因:

1、标注的数据有一些是模糊不清的小目标,脏数据,导致识别时,这种类似的模糊不清的数据也识别成目标。可见,数据在精,不在多。

2、负样本不够,导致模型无法抑制这些本应该是背景的特征。所以,需要不同场景的数据集,这样才能抑制足够的背景特征。

3、0.33的置信度,说明,这个数据集还有得救,只要按1/2点来改进,完全可以抑制掉这个置信度的目标。

4、当然,这个0.33的目标可以通过AI应用层调置信度,但是,作为模型本身来说,从模型本身入手,可以给后续AI应用留更多的改进空间。


本次训练3760张左右数据集,179个epochs训练2h结束.jpg



说明:

1、本次训练3760张左右数据集,179个epochs训练2h结束。80%是train训练集,20%是val验证集。

2、可以看到上一次1000张数据集要200个epochs才训练结束,而3760张数据集要179个epochs就训练完了,也就是模型已经拟合了。更精准的数据,模型更快的提取到每个目标所需的共同特征,所以模型就很快的拟合了。


存在的0.33误识别目标已经消失.jpg


说明:

1、从最新的推理结果来看,之前存在的0.33误识别目标已经消失,这表明上一次所采取的改进措施确实有效。

2、为了提升目标检测类AI算法的准确性,可以采用几种有效的策略,包括使用更加精确的数据集、引入多样化的应用场景数据以及利用负样本来增强模型的学习能力。这些方法共同作用有助于提高算法精度的表现。





如有疑问,欢迎致电或加我们客服进一步了解,竭诚为你服务。




欢迎您申请主板样品

欢迎您申请主板样品

副标题

你的姓名
*
你的联系方式
*
你的公司名称
补充说明
提交
如你有任何需求或对此款产品感兴趣,或者询工厂价,都可以给我们留言,24小时内会有专业工程师回复你,竭诚为你服务。
姓名
*
手机或微信号
*
欢迎给我们留言
提交留言
开发板咨询电话: 13378450634(刘经理)|  X86主板,SMT,PCBA加工咨询电话:18620626517(朱经理)
©2025 广州市定昌电子科技有限公司 版权所有
抖音视频账号
安卓主板
微信咨询
SMT主板加工
微信咨询
地址:广州市番禺区大龙街新水坑路段49号开达工业园4栋2,3楼
VIP客户一对一对接