基于Paddle的计算机视觉入门教程——第12讲 实战:PaddleDeteciton实现目标检测

B站教程地址

https://www.bilibili.com/video/BV18b4y1J7a6/

下载链接

链接:https://pan.baidu.com/s/1ydUkMBOUQtaIaNJrjbCjGQ
提取码:qxp9

数据集

数据集结构

在实际项目中最常用的是voc数据集格式,我们以voc数据集为例,进行介绍。

基于Paddle的计算机视觉入门教程——第12讲 实战:PaddleDeteciton实现目标检测_第1张图片

JPEGImages存放所有数据集图片,Annotations中存放所有标注文件。

如图片000001.jpg,它对应的标注就是000001.xml

基于Paddle的计算机视觉入门教程——第12讲 实战:PaddleDeteciton实现目标检测_第2张图片

这张图片对应的标注信息如下:


	VOC2007
	000001.jpg
	
		The VOC2007 Database
		PASCAL VOC2007
		flickr
		341012865
	
	
		Fried Camels
		Jinky the Fruit Bat
	
	
		353
		500
		3
	
	0
	
		dog
		Left
		1
		0
		
			48
			240
			195
			371
		
	
	
		person
		Left
		1
		0
		
			8
			12
			352
			498
		
	

制作数据集

使用labelImg软件制作目标检测数据集。

基于Paddle的计算机视觉入门教程——第12讲 实战:PaddleDeteciton实现目标检测_第3张图片

键盘A和D代表上一张和下一张,W为标注工具,标注完成后CTRL+S保存,这样一张图片就标注完成了。所有的图片都需要进行标注,而且不能遗漏目标物体,这一过程是非常耗时耗力的。

基于Paddle的计算机视觉入门教程——第12讲 实战:PaddleDeteciton实现目标检测_第4张图片

PaddleDetection

把制作好的数据集放在dataset文件夹下,然后修改configs里面的标注文件,对应你想要修改的模型,特别需要注意修改dataset相关的参数,如果对模型不做特别修改,其他大多数参数都不需要改变。

模型训练

python tools/train.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml --use_vdl=True --eval

断点训练

python tools/train.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml -r output/yolov3_darknet53_270e_voc/100

模型评估

python tools/eval.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml -o weights=output/yolov3_darknet53_270e_voc/best_model

模型导出

python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml --output_dir=./inference_model -o weights=output/yolov3_darknet53_270e_voc/best_model

模型预测

python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_voc --image_file=./street.jpg --device=GPU --threshold=0.2

生成train.txt和eval.txt代码

import os
import random
 
def ReadFileDatas():
    FileNamelist = []
    file = open('train.txt','r+')
    for line in file:
        line=line.strip('\n') 
        FileNamelist.append(line)
    file.close()
    return FileNamelist
 
def WriteDatasToFile(listInfo,cls_num):
    train_file_handle=open('train.txt',mode='w')
    eval_file_handle=open('eval.txt',mode='w')
    i = 0
    for idx in range(len(listInfo)):
        i += 1
        str = listInfo[idx]
        str_Result = str  + '\n'
        if(i % (cls_num+1) == 0):
            eval_file_handle.write(str_Result)
        else:
            train_file_handle.write(str_Result)
    train_file_handle.close()
    eval_file_handle.close()


with open("train.txt", 'w') as f:
    res = os.listdir('./annotations')             			 #修改为自己的标注路径
    for j in res:
        j = j[:-4]
        f.write("./photos/"+str(j)+'.jpg ')					 #修改为自己的图片路径
        f.write("./annotations/"+str(j)+'.xml'+'\n')		 #修改为自己的标注路径
      
listFileInfo = ReadFileDatas()
random.shuffle(listFileInfo)
WriteDatasToFile(listFileInfo,6)   #训练集和测试集 6 : 1

注意修改最后的图片和标注文件路径!

你可能感兴趣的:(计算机视觉,paddle,目标检测)