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