yolo v3-训练自己的数据(step by step)

平台: win10 annaconda python3.7 tensorflow 1.13  keras

GitHub地址:https://github.com/herrkun/YOLOV3-detecting-red-blood-cell

最终效果:

训练步骤:

1、利用xml文件或者其他方式生成所用到的txt文件,文件格式为:图像地址,xmin,ymin,xmax,ymax,类别ID+空格下一个box信息(我是直接从xml文件中提取信息,然后写成一个txt文件)
eg: 
E:\test_idea\raccoon_dataset-master\images//raccoon-117.jpg 100,124,266,324,0 342,101,570,297,0
E:\test_idea\raccoon_dataset-master\images//raccoon-118.jpg 109,31,307,297,0

2、更改train.py文件中的信息,替换为所训练需要的数据(不使用预训练好的模型)
annotation_path 就是指向上述生成的txt文件,log_dir 一会生成模型存放的地址,classes_path 类别的名称(eg:person),一个一行,
anchors_path 存放通过聚类得到的anchors
def _main():
    annotation_path = 'redcell_anno_wyk.txt'
    log_dir = 'logs_redcell/'
    classes_path = 'model_data/redcell_classes.txt'
    anchors_path = 'model_data/yolo_anchors.txt'

这里load_pretrained改为False就可以了,表示不使用预训练好的模型进行训练
model = create_model(input_shape, anchors, num_classes,load_pretrained=True,
            freeze_body=2, weights_path='model_data\\darknet53_weights.h5')

3、使用预训练好的权重进行训练(适合样本比较少的场合)
为了加快训练速度,
下载darknet网络的预训练权重
    
https://pjreddie.com/media/files/darknet53.conv.74

    
将darknet53.conv.74改名为darknet53.weights,并转化为keras能够接受的权重形式

    
python convert.py -w darknet53.cfg darknet53.weights model_data/darknet53_weights.h5

这里load_pretrained改为True,freeze_body=2表示一开始训练的时候冻结前249层的权重信息(一共252层),训练一定的epoch后
,epoch的大小可以自己设定,然后再训练所有的层。
weights_path='model_data\\darknet53_weights.h5表示使用这个权重进行训练
model = create_model(input_shape, anchors, num_classes,load_pretrained=True,
            freeze_body=2, weights_path='model_data\\darknet53_weights.h5')

训练过程:

loss大概到了40就降低的很慢了,减小学习率会好很多。

4、利用训练好的模型进行预测
修改yolo文件,如下(当最终的预测结果没有框的时候,可以通过修改"score"  "iou" 来解决),然后运行
python yolo_video.py --image 文件进行预测,进去以后再输入图片的地址
python yolo_video.py --input 视频地址 进行视频的预测

class YOLO(object):
    _defaults = {
        "model_path": 'E:\\test_idea\\wyk_yolo_redcell\\logs_redcell\\trained_weights_final_pre.h5',
        "anchors_path": 'model_data/yolo_anchors.txt',
        "classes_path": 'model_data/redcell_classes.txt',
        "score" : 0.3,
        "iou" : 0.45,
        "model_image_size" : (416, 416),
        "gpu_num" : 1,
    }

输入图片进行预测:

输出结果:

 

 

5、结果

      可以实现物体的定位和检测,但是经过实验可得,使用预训练好的模型比从头开始训练的模型效果要好很多,即便他们都达到了相同的loss,相同的loss可能说明从头开始训练的模型过拟合(该数据集只有200张图像),并不是训练

 

6、注意事项

wyk_parase_anno.py 文件是进行文件的转换,将xml文件中的有用信息进行提取并转换为txt文件,在训练的时候会用到

batchsize别设置的太大,否则使用GPU进行训练的时候可能显示显存不够,oom error,需要调小batchsize。

font 文件夹需要存在,否则向图像中写入类别名称会有错误,在yolo文件的第129行

 

博客:https://blog.csdn.net/sinat_26917383/article/details/85614247
https://blog.csdn.net/akenseren/article/details/83069190
https://blog.csdn.net/yuhq3/article/details/80281929
https://blog.csdn.net/qq_40013071/article/details/88395413

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值