CV / ResNet

ResNet50V2

reComputer RK3588

Clasificación de imágenes con ResNet50V2 acelerada por RKNN en reComputer RK3576 y RK3588.

63 descargas
Precisión
RKNN

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.

Desplegar
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD128:/dev/dri/renderD128 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-resnet50v2:latest \
  python3 web_classification.py --model_path model/rk3588_resnet50-v2-7.rknn --camera_id -1

API REST

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "resnet50-v2-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "resnet50-v2-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Detalles del modelo

Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.

Inicio rápido

1. Instalar Docker

Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:

bash
# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
# Aliyun
sudo sh get-docker.sh --mirror Aliyun
# systemd
sudo systemctl enable docker
sudo systemctl start docker

2. Ejecutar el proyecto (un comando y vista previa de doble modo)

Esta página se adapta de los README de ResNet50V2 en reComputer-RK-CV. El servicio ejecuta clasificación ImageNet en la NPU Rockchip y ofrece interfaces de navegador, MJPEG, comprobación de estado y REST.

Información del modelo

PropiedadValor
TareaClasificación de imágenes
EntradaImagen RGB de 224 x 224
SalidaEtiquetas ImageNet Top-K y puntuaciones de confianza configurables
Modelo RK3576model/rk3576_resnet50-v2-7.rknn
Modelo RK3588model/rk3588_resnet50-v2-7.rknn
Etiquetasmodel/synset.txt

Paso A: Descargar las imágenes

bash
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-resnet50v2:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-resnet50v2:latest

Paso B: Ejecutar con un clic

Para RK3576:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD128:/dev/dri/renderD128 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-resnet50v2:latest \
  python3 web_classification.py \
  --model_path model/rk3576_resnet50-v2-7.rknn --camera_id -1

Para RK3588:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD128:/dev/dri/renderD128 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-resnet50v2:latest \
  python3 web_classification.py \
  --model_path model/rk3588_resnet50-v2-7.rknn --camera_id -1

Abra http://<BOARD_IP>:8000 para la página web o http://<BOARD_IP>:8000/docs para OpenAPI.


🔌 Documentación de la API

1. Interfaz de inferencia del modelo (Predict)

Endpoint: POST /api/models/resnet50v2/predict

Parámetros de solicitud (Multipart/Form-Data):

Los campos opcionales son file, video, timestamp, conf y topk; topk admite de 1 a 20 y conf de 0.0 a 1.0. Sin carga se usa la fuente de vídeo activa.

Ejemplos de uso:

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/resnet50v2/predict" \
  -F "file=@dog_224x224.jpg" -F "topk=5" -F "conf=0.01"
bash
curl -X POST "http://<BOARD_IP>:8000/api/models/resnet50v2/predict" \
  -F "video=@test.mp4" -F "timestamp=5.5" -F "topk=3"

Formato de respuesta (JSON):

json
{
  "success": true,
  "model": "resnet50v2",
  "source": "uploaded image",
  "predictions": [
    {"class": "n02099601 golden retriever", "confidence": 0.89}
  ],
  "image": {"width": 224, "height": 224}
}

2. Interfaz de configuración del sistema (Config)

GET /api/config devuelve conf_thresh; actualícelo mediante JSON con POST /api/config. El conf de la solicitud tiene prioridad.

EndpointFinalidad
GET /api/healthServicio, plataforma, modelo y disponibilidad.
GET /api/video_feedVista previa MJPEG anotada.
POST /api/video/uploadSubir una imagen o un MP4.
POST /api/video/analyzeAnalizar un filename subido.
GET /api/video/statusProgreso del procesamiento y errores.
GET /api/video/listArchivos subidos y generados.
GET /api/video/download/{filename}Descargar un resultado.

3. Argumentos de línea de comandos

La aplicación acepta una imagen subida, un fotograma seleccionado de un MP4 subido, un vídeo local en bucle o un fotograma de cámara.

ArgumentoPredeterminadoDescripción
--model_pathObligatorioModelo RKNN seleccionado para el SoC de destino.
--camera_id1Índice de cámara; use -1 para el modo de solo carga.
--video_pathNingunoRuta del MP4 local; prevalece sobre la cámara.
--host0.0.0.0Dirección de escucha de FastAPI.
--port8000Puerto del servicio.

Asigne /dev/videoN al contenedor al seleccionar la cámara N.


Interfaz de vídeo en tiempo real (Video Feed)

Obtenga el último flujo MJPEG anotado para la vista previa en el navegador:

  • Endpoint: GET /api/video_feed
  • Ejemplo de uso: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Guía para desarrolladores (recomendaciones de producción)

Sustitución del modelo

El runtime redimensiona la entrada a 224 x 224, convierte BGR a RGB, aplica softmax y filtra los resultados Top-K. Un modelo de sustitución debe conservar la disposición de entrada, normalización, orden de canales y formato de salida previstos. Actualice synset.txt si cambia el conjunto de clases. Los archivos se almacenan en workspace/; defina RK_CV_WORKSPACE para cambiar esa ubicación.

Compilar localmente

bash
docker build -f docker/rk3576/resnet50v2.dockerfile \
  -t rk3576-resnet50v2:local src/rk3576_resnet50v2

docker build -f docker/rk3588/resnet50v2.dockerfile \
  -t rk3588-resnet50v2:local src/rk3588_resnet50v2

Entradas y salidas

Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.