系列⽂章:如何利⽤PaddleDetection做⼀个完整的项⽬(⼀)
如何利⽤PaddleDetection做⼀个完整的项⽬(⼀)
0PaddleDetection简介
PaddleDetection 是PaddlePaddle推出的物体检测统⼀框架。⽀持现有的RCNN、SSD、YOLO等系列模型、⽀持 ResNet、ResNet-VD、ResNeXt、ResNeXt-VD、SENet、MobileNet、DarkNet等主⼲⽹络。针对不同的业务场景(性能、⽬标⼤⼩、准确率等)可以调⽤框架下的不同参数(或者是参数⽂件),实现任务。相⽐于tensorflow的Object_Detection,优势之⼀就是将YOLO这⼀⽬标检测的快速算法融合到了框架下。
⽂章将以⼀个例⼦为说明,来谈如何利⽤paddleDetection完成⼀个项⽬,本⽂介绍(1-6章节)
项⽬⽤到的⼯具 硬件:Win10(RTX2060)笔记本、某品牌服务器(4*T4)⼯业相机(Hikvision)软件:pycharm、VS2019
1、环境部署
2、数据集准备
3、训练
eval是做什么的4、训练过程可视化
5、模型导出
6、python进⾏单张/多张图⽚的预测
7、python+qt(给客户的演⽰demo)
8、C++进⾏单张预测(含编译简介)
9、C++预测代码封装成DLL、配合C#完成⼀个整体项⽬
10、扩展:关于PaddlePaddle代码数据读取的⽅式。
备注:在paddle⾃带的⽂档中为export PYTHONPATH=pwd:$PYTHONPATH
export是linux下的⽤法,在windows下将exoprt改成set
但是发现运⾏报错,报错内容如下:
错误提⽰发现缺少“ppdet”这个模块,ppdet(其实就是paddle detection的⼀个缩写),但是我们在项⽬的路径⾥⾯可以发现有这个模块,原因就是,我们的代码所在的路径⽆法读取到该⽂件下的代码,因此,我们需要在代码中进⾏改进⼀下。
到 ppdet/modeling/tests/test_architectures.py这个⽂件,然后添加红框所⽰的代码。备注,第⼆个红框⾥⾯的路径是我的项⽬路径出现如图所⽰的代码,表⽰运⾏成功
⾄此,所有的运⾏环境已经配置成功。
2数据集的准备
2.1数据标注:
⽬前项⽬使⽤的数据集格式是VOC数据格式,使⽤labelimg作为标注⼯具,标注⼯具的下载安装见。
特别说明:项⽬中使⽤的数据集是PaddleDetection提供的演⽰⽰例数据集,下⽂将通过使⽤该数据集来说明。
⾸先,下载该数据集,下载后如下图所⽰:提取码vw3b
标注⽅式如下:
打开软件,并导⼊图⽚:
选取标注⽂件的保存路径
点击Change Save Dir ,然后将标注⽂件保存在某⼀个路径下。
开始标注:点击Create\nRectBo—框选⽬标–命名(下图中命名为apple)–点击OK—点击Save(完成⼀张)–点击Next Image 标注下⼀张。
所有标注完成以后会⽣成很多的xml⽂件。
打开⼀个xml⽂件
具体信息如下:
2.2创建VOC数据集格式
其中Annotations存放标注⽣成的xml⽂件,JPEGImage存放图⽚,ImageSets存放对训练集和数据集的划分。ImageSet下有Main⽂件,Mian下需要建⽴⼀个。是指标注的⽬标的名称。其内容如下:
备注:、是根据下⽂中代码(该代码会命名为:get_list.py,放置在了数据集链接的⽂件⾥⾯)⽣成,分别是对训练集和验证集的划分:
接上⽂所述,是⽣成⽣成、的代码,该代码会将300张⽔果图⽚分成240张训练集和60张验证集。
```python
import os
import random
train_precent=0.7
xml="C:/Users/zhili/Desktop/fruit-detection/Annotations"
save="C:/Users/zhili/Desktop/fruit-detection/ImageSets/Main"
total_xml=os.listdir(xml)
num=len(total_xml)
tr=int(num*train_precent)
train=range(0,tr)
ftrain=open("C:/Users/zhili/Desktop/fruit-detection/ImageSets/","w")
ftest=open("C:/Users/zhili/Desktop/fruit-detection/ImageSets/","w")
for i in range(num):
name=total_xml[i][:-4]+"\n"
if i in train:
ftrain.write(name)
else:
ftest.write(name)
ftrain.close()
ftest.close()
如下图是⽣成的train⽂件
备注:在Main⽂件夹中⽣成的⽂件和⽂件仅仅是对数据集的划分,还需要进⼀步的利⽤
如下代码(create_list.py,该代码是paddle提供的)⽣成含有路径信息以及图像和xml⽂件⼀⼀对应的⽂件。
```python
import os
import os.path as osp
import re
import random
devkit_dir = './'
years = ['2007', '2012']
def get_dir(devkit_dir, type):
return osp.join(devkit_dir, type)
def walk_dir(devkit_dir):
filelist_dir = get_dir(devkit_dir, 'ImageSets/Main')
annotation_dir = get_dir(devkit_dir, 'Annotations')
img_dir = get_dir(devkit_dir, 'JPEGImages')
trainval_list = []
test_list = []
added = set()
for _, _, files in os.walk(filelist_dir):
for fname in files:
img_ann_list = []
if re.match('train\.txt', fname):
img_ann_list = trainval_list
elif re.match('val\.txt', fname):
img_ann_list = test_list
else:
continue
fpath = osp.join(filelist_dir, fname)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论