El primer blog técnico: PaddleDetection entrena su propio conjunto de datos y lo implementa en dispositivos informáticos de borde

escribir delante

Este es mi primer blog de tecnología, y el comienzo de lo que espero hacer para escribir buenos hábitos de diarios y resúmenes de proyectos antes de que comience la escuela de posgrado. Antes que nada, dejar en claro que el propósito del blog definitivamente es permitir que más personas tomen menos desvíos al contactar con el aprendizaje profundo, por lo que esto también es un resumen de pisar el pozo.

Conozca su hardware

Al comienzo del entrenamiento del modelo, primero debe comprender su dispositivo de hardware. El propósito de este proyecto es implementar el modelo entrenado en la placa eageboardFz3B, por lo que antes de eso, primero debe comprender la versión del modelo que puede llevar su dispositivo de hardware. y dependencias. La línea se resume de la siguiente manera:

El número de versión del que depende eageboard
pádel <=1.8.5
Detección de paletas real 0.5
PádelSlim =2.9.0

plataforma de software

Baidu plataforma de entrenamiento de pulpa voladora AIstudio. dirección del proyecto

entrenamiento modelo

Debido a los requisitos del proyecto, tenemos que entrenar nuestros propios conjuntos de datos y no podemos elegir conjuntos de datos públicos. Por supuesto, si su proyecto puede encontrar conjuntos de datos alternativos en Internet, por supuesto, también puede elegir conjuntos de datos públicos, que le ahorrará la necesidad de anotación de datos, y así sucesivamente.

1. Preparar el conjunto de datos

Etiquetado de conjuntos de datos, aquí se trata principalmente del etiquetado de conjuntos de datos VOC, ya que finalmente elegí usar el conjunto de datos en formato voc, se omite el contenido de labelme convertido a formato coco, si es necesario, puede consultar el [documento de ayuda] ( cómo entrenar un conjunto de datos personalizado — documentación de PaddleDetection 0.1 )

uso de herramientas

Use el asistente de etiquetado del asistente para completar las tareas de etiquetado,

Imagen de WeChat_20220307154850.pngEl nombre del proyecto se puede elegir arbitrariamente, la ruta de la carpeta de imágenes es la ruta de la imagen de origen, num_class está separado por una coma en inglés y el mejor nombre de clase también está escrito en inglés. Recuerde presionar CTr+S para guardar después de marcar, de lo contrario no se sobrescribirá. Después de exportar el conjunto de datos, se encuentra el archivo xml requerido por el formato voc. Entre ellos, el objeto de palabra clave de categoría debe ser reemplazado

2. Usa la plataforma aistudio para entrenar

2.1 Crear un proyecto

AI studio提供脚本和jupyter notebook;两种方式进行编辑,我们这里使用notebook编辑代码,[使用方法见](AI Studio-帮助文档 (baidu.com)) 这里以ssd_mobilenet模型为例,由于需要部署到终端上所以有必要提前了解你终端的算力情况,这在实践中尤为重要,因为这一点前期工作没有做好调研导致所训练的yolov3模型因为模型太大而板卡不能提供所需要的算力而达不到预期效果。最终只能采用轻量型模型来完成检测任务。常用模型在edgeboard上的表现如下表。

Imagen de WeChat_20220308085919.png 以上图片出自为某博主,但是因为整理的时候与笔者写总结的时间间隔太长没有找到原博主,如果有侵权联系我删除(笔芯) 了解到这些我们就可以开始编程了,参考PaddleDetection帮助文档,现在首先我们解压工程文件,这里我选择下载安装包的方式,[大家也可以在直接从gitee中下载但是为了防止版本问题](PaddleDetection: PaddleDetection的目的是为工业界和学术界提供丰富、易用的目标检测模型 - Gitee.com),这里选择release_0.5直接下载。然后用以下命令解压到根目录下。 ! unzip PaddleDetection-release-0.5.zip

解压数据集

! unzip data/data130283/trytwo3.zip -d work/

划分数据集

import random
import os
#生成train.txt和val.txt
random.seed(2020)
xml_dir  = '/home/aistudio/work/trytwo/ANNOTATIONS'#标签文件地址
img_dir = '/home/aistudio/work/trytwo/IMAGES'#图像文件地址
path_list = list()
for img in os.listdir(img_dir):
    img_path = os.path.join(img_dir,img)
    xml_path = os.path.join(xml_dir,img.replace('png', 'xml'))
    path_list.append((img_path, xml_path))
random.shuffle(path_list)
ratio = 0.9
train_f = open('/home/aistudio/work/train.txt','w') #生成训练文件
val_f = open('/home/aistudio/work/val.txt' ,'w')#生成验证文件

for i ,content in enumerate(path_list):
    img, xml = content
    text = img + ' ' + xml + '\n'
    if i < len(path_list) * ratio:
        train_f.write(text)
    else:
        val_f.write(text)
train_f.close()
val_f.close()

#生成标签文档
label = ['Slope','Numone','Freeezone','NumTwo','STOP','CASD','GasStation','GrossWalk','Cone']#设置你想检测的类别
with open('/home/aistudio/work/label_list.txt', 'w') as f:
    for text in label:
        f.write(text+'\n')
复制代码

参数配置

在路径PaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml下设置你数据集的路径配置参数,下面是你可能需要修改的参数设置记得根据你的类别多少修改类别。 num_classes

TrainReader:
  inputs_def:
    image_shape: [3, 300, 300]
    fields: ['image', 'gt_bbox', 'gt_class']
  dataset:
    !VOCDataSet
    anno_path: train.txt             #需要修改
    dataset_dir: /home/aistudio/work #需要修改
    use_default_label: false         #默认为True ,修改为false,下同
  sample_transforms:
  
  EvalReader:
  inputs_def:
    image_shape: [3, 300, 300]
    fields: ['image', 'gt_bbox', 'gt_class', 'im_shape', 'im_id', 'is_difficult']
  dataset:
    !VOCDataSet
    anno_path: val.txt                        #修改
    dataset_dir: /home/aistudio/work          #修改
    use_default_label: false           
  sample_transforms:
  
  TestReader:
  inputs_def:
    image_shape: [3,300,300]
    fields: ['image', 'im_id', 'im_shape']
  dataset:
    !ImageFolder
    anno_path: /home/aistudio/work/label_list.txt    #修改
    use_default_label: false
  sample_transforms:
 
复制代码

开始训练

!python PaddleDetection-release-0.5/tools/train.py -cPaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml --eval 看到这样的信息视为成功开始训练

imagen.png

训练结束后还会自动生成一个output文件夹目录,然后我们可以先预测一张图片看一下效果这里需要根据你自己的需要修改

模型预测

python PaddleDetection-release-0.5/tools/infer.py \
-c PaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml \
-o weights=output/ssd_mobilenet_v1_voc/best_model.pdparams \
--infer_img=work/trytwo/IMAGES/1010.png
复制代码

导出模型

 python PaddleDetection-release-0.5/tools/export_model.py -c PaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml --output_dir=./inference_model -o weights=output/ssd_mobilenet_v1_voc/best_model.pdparams TestReader.inputs_def.image_shape=[3,300,300]
复制代码

模型部署需要paddleDemo,按照json文件样例配置即可,至此你就完成了所有在aistudio平台上能够操作的步骤。

视频预测

python PaddleDetection-release-0.5/deploy/python/infer.py --model_dir=inference_model/ssd_mobilenet_v1_voc --video_file=testes.mp4 --thresh=0.8
复制代码

结果

imagen.png

模型部署及调优

Puede ver que el rendimiento del modelo no siempre es el esperado cuando se implementa en el dispositivo terminal, por lo que esto requiere más trabajo de ajuste, alguna referencia de ajuste de parámetros

imagen.png

Supongo que te gusta

Origin juejin.im/post/7073792861154017310
Recomendado
Clasificación