yolo3使用文档

    技术2022-07-17  73

    yolo3使用文档

    前言:本文主要详细介绍如果从数据集开始到训练好自己的yolo3模型,再到使用上自己训练好的yolo3模型。本文以识别检测出光大银行logo和上海银行logo为例进行过程讲解。

    文章目录

    yolo3使用文档数据准备克隆代码环境搭建准备数据 从头训练使用模型

    数据准备

    克隆代码

    git clone http://192.168.1.15:81/intelligent/logo-detection.git

    环境搭建

    本文默认你的电脑是ubuntu18,并且安装好了docker的19版本,并且已经安装好了nvidia-docker

    如何安装docker和如何安装nvidia-docker参见超链接,启动环境详见以下代码

    # 切换到该项目文件夹下面 cd logo-detection/logo_recognition # 拉取并打开一个tensorflow容器 docker run -it --gpus all -v $PWD/logo_yolo:/tmp -w /tmp tensorflow/tensorflow:1.12.0-gpu-py3 /bin/bash

    准备数据

    第一、将自己收集到的182张带有光大银行logo的图片和172张带有上海银行logo的图片,放在项目文件夹~/logo_recognition/logodata/JPEGImages下面。

    第二、运行脚本logodata0.py对所有图片进行重命名。

    第三、启动labelImg,然后对图片进行标注,然后将标注好的xml保存在~/logo_recognition/logodata/Annotations文件夹下面。ubuntu中labelImg的安装过程参见:Ubuntu 18.04 Linux安装labelImg的教程

    第四、运行脚本logodata1.py对图片数据进行训练/验证/测试的划分。

    第五、修改classes = ["guangda", "shanghai"] # 修改这个类别变成自己对应的类别需求,运行脚本代码logodata2.py,从标注数据集中提出物体类别和边框信息。logodata2.py代码如下

    import xml.etree.ElementTree as ET from os import getcwd sets = [('2007', 'train'), ('2007', 'val'), ('2007', 'test')] classes = ["guangda", "shanghai"] # 修改这个类别 def convert_annotation(year, image_id, list_file): # in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml' % (year, image_id)) in_file = open('logodata/Annotations/%s.xml' % (image_id)) tree = ET.parse(in_file) root = tree.getroot() for obj in root.iter('object'): difficult = obj.find('difficult').text cls = obj.find('name').text if cls not in classes or int(difficult) == 1: continue cls_id = classes.index(cls) xmlbox = obj.find('bndbox') b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text)) list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id)) wd = getcwd() for year, image_set in sets: image_ids = open('logodata/ImageSets/Main/%s.txt' % (image_set)).read().strip().split() list_file = open('%s.txt' % (image_set), 'w') for image_id in image_ids: list_file.write('%s/logodata/JPEGImages/%s.jpg' % (wd, image_id)) convert_annotation(year, image_id, list_file) list_file.write('\n') list_file.close()

    从头训练

    运行下面命令语句,可以开始训练,训练从头开始,不加载预训练模型。loss值会不断减少,我这里采用自动梯度下降更新梯度,当梯度无法更新的时候,结束训练。训练完成之后,模型保存在log/000文件夹下面

    python train.py

    使用模型

    第一、修改文件val_config.py,修改为自己的位置

    # 预测配置 model_path = 'model_data/yolo.h5' # 模型路径 score = 0.3 # 置信度,除非你知道自己在干嘛,否则别改这个数值 val_dir = '/home/huangjx/Projects/kera_ting_yolo3/test' # 验证图片数据集 out_val_dir = '/home/huangjx/Projects/kera_ting_yolo3/out' # 验证图片保存数据集

    第二、运行检测文件

    python yolo_video.py
    Processed: 0.012, SQL: 9