FDF Labs
FishAI

Cada pez, cada cuadro, en una planilla.

FishAI convierte el video de un tanque filmado desde arriba en datos: cada pez en cada cuadro, con su especie, su posición y un número de seguimiento. De ahí salen el conteo, por dónde nada cada especie, a qué velocidad y cuán diverso es el tanque. Es para laboratorios y grupos de investigación que filman peces. El modelo lo entrenamos nosotros, con filmaciones y anotaciones propias.

Ocho segundos de la corrida que usamos en toda esta página: 48 peces de cuatro especies a la vez, cada uno con su número de seguimiento.

Probado contra un tanque conocido.

Filmamos un tanque del que sabíamos el stock: 20 corydoras, 15 mollies, 9 cebritas y 4 guppies, 48 peces. Todo lo que sigue sale de esa corrida, sin editar: 8 minutos y 18 segundos de video 1080p.

A chart of the eight-minute run: the frame-by-frame count jumps between about 40 and 55 fish, while the stabilised count stays mostly between 46 and 49, around the 48 in the tank.
cuadros analizados
29.880
de los cuadros con la cuenta a dos peces o menos de los 48
88 %

En naranja, el conteo cuadro a cuadro: con el tanque lleno siempre hay un pez tapando a otro. En negro, el que entrega FishAI, la mediana de los últimos 181 cuadros (tres segundos en este video).

The count of each species over the same run, smoothed over three seconds, against the real stock as dashed lines: corydoras stay around 20, mollies around 15 after the first minute, guppies around 4, and cebritas mostly between 7 and 9, below their 9.

La cuenta de cada especie contra el stock real, en línea punteada. En promedio: 20,2 corydoras, 15,0 mollies y 4,2 guppies. Las cebritas quedan cortas: 7,6 de 9.

Revisión humana
En un tanque de 15 peces, una persona revisó 30 cuadros y FishAI los tenía todos bien. En el de 48, ningún cuadro suelto sale perfecto, por eso los números de esta página son promedios y conteos estabilizados.
Modelo
mAP50-95 de 0,93 y mAP50 de 0,995 sobre cuadros apartados del entrenamiento. Son de las mismas filmaciones, así que es una cifra optimista.
Fuera de lo entrenado
El modelo nunca vio un tanque así de lleno: se entrenó con tanques con menos peces. Esta corrida es la prueba más difícil que tenemos.

Dónde nada cada especie.

Con la posición de cada pez en cada cuadro, el tanque se ve distinto según quién lo use.

Four heatmaps of the same tank, one per species: corydoras show many small bright spots spread over the floor, mollies are brightest along the walls and in the corners, guppies in the corners and a few spots, and cebritas fill the open middle of the tank.

Un mapa de calor por especie, cada uno a su propia escala. Mollies y guppies pasan la mitad de las detecciones cerca de una pared (52 % y 47 %, a menos de 120 píxeles); corydoras y cebritas, mucho menos (25 % y 18 %). Las manchas de las corydoras son peces quietos en el fondo.

The ten longest tracks of each species drawn over the empty tank: corydora tracks wander slowly with tight knots where the fish rested, molly and guppy tracks run along the walls, and cebrita tracks cut straight across the open water.

Los diez recorridos más largos de cada especie. Una corydora llegó a 2 minutos y 19 segundos con el mismo número. Las cebritas son las más rápidas, 169 píxeles por segundo de mediana contra 70 de las corydoras, y sus recorridos más largos duran entre 12 y 18 segundos.

Shannon diversity over the same run, in five-second windows: after a dip to about 1.09 in the first minute it stays between about 1.20 and 1.29, around the dashed line of the real stock at 1.25.

Diversidad de Shannon (H′) en ventanas de cinco segundos, contra la del stock real, 1,25. La mediana medida es 1,24, y el 87 % de las ventanas queda a 0,05 o menos.

De la filmación a la planilla.

Un video entra, y sale todo lo de arriba, en archivos comunes.

  1. VideoUn archivo, una tanda de archivos o la cámara en vivo.
  2. DetectaCada pez, con su especie y su confianza.
  3. SigueUn número por pez mientras se lo pueda seguir.
  4. CuentaTotal y por especie, estabilizado.
  5. CSVUna fila por cuadro y una por pez detectado.
summary.csvuna fila por cuadro
framecountstabilized_countmean_confspecies_counts
1404046480.826cebrita:7|corydora:21|guppy:4|molly:14
tracks.csvuna fila por pez detectado, dos de cada especie
frametrack_idspeciesxywhconf
1404017637corydora492.8803.0100.8118.00.772
1404018283corydora749.4525.7189.274.80.903
1404018591molly1145.0789.6123.566.00.933
1404016577molly495.1135.3134.846.30.82
1404018999guppy1465.4841.599.0137.30.963
1404019070guppy1470.1265.571.2109.30.557
1404018900cebrita810.9630.1111.8104.70.907
1404018910cebrita1234.8353.841.7157.00.758

Filas reales de la misma corrida: el cuadro 14.040, a los 3:54, dentro de los ocho segundos del video de arriba. En summary.csv faltan, por espacio, las columnas de hora y de números activos. Los peces 17637 y 18283 ya tenían ese número cuatro segundos antes.

Con la cámara en vivo, otra persona puede mirar el tanque procesado desde su navegador.

Por cuadro
Hora, número de cuadro, conteo, conteo estabilizado, números activos, confianza media y cuenta por especie.
Por pez
Cuadro, número de seguimiento, especie, posición, ancho y alto de la caja, y confianza.
Gráficos
Diez desde cualquier corrida: conteo, mapa de calor, trayectorias, velocidad, permanencia, dirección, diversidad y confianza, entre otros.
Validación
Marcás a mano lo que hay en el tanque (o traés anotaciones MOT, YOLO o COCO) y FishAI se compara: precisión y exhaustividad, MOTA, MOTP, IDF1 y cambios de número, con matriz de confusión, Bland-Altman y calibración.
API
Una API REST para cámaras, detecciones, recorridos, estadísticas y exportación.
Tus especies
Hoy distingue corydora, molly, guppy y cebrita. Para otras, se entrena con tus filmaciones: la máquina propone las cajas y una persona corrige la especie y los errores antes de que el cuadro entre al entrenamiento.
Velocidad
Con una placa de video común procesa video 1080p a unos 34 cuadros por segundo, con 48 peces en el tanque.

Lo que todavía no hace.

Para que sepas qué medir con FishAI y qué no.

Identidad
En un tanque lleno, un pez cambia de número cuando se cruza con otro o queda tapado: en esta corrida hubo 17.618 números para 48 peces. Sirve para recorridos de segundos a minutos, no para seguir a un individuo toda la sesión.
Unidades
Posiciones y velocidades van en píxeles. Todavía no hay calibración a centímetros.
Profundidad
Una sola cámara desde arriba: ve el plano del tanque, no a qué altura nada cada pez.

¿Investigás con peces?

Contanos qué especies tenés, cómo filmás y qué querés medir. Mandanos un video y te devolvemos sus datos.

← Volver al inicio