[学习笔记]基于PaddleDetection的voc数据集训练(螺丝螺母识别)

这是关于深度学习的第二篇博客。

依旧是百度的Paddle框架。

不过有细微的区别,就是没有代码了(笑)

不过学习时间是一点不比前面的短就是了。甚至还要长。

不得不说,百度的paddle框架的相关教程是真的很少,在csdn和博客园逛了有一周左右都没弄明白要从哪里下手。

好在最后终于是明白了要干什么,那就稍稍写以下吧。

0、目标识别与目标检测的区别

简单来说目标检测就是要在一个图片中找到想要的东西,所以数据集的准备要更加困难一些,需要人为标记出每个图片的目标位置。这个过程越准确越好。

好在,学长已经替我完成了这个过程(笑)

voc数据集的准备与处理:

数据集结构如下图:

 

其中annotations_measure文件夹下存储的是每一张图片所包含的目标的信息/

photo中包含的就是每一张照片

labels.txt就是类别,这里内容如下:

 

 

 

 

 

 就是说,本数据集中只含有两个类别(螺丝螺母,具体哪个是1哪个是0我也记不得了,不过可以起更有标识性的名字,比如screw螺丝,nut螺母)

train.txt中包含的是每一张图片和其对应的annotations(标签)的相对路径。这是由python脚本乱序自动生成的。

val.txt同上。

因为我们的训练过程需要一一训练一边测试其LOSS(就是做一道题学习知识,再做一道题测试结果)所以需要两个文件来指明。

准备好数据集,我们就可以准备开始训练了。

这里又一次因为本机环境的问题,也因为算力问题,选择了百度的AI Studio进行训练。

文件结构如下:

│ command.txt
│ requirements.txt
│ setup.py
│ tree.txt

├─configs
│ │ runtime.yml
│ │
│ ├─datasets
│ │ coco_detection.yml
│ │ voc.yml
│ │
│ └─yolov3
│ │ README.md
│ │ yolov3_darknet53_270e_voc.yml
│ │
│ └─_base_
│ yolov3_reader.yml

├─dataset
│ └─VOC2007
│ voc.zip

├─deploy

└─tools

 

将刚刚处理好的数据集打成zip,放入datasets(外层的那个)中的VOC2007中

configs文件夹中的东西用来说明如何训练(使用什么网络,轮数,数据集类型等,下文会一一说明)

configs中的datasets文件夹中的文件(去除了一些,留下了两个相关的)就是说明数据集类型(coco数据集或是voc数据集),这里使用的是voc数据集,需要保留

yolov3文件夹中的那一串文件名表示的是:使用yolov3,darknet53网络,训练270轮,voc数据集进行训练。

继续向下,_base_中的yolov3_reader.yml内容如下:

 1 worker_num: 2
 2 TrainReader:
 3   inputs_def:
 4     num_max_boxes: 50
 5   sample_transforms:
 6     - Decode: {}
 7     - Mixup: {alpha: 1.5, beta: 1.5}
 8     - RandomDistort: {}
 9     - RandomExpand: {fill_value: [123.675, 116.28, 103.53]}
10     - RandomCrop: {}
11     - RandomFlip: {}
12   batch_transforms:
13     - BatchRandomResize: {target_size: [320, 352, 384, 416, 448, 480, 512, 544, 576, 608], random_size: True, random_interp: True, keep_ratio: False}
14     - NormalizeBox: {}
15     - PadBox: {num_max_boxes: 50}
16     - BboxXYXY2XYWH: {}
17     - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
18     - Permute: {}
19     - Gt2YoloTarget: {anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]], anchors: [[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]], downsample_ratios: [32, 16, 8]}
20   batch_size: 1
21   shuffle: true
22   drop_last: true
23   mixup_epoch: 250
24   use_shared_memory: true
25 
26 EvalReader:
27   inputs_def:
28     num_max_boxes: 50
29   sample_transforms:
30     - Decode: {}
31     - Resize: {target_size: [608, 608], keep_ratio: False, interp: 2}
32     - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
33     - Permute: {}
34   batch_size: 32
35 
36 TestReader:
37   inputs_def:
38     image_shape: [3, 608, 608]
39   sample_transforms:
40     - Decode: {}
41     - Resize: {target_size: [608, 608], keep_ratio: False, interp: 2}
42     - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
43     - Permute: {}
44   batch_size: 1

其中20行的batch_size: 1与计算机的GPU显存有关,显存越大能开得越大,训练速度也会有所加快。这里直接拉到32

Tesla V100*4,显存巨大,算得够快)

之后,将所有文件打包上传到AI Studio,运行环境后解压

需要注意得是:在AI Studio中,缺少一些相关得包,需要pip install一下,是这三个:pycocotools,lap,motmetrics

然后就可以开始训练了在AI Studio的终端里输入以下代码

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

就可以开始训练了。

等待270轮结束后,就可以导出训练完的模型了。

 

posted @ 2022-06-06 23:01  阿基米德的澡盆  阅读(1001)  评论(0编辑  收藏  举报