前言:接触yolo网络是在七月份,当时把yolo检测的论文以及R-CNN系列,SSD等一些论文看了一下,感觉内容很丰富,也尝试了darknet版本的实现,和yolo v3的实现,在网上也有很多关于上面两种的实现,这里就不讲了。九月份用tiny-yolo v3做了一个缺陷检测的实验,效果出乎意料,准确率和召回率“满分”!!过了三个月才想着把以前的实验总结一下,真不应该。下面从头开始说明怎么在自己的数据集上实现tiny-yolo v3,码字不易,给赞啊,代码是在别人的基础上修改的,放到了github上,感谢加星:https://github.com/Eatzhy/tiny-yolov3 有问题欢迎交流,会帮忙解决。
1、对图像进行转格式和编队
因为实验使用的缺陷图像为DAGM的数据集,大小为512×512格式为PNG,而tiny-yolo v3输入的格式为jpg,大小为416×416(也有人说tiny网络输入是224×224大小,我们先不管到底哪个,代码在修改的时候是416),对图像转格式,编队代码如下。
将代码copy下来和缺陷图像文件夹放到一个路径,改一下代码的路径名就ok。转换完之后大概是这个样子(部分图片):
# -*- coding: utf-8 -*-
'''
将png转jpg
resize到416
并给图片编队
待转换的图像存放在data下,程序运行后,data下获得的是jpg格式
pre_data存放是png格式
'''
import os
from PIL import Image
import shutil
import sys
#创建一个文件,存放原图
output_dir = 'pre_data'
if not os.path.exists(output_dir):
os.mkdir(output_dir)
def image2png(dataset_dir,type):
#转换格式并resize到一定大小
files = []
image_list = os.listdir(dataset_dir)
files = [os.path.join(dataset_dir, _) for _ in image_list]
for index,png in enumerate(files):
if index > 100000:
break
try:
sys.stdout.write('\r>>Con