使用PaddleDetecion训练模型 监测电子设备是否在运行

该文介绍了如何使用百度的PaddleDetection框架,特别是YOLOv3模型,来检测设备的运行状态。作者详细阐述了从环境部署、数据集准备(包括数据采集、标注和整理)、模型训练到模型上线的整个过程,最后提到模型上线后能每分钟监控设备状态并及时通知相关人员。
摘要由CSDN通过智能技术生成

PaddleDetection是百度公司推出的物体检测框架。

我主要使用的是YOLOv3模型去检测物体的运行状态。判断依据是:设备处在运行状态,屏幕则一直保持亮屏状态,如果停止运行,则设备会停止处在息屏状态。

环境部署

1.硬件环境

  • 笔记本电脑
  • 网络摄像头-罗技c922高清1080p摄像头

2.软件环境

  • python3.7
  • PaddlePaddle
  • PaddleDetection

数据集准备

1.采集数据

将一堆设备都放在相机可以拍照的地方,放置一些正在运行的设备和一些不运行的设备。

控制相机拍照,采集到一定规模的数据集。(设备放置的背景需要注意,如果需要分开多地部署这个监测工具,需要确保设备放置的背景是类似的,如果背景有变动,则会影响到最终的识别结局,当然也是由于我采集的数据集的量级较少,只有不到1千张图片),采集到的数据集如下图所示:

 2. 数据标注

数据标注使用的开源工具:labelImg.exe

每张图片里的每个设备标注清楚运行状态,然后保存成一个xml文件。

3. 数据整理

PaddleDetection/dataset文件夹里面创建新的文件夹存放数据。

dataset

        Annotations    #存放xml文件

        ImageSets     

                Main

                        label_list.txt

                        train.txt

                        val.txt

        JPEGImages     #存放png\bmp等图片

        label_list.txt     存放label清单

        train.txt

        val.txt

train.txt生成方式

train_precent = 0.8
xml = r'D:\work\PaddleDetection\dataset\detection\Annotations'
save = r'D:\work\PaddleDetection\dataset\detection\JPEGImages'
total_xml = os.listdir(xml)

len_length = len(total_xml)
num = list(range(len(total_xml)))
tr = int(len_length * train_precent)
train = sample(num, tr)

ftrain = open('train.txt', 'w')
ftest = open('test.txt', 'w')

for i in num:
    name = total_xml[i][:-4]+'\n'
    if i in train:
        ftrain.write(name)
    else:
        ftest.write(name)

ftest.close()
ftrain.close()

最终需要的train.txt和val.txt生成方式

devkit_dir = './'

def get_dir(devkit_dir, type):
    return osp.join(devkit_dir, type)

def walk_dir(devkit_dir):
    filelist_dir = get_dir(devkit_dir, 'ImageSets/Main')
    annotation_dir = get_dir(devkit_dir, 'Annotations')
    img_dir = get_dir(devkit_dir, 'JPEGImages')
    trainval_list = []
    test_list = []
    added = set()
    for _, _, files in os.walk(filelist_dir):
        for fname in files:
            img_ann_list = []
            if re.match(r'train\.txt', fname):
                img_ann_list = trainval_list
            elif re.match('val\.txt', fname):
                img_ann_list = test_list
            else:
                continue

            fpath = osp.join(filelist_dir, fname)
            for line in open(fpath):
                name_prefix = line.strip().split()[0]
                if name_prefix in added:
                    continue
                ann_path = osp.join(annotation_dir, name_prefix + '.xml')
                img_path = osp.join(img_dir, name_prefix + '.bmp')
                assert os.path.isfile(ann_path), 'file %s not found.' % ann_path
                assert os.path.isfile(img_path), 'file %s not found.' % img_path
                img_ann_list.append((img_path, ann_path))

    return trainval_list, test_list



def prepare_filelist(devkit_dir, output_dir):
    trainval_list = []
    test_list = []
    trainval, test = walk_dir(devkit_dir)

    trainval_list.extend(trainval)
    test_list.extend(test)

    random.shuffle(trainval_list)
    with open(osp.join(output_dir, 'train.txt'), 'w') as ftrainval:
        for item in trainval_list:
            ftrainval.write(item[0] + ' ' + item[1] + '\n')

    with open(osp.join(output_dir, 'val.txt'), 'w') as ftest:
        for item in test_list:
            ftest.write(item[0] + ' ' + item[1] + '\n')


if __name__ == '__main__':
    prepare_filelist(devkit_dir, '.')

4. 选择模型,进行训练    

我是选用的yolov3模型, 修改yolov3_mobilenet_v3_large_270e_voc.yml  配置文档。目前paddledection配置已经确定好,只要训练人修改几处地方即可开始训练。

    

 要修改的主要地方主要包括:

datasets/voc.yml    如图所示为主要的修改点

5.训练

训练命令:python -u tools/train.py -c configs/yolov3/yolov3_mobilenet_v3_large_270e_voc.yml -o use_gpu=false --use_vdl=true --vdl_log_dir=vdl_dir/scalar --eval

评估命令:python deploy/python/infer.py --model_dir=inference_model/yolov3_mobilenet_v3_large_270e_voc --use_gpu=False --image_file=D:\work\PaddleDetection\output\闹钟28.bmp

导出模型命令:python -u tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v3_large_270e_voc.yml --output_dir=./inference_model -o weights=output/weights/model_final.pdparams -o use_gpu=false

6.模型上线

工具界面是用pyqt写的界面。

功能主要是每分钟拍一张图,监测相机下的设备是否在运行,如果不运行,通过飞书机器人通知相应的人员。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值