Detección y reconocimiento de fumar (fumar) 2: Pytorch realiza la detección y el reconocimiento de fumar (fumar) (incluido el conjunto de datos de fumar (fumar) y el código de capacitación)

Detección y reconocimiento de fumar (fumar) 2: Pytorch realiza la detección y el reconocimiento de fumar (fumar) (incluido el conjunto de datos de fumar (fumar) y el código de capacitación)

Tabla de contenido

Detección y reconocimiento de fumar (fumar) 2: Pytorch realiza la detección y el reconocimiento de fumar (fumar) (incluido el conjunto de datos de fumar (fumar) y el código de capacitación)

1. Detección e identificación de fumadores (tabaquismo)

2. Conjunto de datos de fumar (fumar)

 (1) Descripción del conjunto de datos de fumar (fumar)

 (2) Conjunto de datos personalizado

3. Modelo de detección humana

4. Entrenamiento del modelo de clasificación de fumar (fumar)

(1) Proyecto de instalación

(2) Preparar datos

(3) Entrenamiento del modelo de clasificación de reconocimiento de fumar (fumar) (Pytorch)

(4) Visualizar el proceso de formación

(5) Efecto de reconocimiento de fumar (fumar)

(6) Algunas sugerencias de optimización

(7) Algunos métodos de manejo de errores en ejecución

5. Descarga del código fuente del proyecto (versión de Python)


Este es el proyecto " Detección y reconocimiento de fumar (fumar) " Serie " Pytorch realiza la detección y el reconocimiento de fumar (fumar) (incluido el conjunto de datos de fumar (fumar) y el código de capacitación)"; el proyecto se basa en el marco de aprendizaje profundo Pytorch para desarrollar un algoritmo de detección y reconocimiento de fumar de alta precisión y en tiempo real; el código fuente del proyecto admite modelos como resnet18, resnet34, resnet50, mobilenet_v2 y googlenet y otros modelos comunes de aprendizaje profundo, que los usuarios pueden personalizar para la capacitación; la precisión es bastante alta, utilizando peso ligero. La precisión de reconocimiento de fumar del modelo mobilenet_v2 también puede ser tan alta como 95.5607%, lo que cumple con los requisitos de rendimiento comercial .

Modelo tamaño de entrada Exactitud de la prueba
mobilenet_v2 224×224 95.5607%
red de google 224×224 96.7290%
resnet18 224×224 95.7944%

Déjame mostrarte la versión de Python del efecto de demostración de detección y reconocimiento de fumar (fumar)

[ Respete la originalidad, indique la fuente para la reimpresión ] https://blog.csdn.net/guyuealian/article/details/131521338 


Para obtener más artículos sobre la serie " Detección e identificación de fumadores (tabaquismo) , consulte:

  1. Fumar (fumar) detección y reconocimiento 1: Descripción del conjunto de datos de fumar (fumar) (incluido el enlace de descarga): https://blog.csdn.net/guyuealian/article/details/130337263
  2. Detección y reconocimiento de fumar (fumar) 2: Pytorch realiza la detección y el reconocimiento de fumar (fumar) (incluido el conjunto de datos de fumar (fumar) y el código de capacitación): https://blog.csdn.net/guyuealian/article/details/131521338
  3. Detección y reconocimiento de fumar (fumar) 3: Android realiza detección y reconocimiento de fumar (fumar) (incluido el código fuente, detección en tiempo real): https://blog.csdn.net/guyuealian/article/details/131521347
  4. Detección y reconocimiento de fumar (fumar) 4: C ++ realiza la detección y el reconocimiento de fumar (fumar) (incluido el código fuente, detección en tiempo real): https://blog.csdn.net/guyuealian/article/details/131521352


1. Detección e identificación de fumadores (tabaquismo)

Hay muchos esquemas de implementación para métodos de detección e identificación de fumar (fumar) .Aquí se utiliza el método más convencional: basado en la detección del cuerpo humano + método de clasificación y reconocimiento de fumar , es decir, primero use un modelo general de detección del cuerpo humano para detectar y ubicar el área del cuerpo humano, luego corte el área de detección de fumar de acuerdo con ciertas reglas, y luego entrene a un clasificador de reconocimiento del comportamiento de fumar para completar las tareas de detección e identificación de fumar (fumar) ;

La ventaja de esto es que se puede usar el modelo de detección humana existente y no es necesario volver a etiquetar los marcos de detección de fumadores y no fumadores, lo que puede reducir el costo del etiquetado manual; mientras que los datos de clasificación de fumadores son relativamente fáciles de recopilar, y el modelo de clasificación se puede orientar para la optimización.


2. Conjunto de datos de fumar (fumar)

 (1) Descripción del conjunto de datos de fumar (fumar)

Este proyecto utiliza principalmente dos conjuntos de datos de fumar (fumar) : conjunto de datos de fumar y video de fumar , con un total de más de 15000 imágenes. Los datos son de alta calidad y se pueden utilizar para el desarrollo de algoritmos de modelo de clasificación de elementos para el reconocimiento de fumar (fumar) de aprendizaje profundo. El proyecto divide el estado de fumar (fumar) en dos situaciones, a saber: fumar (fumar) y no fumar (no fumar) Para facilitar la comprensión de todos, a continuación se define la categoría de comportamiento de fumar (fumar):

no fumar : No hay humo en el área de detección de fumadores, se define como comportamiento de no fumar (no fumar); si el sujeto tiene comportamiento de fumar, pero el humo no está en el área de detección de fumadores, debido a la limitación del algoritmo, todavía se define como no fumar (no fumar )
.
 

 Para obtener instrucciones sobre el uso del conjunto de datos de fumar (fumar), consulte uno de mis blogs: https://blog.csdn.net/guyuealian/article/details/130337263 

 (2) Conjunto de datos personalizado

Si necesita agregar nuevas categorías de datos o necesita personalizar el conjunto de datos para el entrenamiento, puede consultar el siguiente procesamiento:

  • Para crear conjuntos de datos de Entrenamiento y Prueba, las imágenes de la misma categoría deben colocarse en la misma carpeta; y la carpeta del subdirectorio se nombra como el nombre de la categoría, como

  • Archivo de clase: una lista por línea: ​class_name.txt​
    (La última línea, ingrese una línea más)
A
B
C
D

  • Modifique la ruta de datos del archivo de configuración: configs/​config.yaml​
train_data: # 可添加多个数据集
  - 'data/dataset/train1' 
  - 'data/dataset/train2'
test_data: 'data/dataset/test'
class_name: 'data/dataset/class_name.txt'
...
...

3. Modelo de detección humana

Para conocer el código de capacitación de detección humana de este proyecto, consulte: Detección de peatones (detección humana) 2: YOLOv5 realiza la detección humana (incluido el conjunto de datos de detección humana y el código de capacitación)


4. Entrenamiento del modelo de clasificación de fumar (fumar)

Después de preparar los datos de reconocimiento de fumar (fumar), puede comenzar a entrenar el modelo de clasificación de reconocimiento de fumar. El modelo del proyecto admite modelos comunes de aprendizaje profundo como resnet18, resnet34, resnet50, mobilenet_v2 y googlenet. Teniendo en cuenta que necesitamos implementar el modelo de reconocimiento de fumar (fumar) en la plataforma Android, el proyecto elige un modelo liviano mobilenet_v2 con una cantidad de cálculo relativamente pequeña.

 La estructura básica de todo el proyecto es la siguiente:

.
├── classifier                 # 训练模型相关工具
├── configs                    # 训练配置文件
├── data                       # 训练数据
├── libs           
│   ├── convert                # 将模型转换为ONNX工具
│   ├── yolov5                 # 人体检测
│   ├── detector.py            # 人体检测demo
│   └── README.md               
├── demo.py              # demo
├── README.md            # 项目工程说明文档
├── requirements.txt     # 项目相关依赖包
└── train.py             # 训练文件

(1) Proyecto de instalación

 El proyecto depende del paquete de python, consulte los requisitos.txt, use pip para instalar:

numpy==1.16.3
matplotlib==3.1.0
Pillow==6.0.0
easydict==1.9
opencv-contrib-python==4.5.2.52
opencv-python==4.5.1.48
pandas==1.1.5
PyYAML==5.3.1
scikit-image==0.17.2
scikit-learn==0.24.0
scipy==1.5.4
seaborn==0.11.2
tensorboard==2.5.0
tensorboardX==2.1
torch==1.7.1+cu110
torchvision==0.8.2+cu110
tqdm==4.55.1
xmltodict==0.12.0
basetrainer
pybaseutils==0.6.5

Consulte el tutorial de instalación del proyecto ( para principiantes, lea primero el siguiente tutorial y configure el entorno de desarrollo ):

(2) Preparar datos

Descargue el conjunto de datos de reconocimiento de fumar (fumar): conjunto de datos de fumar y video de fumar, https://blog.csdn.net/guyuealian/article/details/130337263

(3) Entrenamiento del modelo de clasificación de reconocimiento de fumar (fumar) (Pytorch)

Basado en la " Biblioteca de entrenamiento básico de Pytorch Pytorch-Base-Trainer (modelo de apoyo a la poda de entrenamiento distribuido)", el proyecto realiza el entrenamiento y la prueba del modelo de clasificación de reconocimiento de fumar (fumar). Todo el conjunto de código de entrenamiento es muy simple de operar. Los usuarios solo necesitan colocar la misma categoría de datos de imagen en el mismo directorio y completar la ruta de datos correspondiente para comenzar el entrenamiento.

El marco de entrenamiento adopta Pytorch, y el contenido compatible con todo el conjunto de código de entrenamiento incluye principalmente:

  • Las redes troncales admitidas actualmente son: googlenet, resnet[18,34,50], mobilenet_v2, etc. Se pueden personalizar y agregar otras redes troncales
  • Los parámetros de entrenamiento se pueden establecer a través del archivo de configuración (configs/config.yaml)

Modifique la ruta de datos del archivo de configuración: configs/​config.yaml​ :

  • train_data y test_data se modifican a sus propias rutas de datos
  • Tenga en cuenta que el separador de ruta de datos usa [/], no [\]
  • El proyecto no debe contener archivos de directorio o rutas que contengan caracteres chinos, de lo contrario, ¡habrá muchas excepciones!
# 训练数据集,可支持多个数据集(不要出现中文路径)
train_data:
  - 'path/to/smoking/smoking-person/smoking-dataset/trainval'
  - 'path/to/smoking/smoking-person/smoking-video'
# 测试数据集(不要出现中文路径)
test_data:
  - 'path/to/smoking/smoking-person/smoking-dataset/test'

# 类别文件
class_name: 'data/class_name.txt'
train_transform: "train"       # 训练使用的数据增强方法
test_transform: "val"          # 测试使用的数据增强方法
work_dir: "work_space/"        # 保存输出模型的目录
net_type: "mobilenet_v2"       # 骨干网络,支持:resnet18/50,mobilenet_v2,googlenet,inception_v3
width_mult: 1.0                # 模型宽度因子
input_size: [ 224,224 ]        # 模型输入大小
rgb_mean: [ 0.5, 0.5, 0.5 ]    # for normalize inputs to [-1, 1],Sequence of means for each channel.
rgb_std: [ 0.5, 0.5, 0.5 ]     # for normalize,Sequence of standard deviations for each channel.
batch_size: 128                # batch_size
lr: 0.01                       # 初始学习率
optim_type: "SGD"              # 选择优化器,SGD,Adam
loss_type: "CrossEntropyLoss"  # 选择损失函数:支持CrossEntropyLoss,LabelSmooth
momentum: 0.9                  # SGD momentum
num_epochs: 120                # 训练循环次数
num_warn_up: 0                 # warn-up次数
num_workers: 8                 # 加载数据工作进程数
weight_decay: 0.0005           # weight_decay,默认5e-4
scheduler: "multi-step"        # 学习率调整策略
milestones: [ 30,60,100 ]       # 下调学习率方式
gpu_id: [ 2 ]                  # GPU ID
log_freq: 50                   # LOG打印频率
progress: True                 # 是否显示进度条
pretrained: True               # 是否使用pretrained模型
finetune: False                # 是否进行finetune

Para comenzar a entrenar, ingrese en la terminal: 

python train.py -c configs/config.yaml 

Una vez que se completa el entrenamiento, la precisión del conjunto de entrenamiento está por encima del 98,0% y la precisión del conjunto de prueba es de alrededor del 95,0%.

(4) Visualizar el proceso de formación

La herramienta de visualización del proceso de entrenamiento utiliza Tensorboard e ingresa el comando en la terminal (Terminal):

Para obtener tutoriales, consulte: Tutoriales de desarrollo de proyectos y problemas y soluciones comunes

# 需要安装tensorboard==2.5.0和tensorboardX==2.1
# 基本方法
tensorboard --logdir=path/to/log/
# 例如
tensorboard --logdir=work_space/mobilenet_v2_1.0_CrossEntropyLoss_20230313090258/log

Visualización 

​​​

 ​​ 

(5) Efecto de reconocimiento de fumar (fumar)

Después de completar el entrenamiento, la precisión del conjunto de entrenamiento es superior al 95,5 % y la precisión del conjunto de prueba es de alrededor del 94,5 %. La siguiente tabla muestra los tres modelos que han sido entrenados. Entre ellos, el índice de precisión de mobilenet_v2 puede alcanzar el 95,5607 %, el índice de precisión de googlenet puede alcanzar el 96,7290 % y el índice de precisión de resnet18 puede alcanzar el 95,7944 %.

Modelo tamaño de entrada Exactitud de la prueba
mobilenet_v2 224×224 95.5607%
red de google 224×224 96.7290%
resnet18 224×224 95.7944%
  • archivo de imagen de prueba
# 测试图片(Linux系统)
image_dir='data/test_image' # 测试图片的目录
model_file="data/pretrained/mobilenet_v2_1.0_224_224_CrossEntropyLoss_20230629161618/model/best_model_045_95.5607.pth" # 模型文件
out_dir="output/" # 保存检测结果
python demo.py --image_dir $image_dir --model_file $model_file --out_dir $out_dir

Para el sistema Windows, reemplace $image_dir, $model_file, $out_dir y otras variables con los valores de variable correspondientes, como

# 测试图片(Windows系统)
python demo.py --image_dir data/test_image --model_file data/pretrained/mobilenet_v2_1.0_224_224_CrossEntropyLoss_20230629161618/model/best_model_045_95.5607.pth --out_dir output/

  • archivo de video de prueba
# 测试视频文件(Linux系统)
video_file="data/video-test.mp4" # 测试视频文件,如*.mp4,*.avi等
model_file="data/pretrained/mobilenet_v2_1.0_224_224_CrossEntropyLoss_20230629161618/model/best_model_045_95.5607.pth" # 模型文件
out_dir="output/" # 保存检测结果
python demo.py --video_file $video_file --model_file $model_file --out_dir $out_dir
# 测试视频文件(Windows系统)
python demo.py --video_file data/video-test.mp4 --model_file data/pretrained/mobilenet_v2_1.0_224_224_CrossEntropyLoss_20230629161618/model/best_model_045_95.5607.pth --out_dir output/

  • cámara de prueba
# 测试摄像头(Linux系统)
video_file=0 # 测试摄像头ID
model_file="data/pretrained/mobilenet_v2_1.0_224_224_CrossEntropyLoss_20230629161618/model/best_model_045_95.5607.pth" # 模型文件
out_dir="output/" # 保存检测结果
python demo.py --video_file $video_file --model_file $model_file --out_dir $out_dir
# 测试摄像头(Windows系统)
python demo.py --video_file 0 --model_file data/pretrained/mobilenet_v2_1.0_224_224_CrossEntropyLoss_20230629161618/model/best_model_045_95.5607.pth  --out_dir output/

La siguiente es una demostración del efecto de la detección e identificación de fumadores (tabaquismo):

 

(6) Algunas sugerencias de optimización

 Si desea mejorar aún más el rendimiento del modelo, puede probar:

  1. Aumente los datos de muestra de capacitación: se recomienda recopilar datos relevantes de acuerdo con sus propios escenarios comerciales, como recopilar los mismos datos de fumadores y no fumadores, para mejorar la capacidad de generalización del modelo;
  2. Use un modelo con una mayor cantidad de parámetros: este tutorial usa el modelo mobilenet_v2, que es un modelo de clasificación relativamente liviano. Se usa un modelo más grande (como resnet50). Teóricamente, su precisión es mayor, pero la velocidad de inferencia también es más lenta.
  3. Pruebe diferentes combinaciones de aumentos de datos para el entrenamiento
  4. Aumente la mejora de datos: ya es compatible: recorte aleatorio, volteo aleatorio, rotación aleatoria, transformación de color y otros métodos de mejora de datos, puede probar métodos de mejora de datos más complejos como mixup, CutMix, etc.
  5. Balance de muestra : Los datos sin procesar de la categoría de reconocimiento de fumar no están balanceados. Los datos de muestra de la categoría no fumar son demasiados, mientras que los datos de fumar son demasiado pequeños, lo que hará que el modelo entrenado esté sesgado hacia la categoría con una gran cantidad de muestras. Se recomienda la ecualización de la muestra.
  6. Limpieza del conjunto de datos: los datos originales se han limpiado manualmente, pero todavía hay algunas muestras borrosas, de baja calidad y ambiguas; se recomienda limpiar el conjunto de datos nuevamente antes del entrenamiento, de lo contrario, afectará la precisión del reconocimiento del modelo.
  7. Ajuste de hiperparámetros: como estrategias de ajuste de la tasa de aprendizaje, optimizadores (SGD, Adam, etc.)
  8. Función de pérdida: el código de entrenamiento actual ya admite: entropía cruzada, LabelSmoothing, puede probar funciones de pérdida como FocalLoss

(7) Algunos métodos de manejo de errores en ejecución

  • El proyecto no debe contener archivos de directorio o rutas que contengan caracteres chinos, de lo contrario, habrá muchas excepciones . ! ! ! ! ! ! !

  • no se puede importar el nombre 'load_state_dict_from_url' 

Debido a algunas actualizaciones de versión, algunas funciones de la interfaz no estarán disponibles, asegúrese de que la versión corresponda

antorcha == 1.7.1

antorchavisión==0.8.2

O el archivo python correspondiente será

from torchvision.models.resnet import model_urls, load_state_dict_from_url

cambie a:

from torch.hub import load_state_dict_from_url
model_urls = {
    'mobilenet_v2': 'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth',
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
    'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth',
    'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth',
    'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth',
    'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth',
}

5. Descarga del código fuente del proyecto (versión de Python)

Dirección de descarga del código fuente del proyecto: Pytorch realiza la detección y el reconocimiento de fumar (fumar) (incluido el conjunto de datos de fumar (fumar) y el código de capacitación)

El conjunto completo de contenido del código fuente del proyecto incluye:

  1. Proporcione conjuntos de datos de reconocimiento y clasificación de fumar (fumar): conjunto de datos de fumar y video de fumar , un total de más de 15000 imágenes. Los datos son de alta calidad y se pueden utilizar para el desarrollo de algoritmos de modelo de clasificación de elementos para el reconocimiento de fumar (fumar) de aprendizaje profundo.
  2. Proporcione el código de capacitación del modelo de clasificación de reconocimiento de fumar (fumar): train.py
  3. Proporcione el código de prueba del modelo de clasificación de reconocimiento de fumar (fumar): demo.py
  4. La demostración admite pruebas de imágenes, videos y cámaras
  5. Admite conjuntos de datos personalizados para el entrenamiento
  6. Modelos de soporte de proyectos: modelos comunes de aprendizaje profundo como resnet18, resnet34, resnet50, mobilenet_v2 y googlenet
  7. El código fuente del proyecto viene con un archivo de modelo entrenado , que puede ejecutar la prueba directamente: python demo.py
  8. Detección y reconocimiento en tiempo real en CPU/GPU de computadora común

Supongo que te gusta

Origin blog.csdn.net/guyuealian/article/details/131521338
Recomendado
Clasificación