AI assistenza alla guida con OpenVINO

Scopri come OpenVINO™ di Intel rivoluziona l'assistenza alla guida con AI avanzata, offrendo segmentazione delle immagini e il rilevamento dei segnali stradali.

AI assistenza alla guida con OpenVINO

L'evoluzione della tecnologia ha introdotto l'intelligenza artificiale (AI) in molte aree, tra cui l'assistenza alla guida. OpenVINO™, sviluppato da Intel, è uno strumento chiave in questo dominio. Qui vi illustro come l'AI e OpenVINO possono migliorare la sicurezza e l'efficienza dei sistemi di assistenza alla guida.

Segmentazione con OpenVINO

Uno degli aspetti chiave dell'assistenza alla guida è la segmentazione delle immagini. Nel contesto del tutorial presentato, viene utilizzato un modello pre-addestrato chiamato road-segmentation-adas-0001 dal repository Open Model Zoo. Questo modello, sviluppato per servizi di assistenza alla guida avanzata (ADAS), è in grado di riconoscere quattro classi: sfondo, strada, bordo e segnaletica.

Open Model Zoo e OpenVINO

L'Open Model Zoo è un repository che include modelli di deep learning ottimizzati e una serie di demo per accelerare lo sviluppo di applicazioni ad alte prestazioni basate sull'inferenza di deep learning. L'utilizzo di questi modelli pre-addestrati può significativamente accelerare il processo di sviluppo e di produzione, evitando il dispendioso e lungo processo di addestramento da zero.

Tecnologie di assistenza alla guida

Il sistema di assistenza alla guida tipico utilizza varie tecnologie sottostanti del metodo di Deep Learning in intelligenza artificiale, tra cui:

  1. Un sistema di visione computerizzata in grado di rilevare automaticamente i sintomi tipici della sonnolenza in uno streaming video in tempo reale, allertando l'autista quando sembra assonnato.
  2. Un modello avanzato di rilevamento dei segnali stradali, che funziona su frame di telecamera utilizzando SSD.
  3. La rimozione delle striature di pioggia dalle immagini con l'aiuto di reti neurali convoluzionali profonde (CNN) per la riconoscimento delle immagini e l'elaborazione dei dati dei pixel.

Inference con OpenVINO Runtime

OpenVINO Runtime è un set di librerie C++ con binding C e Python. Esso fornisce un'API comune per fornire soluzioni di inferenza sulla piattaforma desiderata. Questo runtime consente di leggere modelli da PyTorch, TensorFlow, TensorFlow Lite, ONNX e PaddlePaddle e di eseguirli sui dispositivi preferiti. OpenVINO offre anche la possibilità di convertire questi modelli nel formato IR (Intermediate Representation) di OpenVINO™ per massimizzare le prestazioni.

Notare che i modelli TensorFlow possono essere eseguiti utilizzando la funzionalità torch.compile, così come i modi standard di conversione di TensorFlow o leggendoli direttamente.

L'architettura plugin di OpenVINO Runtime consente implementazioni specifiche per hardware Intel® come CPU, GPU, GNA, ecc.

Esempio di codice che utilizza OpenVINO

import cv2
import matplotlib.pyplot as plt
import numpy as np
import sys
from openvino.runtime import Core

sys.path.append("../utils")
from notebook_utils import segmentation_map_to_image

ie = Core()

model = ie.read_model(model="model/road-segmentation-adas-0001.xml")
compiled_model = ie.compile_model(model=model, device_name="CPU")

input_layer_ir = compiled_model.input(0)
output_layer_ir = compiled_model.output(0)

# The segmentation network expects images in BGR format.
image = cv2.imread("../data/image/strada2.jpg")

rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_h, image_w, _ = image.shape

# N,C,H,W = batch size, number of channels, height, width.
N, C, H, W = input_layer_ir.shape

# OpenCV resize expects the destination size as (width, height).
resized_image = cv2.resize(image, (W, H))

# Reshape to the network input shape.
input_image = np.expand_dims(
    resized_image.transpose(2, 0, 1), 0
)  
plt.imshow(rgb_image)

# Run the inference.
result = compiled_model([input_image])[output_layer_ir]

# Prepare data for visualization.
segmentation_mask = np.argmax(result, axis=1)
plt.imshow(segmentation_mask.transpose(1, 2, 0))
# Define colormap, each color represents a class.
colormap = np.array([[68, 1, 84], [48, 103, 141], [53, 183, 120], [199, 216, 52]])

# Define the transparency of the segmentation mask on the photo.
alpha = 0.3

# Use function from notebook_utils.py to transform mask to an RGB image.
mask = segmentation_map_to_image(segmentation_mask, colormap)
resized_mask = cv2.resize(mask, (image_w, image_h))

# Create an image with mask.
image_with_mask = cv2.addWeighted(resized_mask, alpha, rgb_image, 1 - alpha, 0)

# Define titles with images.
data = {"Base Photo": rgb_image, "Segmentation": mask, "Masked Photo": image_with_mask}

# Create a subplot to visualize images.
fig, axs = plt.subplots(1, len(data.items()), figsize=(15, 10))

# Fill the subplot.
for ax, (name, image) in zip(axs, data.items()):
    ax.axis('off')
    ax.set_title(name)
    ax.imshow(image)

# Display an image.
plt.show(fig)