CV / ResNet

ResNet50V2

reComputer RK3588

ResNet50V2 zur Bildklassifikation, beschleunigt mit RKNN auf reComputer RK3576 und RK3588.

63 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Bereitstellen
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

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

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())

Modelldetails

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Schnellstart

1. Docker installieren

Führen Sie auf dem Entwicklungsboard die folgenden Befehle aus, um Docker zu installieren:

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. Projekt ausführen (ein Befehl, Vorschau in zwei Modi)

Diese Seite basiert auf den ResNet50V2-README-Dateien in reComputer-RK-CV. Der Dienst führt ImageNet-Klassifikation auf der Rockchip-NPU aus und bietet Browser-, MJPEG-, Zustands- und REST-Schnittstellen.

Modellinformationen

EigenschaftWert
AufgabeBildklassifikation
EingabeRGB-Bild mit 224 x 224
AusgabeKonfigurierbare Top-K-ImageNet-Labels und Konfidenzwerte
RK3576-Modellmodel/rk3576_resnet50-v2-7.rknn
RK3588-Modellmodel/rk3588_resnet50-v2-7.rknn
Labelsmodel/synset.txt

Schritt A: Images abrufen

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

Schritt B: Mit einem Klick ausführen

Für 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

Für 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

Öffnen Sie http://<BOARD_IP>:8000 für die Webseite oder http://<BOARD_IP>:8000/docs für OpenAPI.


🔌 API-Dokumentation

1. Modellinferenz-Schnittstelle (Predict)

Endpunkt: POST /api/models/resnet50v2/predict

Anfrageparameter (Multipart/Form-Data):

Optionale Felder sind file, video, timestamp, conf und topk; topk reicht von 1 bis 20, conf von 0.0 bis 1.0. Ohne Upload wird die aktive Videoquelle verwendet.

Anwendungsbeispiele:

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"

Antwortformat (JSON):

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

2. Schnittstelle zur Systemkonfiguration (Config)

GET /api/config liefert conf_thresh; aktualisieren Sie ihn per JSON über POST /api/config. Anfrage-conf hat Vorrang.

EndpunktZweck
GET /api/healthDienst, Plattform, Modell und Bereitschaft.
GET /api/video_feedAnnotierte MJPEG-Vorschau.
POST /api/video/uploadBild oder MP4 hochladen.
POST /api/video/analyzeEinen hochgeladenen filename analysieren.
GET /api/video/statusVerarbeitungsfortschritt und Fehler.
GET /api/video/listHochgeladene und erzeugte Dateien.
GET /api/video/download/{filename}Ergebnis herunterladen.

3. Befehlszeilenargumente

Die Anwendung akzeptiert ein hochgeladenes Bild, einen gewählten Frame aus einer hochgeladenen MP4-Datei, ein lokales Video in Schleife oder einen Kameraframe.

ArgumentStandardBeschreibung
--model_pathErforderlichFür den Ziel-SoC ausgewähltes RKNN-Modell.
--camera_id1Kameraindex; -1 steht für reinen Uploadbetrieb.
--video_pathKein WertPfad zur lokalen MP4-Datei; überschreibt die Kamera.
--host0.0.0.0FastAPI-Listenadresse.
--port8000Dienstport.

Ordnen Sie /dev/videoN dem Container zu, wenn Kamera N gewählt wird.


Echtzeit-Videostream (Video Feed)

Rufen Sie den neuesten annotierten MJPEG-Stream für die Browservorschau ab:

  • Endpunkt: GET /api/video_feed
  • Beispiel: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Entwicklerleitfaden (Empfehlungen für den Produktionseinsatz)

Modell ersetzen

Die Laufzeit skaliert auf 224 x 224, konvertiert BGR nach RGB, wendet softmax an und filtert Top-K-Ergebnisse. Ein Ersatzmodell muss Eingabelayout, Normalisierung, Kanalreihenfolge und Ausgabeformat beibehalten. Aktualisieren Sie bei anderen Klassen synset.txt. Laufzeitdateien liegen unter workspace/; RK_CV_WORKSPACE ändert den Ort.

Lokal bauen

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

Eingaben und Ausgaben

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