手把手教物体检测——yolov3

简介: 手把手教物体检测——yolov3

目录


训练


下载算法


下载.weights结尾的预训练模型,并将weight文件转为h5文件


修改类别。


Labelme标注的数据集转为yolov3训练的数据集。


执行Kmeans.py文件计算anchors。


修改train.py文件。


测试


修改yolo.py


修改yolo_video.py


摘要


YOLOv3是YOLO (You Only Look Once)系列目标检测算法中的第三版,相比之前的算法,尤其是针对小目标,精度有显著提升。在Pascal Titan X上处理608x608图像速度达到20FPS,在 COCO test-dev 上 mAP@0.5 达到 57.9%,与RetinaNet(FocalLoss论文所提出的单阶段网络)的结果相近,并且速度快4倍。


相比YOLOV2,YOLOV3的改进之处主要有两点:


多尺度预测 (类FPN)

更好的基础分类网络(类ResNet)和分类器


关于YOLOV3 的理解可以参照这两篇文章:


1、yolo系列之yolo v3【深度解析】


https://blog.csdn.net/leviopku/article/details/82660381

20200711144647632.jpeg

2、目标检测网络之 YOLOv3


https://www.cnblogs.com/makefile/p/YOLOv3.html

训练

本地环境:TensorFlow 1.15.3

                  Python 3.7

                  Keras 2.1.5

下载算法

yolo v3 的算法版本比较多,我建议大家选用是qqwweee的keras版本,复现比较容易,代码相对来说比较容易理解。

github地址:https://github.com/qqwweee/keras-yolo3

下载.weights结尾的预训练模型,并将weight文件转为h5文件

下载地址:https://pjreddie.com/media/files/yolov3.weights

新建weight文件夹,将下载的模型放进去。然后修改convert.py文件

将config_path、weightsPath和output_path这个三个参数删除。如下图:

tt.png


修改main函数中的路径。

def _main(args):
            config_path = "yolov3.cfg"
            weights_path = "weight/yolov3.weights"
            assert config_path.endswith('.cfg'), '{} is not a .cfg file'.format(
           config_path)
              assert weights_path.endswith(
         '.weights'), '{} is not a .weights file'.format(weights_path)
            output_path = "weight/yolov3.h5"

修改完成后点击运行。

tt.png

修改类别。

yolo默认使用的类别文件是coco_classes.txt,所以我们需要将此文件的类别修改为数据集的类别。本例使用的数据集有两个类别,分别是aircraft和oiltank。

tt.png

Labelme标注的数据集转为yolov3训练的数据集。

增加labelme2txt.py文件

from os import getcwd
import os
import json
import glob
wd = getcwd()
"labelme标注的json 数据集转为keras 版yolov3的训练集"
classes = ["aircraft","oiltank"]
image_ids = glob.glob(r"LabelmeData/*jpg")
print(image_ids)
list_file = open('train.txt', 'w')
def convert_annotation(image_id, list_file):
    jsonfile=open('%s.json' % (image_id))
    in_file = json.load(jsonfile)
    for i in range(0,len(in_file["shapes"])):
        object=in_file["shapes"][i]
        cls=object["label"]
        points=object["points"]
        xmin=int(points[0][0])
        ymin=int(points[0][1])
        xmax=int(points[1][0])
        ymax=int(points[1][1])
        if cls not in classes:
            print("cls not in classes")
            continue
        cls_id = classes.index(cls)
        b = (xmin, ymin, xmax, ymax)
        list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))
    jsonfile.close()
for image_id in image_ids:
    list_file.write('%s.jpg' % (image_id.split('.')[0]))
    convert_annotation(image_id.split('.')[0], list_file)
    list_file.write('\n')
list_file.close()


生成的train.txt内容如下:

tt.png

每张图片是x1,y1,x2,y2 class 组成的字符串。


执行Kmeans.py文件计算anchors。

打开Kmeans.py文件,修改self.filename = "train.txt",然后运行,计算的结果会直接覆盖到yolo_anchors.txt


修改train.py文件。

annotation_path = 'train.txt'
classes_path = 'model_data/coco_classes.txt'
anchors_path = 'model_data/yolo_anchors.txt'
model = create_model(input_shape, anchors, num_classes,
                            freeze_body=2, weights_path='weight/yolov3.h5')
这几个文件的路径按照上面文件的存放位置和名称修改。
注意57行和76行的batch_size按照电脑的配置去修改。

完成上面的步骤就可以开始训练了,点击run,开始训练。

 tt.png

测试

修改yolo.py

mode_path 修改为最终模型的路径:

"model_path": 'logs/000/trained_weights_final.h5',

修改yolo_video.py

删除以下参数

parser.add_argument(
    '--model', type=str,
    help='path to model weight file, default ' + YOLO.get_defaults("model_path")
)
parser.add_argument(
    '--anchors', type=str,
    help='path to anchor definitions, default ' + YOLO.get_defaults("anchors_path")
)
parser.add_argument(
    '--classes', type=str,
    help='path to class definitions, default ' + YOLO.get_defaults("classes_path")
)
parser.add_argument(
    '--gpu_num', type=int,
    help='Number of GPU to use, default ' + str(YOLO.get_defaults("gpu_num"))
)1.


将image参数改为true


parser.add_argument(

   '--image', default=True, action="store_true",

   help='Image detection mode, will ignore all positional arguments'

)

修改detect_img的img路径

def detect_img(yolo):

   while True:

       img ="D:\keras-yolo3-master\LabelmeData/aircraft_4.jpg"

测试结果

tt.png

本文实例:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/12621202


tt.png

目录
相关文章
|
2月前
|
数据处理 算法框架/工具 计算机视觉
手把手教你使用YOLOV5训练自己的目标检测模型
本教程由肆十二(dejahu)撰写,详细介绍了如何使用YOLOV5训练口罩检测模型,涵盖环境配置、数据标注、模型训练、评估与使用等环节,适合大作业及毕业设计参考。提供B站视频、CSDN博客及代码资源链接,便于学习实践。
221 1
手把手教你使用YOLOV5训练自己的目标检测模型
|
7月前
|
机器学习/深度学习 算法 PyTorch
YOLO如何入门?
YOLO如何入门?
|
机器学习/深度学习 人工智能 计算机视觉
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
18970 0
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
|
算法 开发工具 计算机视觉
使用 YOLOv5 进行图像分割的实操案例
使用 YOLOv5 进行图像分割的实操案例
|
编解码 人工智能 PyTorch
手把手教物体检测——EfficientDet
手把手教物体检测——EfficientDet
918 0
手把手教物体检测——EfficientDet
|
机器学习/深度学习 编解码 固态存储
深度学习论文阅读目标检测篇(五)中文版:YOLOv2《 YOLO9000: Better, Faster, Stronger》
 与分类和标记等其他任务的数据集相比,目前目标检测数据集是有限的。最常见的检测数据集包含成千上万到数十万张具有成百上千个标签的图像[3][10][2]。分类数据集有数以百万计的图像,数十或数十万个类别[20][2]。
169 0
深度学习论文阅读目标检测篇(五)中文版:YOLOv2《 YOLO9000: Better, Faster, Stronger》
|
机器学习/深度学习 算法 计算机视觉
深度学习计算机视觉之YOLO,YOLOv2和YOLOv3算法(超详细解析)
您只看一次(YOLO)是针对实时处理的对象检测系统。我们将在本文中介绍YOLO,YOLOv2和YOLOv3。
290 0
深度学习计算机视觉之YOLO,YOLOv2和YOLOv3算法(超详细解析)
|
算法 计算机视觉
【YOLO系列学习笔记】-第二章初识YOLO
you only look once,属于one-stage目标检测算法
89 0
【YOLO系列学习笔记】-第二章初识YOLO
|
机器学习/深度学习 计算机视觉 Python
手把手带你调参Yolo v5 (v6.2)(推理)(一)
手把手带你调参Yolo v5 (v6.2)(推理)
手把手带你调参Yolo v5 (v6.2)(推理)(一)
|
机器学习/深度学习 Linux TensorFlow
基于TensorFlow训练的人脸识别神经网络 毕业设计完整教程
基于TensorFlow训练的人脸识别神经网络 毕业设计完整教程
294 0