尝试全流程用paddlepaddle做完一个项目,项目基于paddledetection套件,主要应用于装配式工厂以及工地的安全管理及使用摄像头推流的模式进行是否佩戴安全帽的识别,抽烟,识别。
选择飞浆主要是因为飞浆可以白嫖算力,初步选择的是yolov8的模型,考虑到后期的优化加速v5可能会比较好用v5也会训练一个。
首先是数据的处理,安全帽的数据主要来自于GitHub和飞浆的公开数据集这个还是不错的,这种常规的数据集相对比较多也很全,最主要下载速度很快。后期会把整理好的数据集也公开在飞浆的数据大厅。
数据集链接:
数据及整理:
其中annitation里面一共有25951个文件 ,jpegimages里面有26234个文件,因为是把搜集到的数据粗略的放到一起,造成了数据和标注匹配不上。顺便从网上找个脚本(00.py)查看一下标注情况。
import os
import xml.dom.minidom
xml_path = '.\Annotations\\'
files = os.listdir(xml_path)
gt_dict = {}
if __name__ == '__main__':
for xm in files:
xmlfile = xml_path + xm
dom = xml.dom.minidom.parse(xmlfile) # 读取xml文档
root = dom.documentElement # 得到文档元素对象
filenamelist = root.getElementsByTagName("filename")
filename = filenamelist[0].childNodes[0].data
objectlist = root.getElementsByTagName("object")
##
for objects in objectlist:
namelist = objects.getElementsByTagName("name")
objectname = namelist[0].childNodes[0].data
if objectname == '-':
print(filename)
if objectname in gt_dict:
gt_dict[objectname] += 1
else:
gt_dict[objectname] = 1
# for nl in namelist:
# objectname = nl.childNodes[0].data
# if objectname in gt_dict:
# gt_dict[objectname] += 1
# else:
# gt_dict[objectname] = 1
dic = sorted(gt_dict.items(), key=lambda d: d[1], reverse=True)
print(dic)
print("总类别",len(dic))
输出结果不出所料同一种类比标注不统一:
[('person', 115976), ('hat', 21791), ('helmet', 18966), ("['Wear_helmet']", 13095), ('P', 8163), ('head', 5785), ('PH', 5174), ('PHV', 3735), ("['No_helmet']", 3173), ('PLC', 2403), ('PV', 2304), ('dog', 3), ('cavity', 1)]
总类别 13
首先就是统一标签格式主要分为这三类person、helmet、head
这时候就出现一个问题 一些数据集只有 安全帽是否佩戴 没有人体 比如这种: