基于yolo3的图像半自动打标

本文介绍了一种基于yolo3的图像半自动打标方法,通过训练模型预测并转换为xml文件,再进行人工复查,显著提高了打标效率。详细步骤包括:运行yolo_test.py生成result.txt,使用txt2xml.py转换为xml,最后用labelimg工具进行复查。
摘要由CSDN通过智能技术生成

前言

这篇文章以yolo3为基础,用yolo3测试没有打标的图片,将结果转换为xml文件,然后在通过人工复查,一半智能一半人工所以叫做半自动。具体实施:先用少量打标样本训练出一个模型,用该模型测试未打标样本,通过人工复查之后将样本合并,这样减少了打标过程。图片样本过多打标确实是很累啊,我当时是有5000张图片需要打标,打标一整天搞了2000张人都麻木了,加入半自动后只需要微调结果框就好,半天就搞完剩余的3000张。

1. 图像样本

首先在根目录下新建semi-auto文件夹,文件夹包括Annotations和JPEGImages,与voc格式一样,方便最终的合并。
在这里插入图片描述
JPEGImages文件夹下放需要打标的图片,命名我建议从命名为voc格式的,然后接着已经打过标签的图片名往下继续,也就是说已经打过标的图片如果有8张,那么没打过标的就以000009开始。我当时是以时间命名的,后来出现标签与图片不对应的问题,所有的图片都要重新复查,都是泪。
在这里插入图片描述

2. yolo_test.py

2.1 代码

用该代码替换原来的yolo_test.py或则命名为yolo_test1.py。

# -*- coding: utf-8 -*-
import colorsys
import os
from timeit import default_timer as timer
import time

import numpy as np
from keras import backend as K
from keras.models import load_model
from keras.layers import Input
from PIL import Image, ImageFont, ImageDraw

from yolo3.model import yolo_eval, yolo_body, tiny_yolo_body
from yolo3.utils import letterbox_image
from keras.utils import multi_gpu_model

path ='C:/Users/Administrator/Desktop/keras-yolo3-master/semi-auto/JPEGImages/' #待检测图片的位置

# 创建创建一个存储检测结果的dir
result_path = './result'
if not os.path.exists(result_path):
    os.makedirs(result_path)

# result如果之前存放的有文件,全部清除
for i in os.listdir(result_path):
    path_file = os.path.join(result_path,i)  
    if os.path.isfile(path_file):
        os.remove(path_file)

#创建一个记录检测结果的文件
txt_path =result_path + '/result.txt'
file = open(txt_path,'w')  

class YOLO(object):
    _defaults = {
        "model_path": 'model_data/yolov3-8img.h5',
        "anchors_path": 'model_data/yolo_anchors.txt',
        "classes_path": 'model_data/coco_classes.txt',
        "score" : 0.3,
        "iou" : 0.45,
        "model_image_size" : (416, 416),
        "gpu_num" : 1,
    }

    @classmethod
    def get_defaults(cls, n):
        if n in cls._defaults:
            return cls._defaults[n]
        else:
            return "Unrecognized attribute name '" + n + "'"

    def __init__(self, **kwargs):
        self.__dict__.update(self._defaults) # set up default values
        self.__dict__.update(kwargs) # and update with user overrides
        self.class_names = self._get_class()
        self.anchors = self._get_anchors()
        self.sess = K.get_session()
        self.boxes, self.score
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值