文章目录
前言
这篇文章以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