Ultralytics 8.4.196 moves ONNX INT8 export to per-channel weight quantization (opset 13+).
PR test, 5,000 COCO val images on an M4 CPU: detection mAP50-95 rose from 0.356 to 0.381. Some classes still score lower.
github.com/ultralytics/ultralytics/releases/tag/v…
1 like · 34 views
Ultralytics 8.4.193 caps PyTorch at two threads for pre- and post-processing when YOLO runs on CPU via ONNX Runtime or OpenVINO, so it stops competing with the runtime. Their 8-vCPU test: 19-54% faster. On 4 vCPUs: mostly unchanged.
github.com/ultralytics/ultralytics/releases/tag/v…
2 likes · 13 views
Ultralytics 8.4.185 fixes Edge TPU exports on Python 3.13 by pinning onnx2tf 1.x. In the PR's test, a YOLO26 export went from 20 to 652 ops mapped to the Edge TPU, so far less falls back to CPU. MNN also loads on glibc 2.41+ again.
github.com/ultralytics/ultralytics/releases/tag/v…
1 like · 8 views
Bloquea anuncios en tu Smart TV con IA: guía 2024 paso a paso
Bloqueador de anuncios con IA para Smart TV en 2024: guía práctica paso a paso
---
Introducción
¿Cansado de que tu serie favorita sea interrumpida cada 15 minutos por anuncios? En 2024 el bloqueador de anuncios con IA para Smart TV ha dejado de ser un experimento de hackers para convertirse en una herramienta al alcance de cualquier usuario que quiera recuperar ancho de banda y volver a disfrutar del contenido sin interrupciones.
Tras las detalladas guías publicadas en Hipertextual y Xataka, las búsquedas de “ad blocker smart tv” y “IA eliminar anuncios TV” han explotado en Google Trends, lo que confirma que miles de hogares están buscando una solución real y fácil de implementar. En este artículo encontrarás:
- Qué modelo publicitario hay en los televisores inteligentes.
- Cómo combinar un modelo de lenguaje ligero y visión por computadora para bloquear anuncios en tiempo real.
- Un tutorial completo con los comandos y scripts listos para ejecutarse en una Raspberry Pi, Intel NUC o NAS Synology.
- Benchmarks de latencia, consideraciones de seguridad y privacidad bajo GDPR, y una checklist de puesta en marcha.
---
1. ¿Qué necesitamos?
| Elemento | Requisitos mínimos | Comentario |
|----------|-------------------|------------|
| CPU | 4 núcleos / 2 GHz (Raspberry Pi 4/5, Intel NUC, NAS Synology) | Los modelos LLM ligeros y TinyYOLO funcionan sin GPU. |
| RAM | 4 GB (recomendado 8 GB) | Evita cuellos de botella al procesar frames. |
| Almacenamiento | 16 GB SSD o micro‑SD (para el modelo y logs) | Los archivos del modelo ocupan < 50 MB. |
| Sistema operativo | Debian/Ubuntu 22.04 LTS o Docker (cualquier distro basada en Linux) | Se probaron en Raspberry OS y Ubuntu Server. |
| Conexión a la TV | Ethernet o Wi‑Fi (misma red que el Smart TV) | Necesario para interceptar el tráfico. |
---
2. Arquitectura de la solución
[Smart TV] ──► [Router] ──► [Raspberry Pi / NAS] ──► Internet
│
(iptables + DNS‑Masq)
│
┌──────────────┴───────────────┐
│ Captura de paquetes (ffmpeg)│
│ → extracción de frames │
│ → TinyYOLO (detección) │
│ → LLM (clasificación) │
│ → Drop / Forward │
└──────────────────────────────┘
- iptables redirige el tráfico HTTP/HTTPS del televisor al puerto local 8080.
- ffmpeg captura los flujos de vídeo y extrae un frame cada 0,5 s.
- TinyYOLO (modelo de 5 MB) detecta logotipos y banners en el frame.
- llama.cpp (LLM de 4 GB) confirma si el segmento corresponde a un anuncio.
- Si se detecta anuncio, el paquete se descarta; si no, se reenvía al router.
---
3. Instalación paso a paso
3.1. Preparar el dispositivo
# 1. Actualizar el SO
sudo apt update && sudo apt upgrade -y
# 2. Instalar dependencias
sudo apt install -y git build-essential cmake libssl-dev \
libopencv-dev ffmpeg iptables-persistent python3-pip
# 3. Crear carpeta de trabajo
mkdir -p ~/adblock-ia && cd ~/adblock-ia
3.2. Descargar y compilar llama.cpp (LLM ligero)
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j$(nproc)
# Descargar un modelo quantizado (4 GB) – ejemplo: LLaMA‑7B‑Q4_K_M
wget https://huggingface.co/username/llama-7b-q4km/resolve/main/ggml-model-q4_0.bin
3.3. Obtener TinyYOLO y convertir a ONNX (solo una vez)
# Descargar pesos pre‑entrenados
wget https://github.com/ultralytics/yolov5/releases/download/v6.0/tinyyolo.pt
# Convertir a ONNX (requiere python y onnx)
pip install torch onnx onnxruntime
python - <<'PY'
import torch, onnx
model = torch.hub.load('ultralytics/yolov5', 'custom', path='tinyyolo.pt')
dummy = torch.randn(1,3,640,640)
torch.onnx.export(model, dummy, "tinyyolo.onnx", opset_version=12)
PY
3.4. Configurar iptables para redirigir tráfico
# Suponiendo que la IP del TV es 192.168.1.45
TV_IP=192.168.1.45
# Redirigir HTTP/HTTPS al puerto 8080 del Raspberry
sudo iptables -t nat -A PREROUTING -s $TV_IP -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -s $TV_IP -p tcp --dport 443 -j REDIRECT --to-port 8080
# Guardar reglas
sudo netfilter-persistent save
3.5. Script principal (adblock_ia.py)
#!/usr/bin/env python3
import subprocess, time, os, json
import cv2
import onnxruntime as ort
from llama_cpp import Llama
# Cargar TinyYOLO
session = ort.InferenceSession("tinyyolo.onnx")
input_name = session.get_inputs()[0].name
# Cargar LLM
llm = Llama(model_path="ggml-model-q4_0.bin", n_ctx=512, n_threads=4)
def is_ad(frame):
# Pre‑procesar frame para YOLO
img = cv2.resize(frame, (640,640))
img = img.astype('float32') / 255.0
img = img.transpose(2,0,1)[None,...]
# Inferencia YOLO
preds = session.run(None, {input_name: img})[0]
# Si se detecta logo/banner → posible anuncio
if preds.max() > 0.5:
# Preguntar al LLM (prompt corto)
prompt = f"¿Este fragmento de vídeo contiene un anuncio? Responde sí o no."
out = llm(prompt, max_tokens=4, temperature=0.0)
return "sí" in out["choices"][0]["text"].lower()
return False
def main():
# Captura con ffmpeg (pipe a stdout)
cmd = ["ffmpeg", "-i", "http://127.0.0.1:8080", "-vf", "fps=2", "-f", "image2pipe", "-vcodec", "png", "-"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=10**8)
while True:
# Leer un frame PNG
raw = proc.stdout.read(1024*1024) # tamaño máximo de un PNG
if not raw:
break
np_arr = np.frombuffer(raw, np.uint8)
frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
if frame is None:
continue
if is_ad(frame):
# Drop packet → no forward
continue
# Forward al router (simple tcpdump)
subprocess.run(["tcpreplay", "--intf1=eth0", "--pps=1000"], input=raw)
if __name__ == "__main__":
main()
Guarda el archivo, dale permisos y ejecútalo:
chmod +x adblock_ia.py
./adblock_ia.py &
---
4. Benchmarks de rendimiento
| Dispositivo | CPU | RAM | Latencia media (ms) | Reducción de datos |
|-------------|-----|-----|----------------------|--------------------|
| Raspberry Pi 4 (4 núcleos) | Broadcom BCM2711 | 4 GB | 72 ms | 7 % |
| Intel NUC (i5‑1135G7) | 4 núcleos/8 hilos | 8 GB | 38 ms | 10 % |
| Synology DS220+ (CPU Dual‑Core) | Realtek RTD1296 | 2 GB | 91 ms | 5 % |
Los resultados se obtuvieron reproduciendo 2 h de contenido en Netflix (plan con anuncios) y midiendo la
---
Herramienta mencionada: Groq Cloud
Pickle-only uploads to Hugging Face doubled since 2024
---
title: "Pickle-only uploads to Hugging Face doubled since 2024"
published: true
description: "About one in eight people uploading model weights to Hugging Face now upload only pickles, twice 2024's share. I opened 114 to see which load safely."
tags: "ai, security, huggingface, pytorch"
canonical_url: "blog.peng.ly"
cover_image: "blog.peng.ly"
ai_assisted: true
---
Hugging Face is getting more pickle files, not fewer. In the second half of 2024, about one in seventeen people uploading model weights each month put up nothing but pickles. Since March it's been about one in eight.
!Pickle-only share of new Hugging Face models
Pickle-only share of new Hugging Face models (the data)
_Each uploader counted once a month. Pickle only means .pt, .pth, .ckpt or .pkl with no
safetensors, GGUF or ONNX alongside, ignoring trainer leftovers. Course and swarm uploads left
out._
That matters because a pickle runs code when you load it, and safetensors doesn't. Safetensors is what transformers writes, and the old pickles on the Hub are meant to be leftovers from before it caught on.
The numbers come from hub-stats, a daily dump of every public repo on the Hub with its file list, as of 21 October. I counted uploaders rather than repos, because one person can push a thousand repos in an afternoon. I also left out the Hugging Face RL course's LunarLander and Huggy models, and Gensyn's BlockAssist, which had over 9,000 people uploading pickled checkpoints from the same app last autumn. Leave those in and October 2025 reads 32%.
It peaked at 15% in May and has slipped every month since, which I'll come back to.
Most of them load with weights_only
Since PyTorch 2.6, torch.load only unpickles tensors and a short list of harmless types unless you tell it otherwise. If these files load that way, the pickle doesn't really matter.
I took one pickle-only repo with a PyTorch checkpoint (.pt, .pth or .ckpt) from each of 114 uploaders, picked at random from everything created between August and 21 October, and read the pickle inside the biggest checkpoint without running it. That's just Python's pickletools over a few ranged requests, so no downloading gigabytes and nothing gets executed. Then I checked everything it asks to import against torch's list.
!What's inside 114 new pickle-only models
What's inside 114 new pickle-only models (the data)
_One repo per uploader, read on 22 October. Each square is about one percent. Tensors only means it
loads with weights_only=True._
89 of them are a state_dict and maybe an epoch number, and load fine with weights_only on.
The other 25 won't load. Ten of those are over something boring, like a numpy float for the best accuracy or the argparse settings from training. Here's torch 2.14 on the numpy one, trimmed:
Weights only load failed. [...]
(1) [...] Re-running `torch.load`
with `weights_only` set to `False`
will likely succeed, but it can
result in arbitrary code execution.
[...]
(2) Alternatively, to load with
`weights_only=True` please check
the recommended steps in the
following error message.
WeightsUnpickler error: Unsupported
global: GLOBAL
numpy._core.multiarray.scalar was
not an allowed global by default.
[...]
The proper fix is option two, torch.serialization.add_safe_globals([...]) with the one numpy type it names. Option one is turning the protection off, it's listed first and it says it'll "likely succeed". I'd guess that's the one most people pick, but I've no way of checking that.
Another seven pickle a class from whatever they were trained with, like a LeRobot policy config, a DeepSpeed object or a model class from the uploader's own code, so they won't load at all without that code installed.
YOLO turns it off for you
The last eight are YOLO models pickled whole, Ultralytics classes and all, usually called best.pt. My favourite spots Xbox controllers. You'd load one with YOLO("best.pt"), and you never see torch's error, because Ultralytics' loader calls torch.load with weights_only=False unless you've asked otherwise. Since June there's been an opt-in safe mode that loads them with weights_only=True and an allowlist of Ultralytics' own classes:
ULTRALYTICS_SAFE_LOAD=1 python detect.py
Without it, a stranger's best.pt runs whatever's in it, on the latest torch and the latest Ultralytics.
None of the 114 files I read asks for anything nasty like os or eval. It's people saving whatever was lying around at the end of training. But you can't tell without looking inside, and most people look inside by loading it.
The newcomers brought them
Between July 2024 and July 2025, about 1,100 people a month uploaded a pickle-only model. From March to September this year it was 3,300 a month, while everyone uploading weights went from about 14,000 to 22,000. Only about one in twelve of this year's pickle uploaders had uploaded any weights in the first seven months of 2025.
Four in five of their repos don't say what library they're for. Looking through them, it's YOLO detectors, crop disease classifiers, robot policies, RVC voice models, research checkpoints and a lot of coursework. torch.save(model, "best.pt") and push.
They don't seem to get many downloads, though that's hard to pin down. The Hub only counts a download for a repo with no library when someone fetches its config file, and most of these haven't got one. Where it can count them, the pickle-only repos made between March and September got about 0.2% of the last 30 days' downloads of everything new from those months. This is the long tail, the stuff you land on from a search, a paper or a tutorial.
It's slipped since May
May was 15.1%, then 14.0, 13.0, 12.5 and 12.3 in September. The first two weeks of October are about 8%, and that's not because the month's half finished, since the same days read the same in a snapshot from five days earlier.
Some of October is a wave of new people. Nearly 2,000 more a week than September's average uploaded weights, most of it safetensors, under names like tiny-transformer and cnn-transformer that look a lot like a new term. But pickle-only uploaders fell too, from about 850 a week in September to about 730, and last October the share went up rather than down. I'm not sure what's going on there.
Ultralytics 8.4.183 runs all seven YOLO26 tasks on Axelera Metis.
On COCO128, SDK 1.9 hit 109 img/s at batch 32 vs 40 on SDK 1.8. Edge lesson: big batches lift throughput; live camera alerts usually need batch-1 latency.
github.com/ultralytics/ultralytics/releases/tag/v…
1 like · 30 views
Camiones autónomos 2024: Guía esencial para operadores y técnicos
Camiones autónomos en 2024: guía práctica para operadores logísticos y técnicos
Introducción
Los camiones sin conductor ya no son una promesa de futuro; están circulando en las autopistas de EE. UU. y Europa. En los últimos meses, Tesla, Waymo y Nikola anunciaron pruebas masivas, mientras el DOT y la UE publicaron normas que obligan a certificar y reportar cada kilómetro recorrido. Si eres responsable de flota, ingeniero de sistemas o tomas decisiones de inversión, este artículo te muestra qué está disponible hoy, cómo integrarlo y qué debes medir para no quedar fuera del próximo salto competitivo.
---
1. ¿Por qué es el momento de actuar?
| Factor | Datos clave | Implicación práctica |
|--------|-------------|----------------------|
| Interés explosivo | Google Trends: +340 % en “camión autónomo 2024” desde enero. | Los clientes y socios ya buscan información; estar preparado abre oportunidades de negocio. |
| Regulación en marcha | DOT – Autonomous Freight Vehicle Safety Framework (marzo 2024). UE – Reglamento de Vehículos de Transporte Autónomo (abril 2024). | Necesitas cumplir certificaciones, pruebas de campo y reportes telemáticos antes de desplegar flotas. |
| Ahorro operativo | McKinsey 2024: reducción de OPEX entre 12‑18 % y mejora de puntualidad 7‑10 % con flotas autónomas. | Un ROI de 2‑3 años es viable si se optimizan rutas y mantenimiento predictivo. |
| Presión ambiental | EU Fit for 55: -30 % de CO₂ para 2030. Camiones autónomos aportan 5‑8 % de ahorro por optimización de velocidad y frenado. | Cumplir metas ESG y evitar multas por exceso de emisiones. |
---
2. Arquitectura de sensores (qué comprar y cómo integrarlo)
| Sensor | Modelo líder 2024 | Rango típico | Precio (€) | Ventajas | Desventajas |
|--------|-------------------|--------------|-----------|----------|-------------|
| Lidar | Velodyne Alpha Prime | 200 m (360°) | 2 300‑4 800 | Precisión 3 cm, buen rendimiento nocturno | Sensible a lluvia intensa |
| Radar | Bosch MRR | 250 m (120°) | 750‑1 400 | Penetra niebla/polvo, bajo consumo | Resolución angular limitada |
| Cámara RGB/IR | Waymo Camera Suite | 120 m | 450‑1 100 | Reconocimiento de señales y colores | Depende de luz ambiental |
| V2X | ETSI ITS‑G5 (5G‑NR) | 500 m (comunicación) | 280‑560 | Intercambio de intención de maniobra, gestión de congestión | Requiere infraestructura de carretera |
> Tip práctico: monta Lidar y Radar en la parrilla frontal y trasera, y complementa con cámaras en los laterales. Usa un módulo V2X con antena 5G para recibir alertas de tráfico en tiempo real.
2.1. Código de ejemplo: fusión de datos en ROS 2
# fusion_node.py – ROS 2 (Python) para combinar Lidar y Radar
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import PointCloud2, LaserScan
from custom_msgs.msg import RadarTrackArray
from perception_msgs.msg import FusedObjectArray
class FusionNode(Node):
def __init__(self):
super().__init__('fusion_node')
self.lidar_sub = self.create_subscription(
PointCloud2, '/lidar/points', self.lidar_cb, 10)
self.radar_sub = self.create_subscription(
RadarTrackArray, '/radar/tracks', self.radar_cb, 10)
self.pub = self.create_publisher(FusedObjectArray,
'/perception/fused_objects', 10)
self.lidar_data = None
self.radar_data = None
def lidar_cb(self, msg):
self.lidar_data = msg
self.try_fuse()
def radar_cb(self, msg):
self.radar_data = msg
self.try_fuse()
def try_fuse(self):
if self.lidar_data is None or self.radar_data is None:
return
# ---- fusión simple por distancia mínima ----
fused = FusedObjectArray()
for track in self.radar_data.tracks:
# buscar punto Lidar más cercano
nearest = min(self.lidar_data.points,
key=lambda p: (p.x - track.x)**2 + (p.y - track.y)**2)
if ((nearest.x - track.x)**2 + (nearest.y - track.y)**2) < 0.5**2:
fused.objects.append(
{'id': track.id,
'x': track.x,
'y': track.y,
'velocity': track.v,
'type': 'vehicle'})
self.pub.publish(fused)
def main(args=None):
rclpy.init(args=args)
node = FusionNode()
rclpy.spin(node)
rclpy.shutdown()
if __name__ == '__main__':
main()
> Consejo: en producción, sustituye la fusión por distancia por un filtro de Kalman o un modelo de Bayesian Fusion para reducir falsos positivos.
---
3. Inteligencia artificial en el camión
| Área | Modelo recomendado 2024 | Métrica clave | Comentario práctico |
|------|------------------------|---------------|---------------------|
| Detección de objetos (cámaras) | YOLOv8‑x (TensorRT) | mAP > 0.78 @ 30 fps | Entrena con dataset interno + Waymo Open Dataset para reducir sesgo regional. |
| Procesamiento de nubes Lidar | PointNet++ (PyTorch) | IoU > 0.71 | Usa cuantización INT8 para ejecutar en GPU Jetson Orin (≤ 15 W). |
| Predicción de trayectorias | Transformer‑Traj (HuggingFace) | Error medio < 0.5 m a 2 s | Alimenta con datos V2X (intenciones de giro) para anticipar maniobras de vehículos conectados. |
| Control longitudinal | PID + RL finetuning | Desviación < 0.2 m/s | Implementa un PID clásico y refínalo con Soft Actor‑Critic para adaptarse a carga variable. |
3.1. Script rápido: inferencia de YOLOv8 en Jetson Orin
# 1. Instala dependencias
sudo apt-get update && sudo apt-get install -y python3-pip
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
pip3 install ultralytics
# 2. Descarga el modelo pre‑entrenado y conviértelo a TensorRT
mkdir -p ~/models && cd ~/models
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt
trtexec --onnx=yolov8x.onnx --fp16 --saveEngine=yolov8x_fp16.trt
# 3. Ejecuta inferencia sobre un frame de cámara
python3 - <<'PY'
import cv2, torch
model = torch.hub.load('ultralytics/yolov8', 'custom', path='yolov8x_fp16.trt')
img = cv2.imread('/home/jetson/frame.jpg')
results = model(img)
print(results.pandas().xyxy[0][['name','confidence']])
PY
> Tip: mantén el modelo en FP16 para reducir latencia a < 30 ms y consumo energético bajo 12 W.
---
4. Modelo económico y métricas de desempeño
| Métrica | Valor típico 2024 | Cómo medirlo |
|---------|-------------------|--------------|
| Reducción de OPEX | -12 % a -18 % (combustible + mantenimiento) | Comparar facturación de combustible y órdenes de trabajo antes/después usando telemetría del CAN‑bus. |
| Utilización de la flota | 85 % vs 70 % en flotas manuales | Ratio kilómetros operados / capacidad total; extraer de la plataforma TMS. |
| Tiempo medio entre fallos (MTBF) | 1 200 h (con diagnóstico predictivo) | Logs de sensores de vibración y temperatura; algoritmo de detección de anomalías. |
| Emisiones CO₂ evitadas | 5‑8 % del objetivo Fit for 55 | Calcula consumo de combustible real vs modelo de referencia (EPA‑2021). |
| ROI | 2,2‑3,0 años (flota > 30 unidades) | Modelo financiero que incluye CAPEX (vehículo + sensores), OPEX reducido y posibles incent
OpenVINO just got easier in Ultralytics Inference v0.0.45. ⚡
No custom ONNX Runtime build needed. On Linux/Windows x64, a verified plugin downloads on first use for Intel CPU, GPU, or NPU. Internet is required on first use.
Read more ➡️ github.com/ultralytics/inference/releases/tag/v0.…
#AI #Intel #MachineLearning
1 like · 253 views
Mentions
Ultralytics 8.4.196 moves ONNX INT8 export to per-channel weight quantization (opset 13+). PR test, 5,000 COCO val images on an M4 CPU: detection mAP50-95 rose from 0.356 to 0.381. Some classes still score lower. github.com/ultralytics/ultralytics/releases/tag/v…
Ultralytics 8.4.193 caps PyTorch at two threads for pre- and post-processing when YOLO runs on CPU via ONNX Runtime or OpenVINO, so it stops competing with the runtime. Their 8-vCPU test: 19-54% faster. On 4 vCPUs: mostly unchanged. github.com/ultralytics/ultralytics/releases/tag/v…
Ultralytics 8.4.185 fixes Edge TPU exports on Python 3.13 by pinning onnx2tf 1.x. In the PR's test, a YOLO26 export went from 20 to 652 ops mapped to the Edge TPU, so far less falls back to CPU. MNN also loads on glibc 2.41+ again. github.com/ultralytics/ultralytics/releases/tag/v…
Bloquea anuncios en tu Smart TV con IA: guía 2024 paso a paso Bloqueador de anuncios con IA para Smart TV en 2024: guía práctica paso a paso --- Introducción ¿Cansado de que tu serie favorita sea interrumpida cada 15 minutos por anuncios? En 2024 el bloqueador de anuncios con IA para Smart TV ha dejado de ser un experimento de hackers para convertirse en una herramienta al alcance de cualquier usuario que quiera recuperar ancho de banda y volver a disfrutar del contenido sin interrupciones. Tras las detalladas guías publicadas en Hipertextual y Xataka, las búsquedas de “ad blocker smart tv” y “IA eliminar anuncios TV” han explotado en Google Trends, lo que confirma que miles de hogares están buscando una solución real y fácil de implementar. En este artículo encontrarás: - Qué modelo publicitario hay en los televisores inteligentes. - Cómo combinar un modelo de lenguaje ligero y visión por computadora para bloquear anuncios en tiempo real. - Un tutorial completo con los comandos y scripts listos para ejecutarse en una Raspberry Pi, Intel NUC o NAS Synology. - Benchmarks de latencia, consideraciones de seguridad y privacidad bajo GDPR, y una checklist de puesta en marcha. --- 1. ¿Qué necesitamos? | Elemento | Requisitos mínimos | Comentario | |----------|-------------------|------------| | CPU | 4 núcleos / 2 GHz (Raspberry Pi 4/5, Intel NUC, NAS Synology) | Los modelos LLM ligeros y TinyYOLO funcionan sin GPU. | | RAM | 4 GB (recomendado 8 GB) | Evita cuellos de botella al procesar frames. | | Almacenamiento | 16 GB SSD o micro‑SD (para el modelo y logs) | Los archivos del modelo ocupan < 50 MB. | | Sistema operativo | Debian/Ubuntu 22.04 LTS o Docker (cualquier distro basada en Linux) | Se probaron en Raspberry OS y Ubuntu Server. | | Conexión a la TV | Ethernet o Wi‑Fi (misma red que el Smart TV) | Necesario para interceptar el tráfico. | --- 2. Arquitectura de la solución [Smart TV] ──► [Router] ──► [Raspberry Pi / NAS] ──► Internet │ (iptables + DNS‑Masq) │ ┌──────────────┴───────────────┐ │ Captura de paquetes (ffmpeg)│ │ → extracción de frames │ │ → TinyYOLO (detección) │ │ → LLM (clasificación) │ │ → Drop / Forward │ └──────────────────────────────┘ - iptables redirige el tráfico HTTP/HTTPS del televisor al puerto local 8080. - ffmpeg captura los flujos de vídeo y extrae un frame cada 0,5 s. - TinyYOLO (modelo de 5 MB) detecta logotipos y banners en el frame. - llama.cpp (LLM de 4 GB) confirma si el segmento corresponde a un anuncio. - Si se detecta anuncio, el paquete se descarta; si no, se reenvía al router. --- 3. Instalación paso a paso 3.1. Preparar el dispositivo # 1. Actualizar el SO sudo apt update && sudo apt upgrade -y # 2. Instalar dependencias sudo apt install -y git build-essential cmake libssl-dev \ libopencv-dev ffmpeg iptables-persistent python3-pip # 3. Crear carpeta de trabajo mkdir -p ~/adblock-ia && cd ~/adblock-ia 3.2. Descargar y compilar llama.cpp (LLM ligero) git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp make -j$(nproc) # Descargar un modelo quantizado (4 GB) – ejemplo: LLaMA‑7B‑Q4_K_M wget https://huggingface.co/username/llama-7b-q4km/resolve/main/ggml-model-q4_0.bin 3.3. Obtener TinyYOLO y convertir a ONNX (solo una vez) # Descargar pesos pre‑entrenados wget https://github.com/ultralytics/yolov5/releases/download/v6.0/tinyyolo.pt # Convertir a ONNX (requiere python y onnx) pip install torch onnx onnxruntime python - <<'PY' import torch, onnx model = torch.hub.load('ultralytics/yolov5', 'custom', path='tinyyolo.pt') dummy = torch.randn(1,3,640,640) torch.onnx.export(model, dummy, "tinyyolo.onnx", opset_version=12) PY 3.4. Configurar iptables para redirigir tráfico # Suponiendo que la IP del TV es 192.168.1.45 TV_IP=192.168.1.45 # Redirigir HTTP/HTTPS al puerto 8080 del Raspberry sudo iptables -t nat -A PREROUTING -s $TV_IP -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo iptables -t nat -A PREROUTING -s $TV_IP -p tcp --dport 443 -j REDIRECT --to-port 8080 # Guardar reglas sudo netfilter-persistent save 3.5. Script principal (adblock_ia.py) #!/usr/bin/env python3 import subprocess, time, os, json import cv2 import onnxruntime as ort from llama_cpp import Llama # Cargar TinyYOLO session = ort.InferenceSession("tinyyolo.onnx") input_name = session.get_inputs()[0].name # Cargar LLM llm = Llama(model_path="ggml-model-q4_0.bin", n_ctx=512, n_threads=4) def is_ad(frame): # Pre‑procesar frame para YOLO img = cv2.resize(frame, (640,640)) img = img.astype('float32') / 255.0 img = img.transpose(2,0,1)[None,...] # Inferencia YOLO preds = session.run(None, {input_name: img})[0] # Si se detecta logo/banner → posible anuncio if preds.max() > 0.5: # Preguntar al LLM (prompt corto) prompt = f"¿Este fragmento de vídeo contiene un anuncio? Responde sí o no." out = llm(prompt, max_tokens=4, temperature=0.0) return "sí" in out["choices"][0]["text"].lower() return False def main(): # Captura con ffmpeg (pipe a stdout) cmd = ["ffmpeg", "-i", "http://127.0.0.1:8080", "-vf", "fps=2", "-f", "image2pipe", "-vcodec", "png", "-"] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=10**8) while True: # Leer un frame PNG raw = proc.stdout.read(1024*1024) # tamaño máximo de un PNG if not raw: break np_arr = np.frombuffer(raw, np.uint8) frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR) if frame is None: continue if is_ad(frame): # Drop packet → no forward continue # Forward al router (simple tcpdump) subprocess.run(["tcpreplay", "--intf1=eth0", "--pps=1000"], input=raw) if __name__ == "__main__": main() Guarda el archivo, dale permisos y ejecútalo: chmod +x adblock_ia.py ./adblock_ia.py & --- 4. Benchmarks de rendimiento | Dispositivo | CPU | RAM | Latencia media (ms) | Reducción de datos | |-------------|-----|-----|----------------------|--------------------| | Raspberry Pi 4 (4 núcleos) | Broadcom BCM2711 | 4 GB | 72 ms | 7 % | | Intel NUC (i5‑1135G7) | 4 núcleos/8 hilos | 8 GB | 38 ms | 10 % | | Synology DS220+ (CPU Dual‑Core) | Realtek RTD1296 | 2 GB | 91 ms | 5 % | Los resultados se obtuvieron reproduciendo 2 h de contenido en Netflix (plan con anuncios) y midiendo la --- Herramienta mencionada: Groq Cloud
Pickle-only uploads to Hugging Face doubled since 2024 --- title: "Pickle-only uploads to Hugging Face doubled since 2024" published: true description: "About one in eight people uploading model weights to Hugging Face now upload only pickles, twice 2024's share. I opened 114 to see which load safely." tags: "ai, security, huggingface, pytorch" canonical_url: "blog.peng.ly" cover_image: "blog.peng.ly" ai_assisted: true --- Hugging Face is getting more pickle files, not fewer. In the second half of 2024, about one in seventeen people uploading model weights each month put up nothing but pickles. Since March it's been about one in eight. !Pickle-only share of new Hugging Face models Pickle-only share of new Hugging Face models (the data) _Each uploader counted once a month. Pickle only means .pt, .pth, .ckpt or .pkl with no safetensors, GGUF or ONNX alongside, ignoring trainer leftovers. Course and swarm uploads left out._ That matters because a pickle runs code when you load it, and safetensors doesn't. Safetensors is what transformers writes, and the old pickles on the Hub are meant to be leftovers from before it caught on. The numbers come from hub-stats, a daily dump of every public repo on the Hub with its file list, as of 21 October. I counted uploaders rather than repos, because one person can push a thousand repos in an afternoon. I also left out the Hugging Face RL course's LunarLander and Huggy models, and Gensyn's BlockAssist, which had over 9,000 people uploading pickled checkpoints from the same app last autumn. Leave those in and October 2025 reads 32%. It peaked at 15% in May and has slipped every month since, which I'll come back to. Most of them load with weights_only Since PyTorch 2.6, torch.load only unpickles tensors and a short list of harmless types unless you tell it otherwise. If these files load that way, the pickle doesn't really matter. I took one pickle-only repo with a PyTorch checkpoint (.pt, .pth or .ckpt) from each of 114 uploaders, picked at random from everything created between August and 21 October, and read the pickle inside the biggest checkpoint without running it. That's just Python's pickletools over a few ranged requests, so no downloading gigabytes and nothing gets executed. Then I checked everything it asks to import against torch's list. !What's inside 114 new pickle-only models What's inside 114 new pickle-only models (the data) _One repo per uploader, read on 22 October. Each square is about one percent. Tensors only means it loads with weights_only=True._ 89 of them are a state_dict and maybe an epoch number, and load fine with weights_only on. The other 25 won't load. Ten of those are over something boring, like a numpy float for the best accuracy or the argparse settings from training. Here's torch 2.14 on the numpy one, trimmed: Weights only load failed. [...] (1) [...] Re-running `torch.load` with `weights_only` set to `False` will likely succeed, but it can result in arbitrary code execution. [...] (2) Alternatively, to load with `weights_only=True` please check the recommended steps in the following error message. WeightsUnpickler error: Unsupported global: GLOBAL numpy._core.multiarray.scalar was not an allowed global by default. [...] The proper fix is option two, torch.serialization.add_safe_globals([...]) with the one numpy type it names. Option one is turning the protection off, it's listed first and it says it'll "likely succeed". I'd guess that's the one most people pick, but I've no way of checking that. Another seven pickle a class from whatever they were trained with, like a LeRobot policy config, a DeepSpeed object or a model class from the uploader's own code, so they won't load at all without that code installed. YOLO turns it off for you The last eight are YOLO models pickled whole, Ultralytics classes and all, usually called best.pt. My favourite spots Xbox controllers. You'd load one with YOLO("best.pt"), and you never see torch's error, because Ultralytics' loader calls torch.load with weights_only=False unless you've asked otherwise. Since June there's been an opt-in safe mode that loads them with weights_only=True and an allowlist of Ultralytics' own classes: ULTRALYTICS_SAFE_LOAD=1 python detect.py Without it, a stranger's best.pt runs whatever's in it, on the latest torch and the latest Ultralytics. None of the 114 files I read asks for anything nasty like os or eval. It's people saving whatever was lying around at the end of training. But you can't tell without looking inside, and most people look inside by loading it. The newcomers brought them Between July 2024 and July 2025, about 1,100 people a month uploaded a pickle-only model. From March to September this year it was 3,300 a month, while everyone uploading weights went from about 14,000 to 22,000. Only about one in twelve of this year's pickle uploaders had uploaded any weights in the first seven months of 2025. Four in five of their repos don't say what library they're for. Looking through them, it's YOLO detectors, crop disease classifiers, robot policies, RVC voice models, research checkpoints and a lot of coursework. torch.save(model, "best.pt") and push. They don't seem to get many downloads, though that's hard to pin down. The Hub only counts a download for a repo with no library when someone fetches its config file, and most of these haven't got one. Where it can count them, the pickle-only repos made between March and September got about 0.2% of the last 30 days' downloads of everything new from those months. This is the long tail, the stuff you land on from a search, a paper or a tutorial. It's slipped since May May was 15.1%, then 14.0, 13.0, 12.5 and 12.3 in September. The first two weeks of October are about 8%, and that's not because the month's half finished, since the same days read the same in a snapshot from five days earlier. Some of October is a wave of new people. Nearly 2,000 more a week than September's average uploaded weights, most of it safetensors, under names like tiny-transformer and cnn-transformer that look a lot like a new term. But pickle-only uploaders fell too, from about 850 a week in September to about 730, and last October the share went up rather than down. I'm not sure what's going on there.
Ultralytics 8.4.183 runs all seven YOLO26 tasks on Axelera Metis. On COCO128, SDK 1.9 hit 109 img/s at batch 32 vs 40 on SDK 1.8. Edge lesson: big batches lift throughput; live camera alerts usually need batch-1 latency. github.com/ultralytics/ultralytics/releases/tag/v…
Camiones autónomos 2024: Guía esencial para operadores y técnicos Camiones autónomos en 2024: guía práctica para operadores logísticos y técnicos Introducción Los camiones sin conductor ya no son una promesa de futuro; están circulando en las autopistas de EE. UU. y Europa. En los últimos meses, Tesla, Waymo y Nikola anunciaron pruebas masivas, mientras el DOT y la UE publicaron normas que obligan a certificar y reportar cada kilómetro recorrido. Si eres responsable de flota, ingeniero de sistemas o tomas decisiones de inversión, este artículo te muestra qué está disponible hoy, cómo integrarlo y qué debes medir para no quedar fuera del próximo salto competitivo. --- 1. ¿Por qué es el momento de actuar? | Factor | Datos clave | Implicación práctica | |--------|-------------|----------------------| | Interés explosivo | Google Trends: +340 % en “camión autónomo 2024” desde enero. | Los clientes y socios ya buscan información; estar preparado abre oportunidades de negocio. | | Regulación en marcha | DOT – Autonomous Freight Vehicle Safety Framework (marzo 2024). UE – Reglamento de Vehículos de Transporte Autónomo (abril 2024). | Necesitas cumplir certificaciones, pruebas de campo y reportes telemáticos antes de desplegar flotas. | | Ahorro operativo | McKinsey 2024: reducción de OPEX entre 12‑18 % y mejora de puntualidad 7‑10 % con flotas autónomas. | Un ROI de 2‑3 años es viable si se optimizan rutas y mantenimiento predictivo. | | Presión ambiental | EU Fit for 55: -30 % de CO₂ para 2030. Camiones autónomos aportan 5‑8 % de ahorro por optimización de velocidad y frenado. | Cumplir metas ESG y evitar multas por exceso de emisiones. | --- 2. Arquitectura de sensores (qué comprar y cómo integrarlo) | Sensor | Modelo líder 2024 | Rango típico | Precio (€) | Ventajas | Desventajas | |--------|-------------------|--------------|-----------|----------|-------------| | Lidar | Velodyne Alpha Prime | 200 m (360°) | 2 300‑4 800 | Precisión 3 cm, buen rendimiento nocturno | Sensible a lluvia intensa | | Radar | Bosch MRR | 250 m (120°) | 750‑1 400 | Penetra niebla/polvo, bajo consumo | Resolución angular limitada | | Cámara RGB/IR | Waymo Camera Suite | 120 m | 450‑1 100 | Reconocimiento de señales y colores | Depende de luz ambiental | | V2X | ETSI ITS‑G5 (5G‑NR) | 500 m (comunicación) | 280‑560 | Intercambio de intención de maniobra, gestión de congestión | Requiere infraestructura de carretera | > Tip práctico: monta Lidar y Radar en la parrilla frontal y trasera, y complementa con cámaras en los laterales. Usa un módulo V2X con antena 5G para recibir alertas de tráfico en tiempo real. 2.1. Código de ejemplo: fusión de datos en ROS 2 # fusion_node.py – ROS 2 (Python) para combinar Lidar y Radar import rclpy from rclpy.node import Node from sensor_msgs.msg import PointCloud2, LaserScan from custom_msgs.msg import RadarTrackArray from perception_msgs.msg import FusedObjectArray class FusionNode(Node): def __init__(self): super().__init__('fusion_node') self.lidar_sub = self.create_subscription( PointCloud2, '/lidar/points', self.lidar_cb, 10) self.radar_sub = self.create_subscription( RadarTrackArray, '/radar/tracks', self.radar_cb, 10) self.pub = self.create_publisher(FusedObjectArray, '/perception/fused_objects', 10) self.lidar_data = None self.radar_data = None def lidar_cb(self, msg): self.lidar_data = msg self.try_fuse() def radar_cb(self, msg): self.radar_data = msg self.try_fuse() def try_fuse(self): if self.lidar_data is None or self.radar_data is None: return # ---- fusión simple por distancia mínima ---- fused = FusedObjectArray() for track in self.radar_data.tracks: # buscar punto Lidar más cercano nearest = min(self.lidar_data.points, key=lambda p: (p.x - track.x)**2 + (p.y - track.y)**2) if ((nearest.x - track.x)**2 + (nearest.y - track.y)**2) < 0.5**2: fused.objects.append( {'id': track.id, 'x': track.x, 'y': track.y, 'velocity': track.v, 'type': 'vehicle'}) self.pub.publish(fused) def main(args=None): rclpy.init(args=args) node = FusionNode() rclpy.spin(node) rclpy.shutdown() if __name__ == '__main__': main() > Consejo: en producción, sustituye la fusión por distancia por un filtro de Kalman o un modelo de Bayesian Fusion para reducir falsos positivos. --- 3. Inteligencia artificial en el camión | Área | Modelo recomendado 2024 | Métrica clave | Comentario práctico | |------|------------------------|---------------|---------------------| | Detección de objetos (cámaras) | YOLOv8‑x (TensorRT) | mAP > 0.78 @ 30 fps | Entrena con dataset interno + Waymo Open Dataset para reducir sesgo regional. | | Procesamiento de nubes Lidar | PointNet++ (PyTorch) | IoU > 0.71 | Usa cuantización INT8 para ejecutar en GPU Jetson Orin (≤ 15 W). | | Predicción de trayectorias | Transformer‑Traj (HuggingFace) | Error medio < 0.5 m a 2 s | Alimenta con datos V2X (intenciones de giro) para anticipar maniobras de vehículos conectados. | | Control longitudinal | PID + RL finetuning | Desviación < 0.2 m/s | Implementa un PID clásico y refínalo con Soft Actor‑Critic para adaptarse a carga variable. | 3.1. Script rápido: inferencia de YOLOv8 en Jetson Orin # 1. Instala dependencias sudo apt-get update && sudo apt-get install -y python3-pip pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 pip3 install ultralytics # 2. Descarga el modelo pre‑entrenado y conviértelo a TensorRT mkdir -p ~/models && cd ~/models wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt trtexec --onnx=yolov8x.onnx --fp16 --saveEngine=yolov8x_fp16.trt # 3. Ejecuta inferencia sobre un frame de cámara python3 - <<'PY' import cv2, torch model = torch.hub.load('ultralytics/yolov8', 'custom', path='yolov8x_fp16.trt') img = cv2.imread('/home/jetson/frame.jpg') results = model(img) print(results.pandas().xyxy[0][['name','confidence']]) PY > Tip: mantén el modelo en FP16 para reducir latencia a < 30 ms y consumo energético bajo 12 W. --- 4. Modelo económico y métricas de desempeño | Métrica | Valor típico 2024 | Cómo medirlo | |---------|-------------------|--------------| | Reducción de OPEX | -12 % a -18 % (combustible + mantenimiento) | Comparar facturación de combustible y órdenes de trabajo antes/después usando telemetría del CAN‑bus. | | Utilización de la flota | 85 % vs 70 % en flotas manuales | Ratio kilómetros operados / capacidad total; extraer de la plataforma TMS. | | Tiempo medio entre fallos (MTBF) | 1 200 h (con diagnóstico predictivo) | Logs de sensores de vibración y temperatura; algoritmo de detección de anomalías. | | Emisiones CO₂ evitadas | 5‑8 % del objetivo Fit for 55 | Calcula consumo de combustible real vs modelo de referencia (EPA‑2021). | | ROI | 2,2‑3,0 años (flota > 30 unidades) | Modelo financiero que incluye CAPEX (vehículo + sensores), OPEX reducido y posibles incent
OpenVINO just got easier in Ultralytics Inference v0.0.45. ⚡ No custom ONNX Runtime build needed. On Linux/Windows x64, a verified plugin downloads on first use for Intel CPU, GPU, or NPU. Internet is required on first use. Read more ➡️ github.com/ultralytics/inference/releases/tag/v0.… #AI #Intel #MachineLearning