前言:本文主要详细介绍如果从数据集开始到训练好自己的yolo3模型,再到使用上自己训练好的yolo3模型。本文以识别检测出光大银行logo和上海银行logo为例进行过程讲解。
本文默认你的电脑是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