yolo3使用文档

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

你可能感兴趣的:(计算机视觉)