T贸melo y h谩galo: por qu茅 a veces es 煤til calificar para el an谩lisis y simplemente desarrollar

Hemos estado desarrollando Macroscop durante casi una d茅cada. Y durante este tiempo, se ha desarrollado un enfoque muy completo y serio para la creaci贸n de nuevas funciones en el desarrollo de m贸dulos inteligentes. Por un lado, esto es muy bueno. Intento serio se acerca con un producto de alta calidad. Pero al mismo tiempo, la minuciosidad puede rozar la lentitud y la inoperancia del proceso.

Hace solo un par de a帽os, cuando recibimos solicitudes de los usuarios para desarrollar algo nuevo (no incluido en el plan maestro para el desarrollo de productos), tuvimos un pron贸stico a largo plazo, evaluando la versatilidad y relevancia de la funci贸n entre una amplia gama de usuarios. Y a menudo rechazaron o evaluaron el tiempo de implementaci贸n como muy largo. Pero una vez que recibimos una solicitud para un gran proyecto. En el caso de la implementaci贸n exitosa y r谩pida de las funciones de usuario faltantes, las perspectivas y la escala de la implementaci贸n de Macroscop fueron muy buenas. 隆Y empezamos a intentarlo! Ten铆amos un marco de tiempo ajustado, un usuario atento y servicial y una completa libertad de acci贸n.



Y ... 隆todo sali贸 bien!

Creamos una nueva funci贸n en poco tiempo. Adem谩s, ella era precisa y r谩pida. Todos estaban satisfechos: el usuario recibi贸 el codiciado m贸dulo intelectual, los desarrolladores obtuvieron una experiencia genial, la empresa - ventas.
Esta pr谩ctica marc贸 el comienzo de un nuevo enfoque para el desarrollo de funciones inteligentes en Macroscop: nos hemos vuelto cada vez m谩s f谩ciles de conocer a nuestros usuarios. Y da sus resultados.

Lo m谩s importante es identificar la necesidad real del usuario y formular la tarea claramente con 茅l. Cuando se trata del desarrollo r谩pido de funciones personalizadas (las llamaremos funciones r谩pidas a continuaci贸n), es imprescindible especificar los requisitos: lo que el usuario quiere ver al final, en qu茅 centrarse. Porque, condicionalmente, uno debe trabajar primero con seguridad, el otro para que se vea genial. Cuando adoptamos una funci贸n r谩pida, no estamos hablando del hecho de que al final funcionar谩 en cualquier condici贸n con una precisi贸n del 100%. Nos comprometemos a probar la idea en s铆 misma y tratar de crear para empezar algo que funcione adecuadamente y sea aceptable para su uso en un objeto espec铆fico. Y solo entonces, si tiene 茅xito, refinamos y traemos un producto universal con buen rendimiento.

Cuando los objetivos y prioridades son claros, emprendemos el desarrollo. En poco tiempo, desarrollamos un prototipo que el usuario ya puede evaluar. Y lo damos a prueba. Si lo que hemos hecho se correlaciona con lo que el usuario necesita, y en general le gusta, y el m茅todo que utilizamos en el desarrollo a煤n no se ha agotado y tiene perspectivas de mejorar la funci贸n, vamos m谩s all谩. Si result贸 ser completamente incorrecto y completamente incorrecto, cerramos el proyecto. Y como esto sucede en una etapa temprana, no perdemos casi nada.

Con este enfoque, los desarrolladores y usuarios deben ir lo m谩s lejos posible el uno hacia el otro. Tambi茅n se requiere que el usuario sea incluido en el proceso: es necesario probar cuidadosamente el prototipo en diferentes c谩maras y en diferentes condiciones, probar diferentes configuraciones y presionar diferentes botones, dar retroalimentaci贸n exhaustiva: lo que es conveniente, lo que no es conveniente, lo que no funciona de la forma en que eval煤a la precisi贸n, cu谩nto carga el servidor, etc.

Inicialmente, satisfacemos la necesidad de un cliente espec铆fico, pero incluso antes de comenzar a trabajar, estimamos cu谩n universal puede ser esta funci贸n en el futuro, a cu谩ntas personas puede ayudar a resolver sus problemas. Y en el futuro, adaptamos la funci贸n r谩pida para que sea 煤til y aplicable en tantos sistemas de video como sea posible.

驴Recuerdas c贸mo empez贸 todo? .. (c)


La primera funci贸n r谩pida para nosotros fue el m贸dulo de conteo de colas . En general, lo ten铆amos antes, pero las condiciones de aplicabilidad eran limitadas: el m贸dulo funcionaba solo en una proyecci贸n, cuando la c谩mara miraba estrictamente de arriba a abajo. Una vez nos contact贸 un usuario que necesitaba contar personas en una cola bajo condiciones fundamentalmente diferentes, cuando la c谩mara mira la cola en diagonal (directamente y ligeramente arriba).


desde esta perspectiva, el m贸dulo Macroscop podr铆a contar


y en esto - aprendido

A todos les gustaba Macroscop, pero carec铆a de la preciada funci贸n. El proyecto fue muy prometedor, y el usuario estaba listo para cooperar con nosotros en todos los sentidos, si solo apareciera dicho m贸dulo, y el software pudiera instalarse en el objeto. Decidimos no perder la oportunidad y comenzamos a desarrollarnos.

En la 煤ltima variaci贸n del m贸dulo, la tarea de contar personas se resolvi贸 mediante m茅todos cl谩sicos de visi贸n por computadora, que impusieron serias restricciones a las condiciones de uso. Pero en el marco de la nueva tarea, el m贸dulo tuvo que aprender a contar personas en condiciones fundamentalmente diferentes y mucho m谩s dif铆ciles.

El grupo de desarrollo de funciones intelectuales se dividi贸 en 3 subgrupos, y cada uno comenz贸 a probar su propio m茅todo. Todos ellos se basaron en el uso de redes neuronales.
El primero que trat茅 de transferir al m贸dulo para contar personas en las filas de la infraestructura del detector de cascos que desarrollamos (vea el art铆culo sobre c贸mo tratamos de usar tecnolog铆as modernas de redes neuronales para encontrar cascos en la cabeza de las personas ). Este enfoque parec铆a muy l贸gico: el detector de cascos en una determinada etapa de trabajo resuelve un problema similar.

El segundo grupo intent贸 aplicar una red neuronal de regresi贸n . Ella cuenta el n煤mero de personas en la imagen, pero no selecciona objetos espec铆ficos, lo que dificulta su control. Cuando se entrena en una red neuronal de regresi贸n, se env铆a una imagen y se indica el n煤mero de personas que est谩n presentes, y la red neuronal proporciona un n煤mero: cu谩ntas personas encontr贸. Al llenar la muestra con nuevas im谩genes, buscamos entrenarla para que cuente correctamente.

Desafortunadamente, rechazamos ambos m茅todos, ya que la precisi贸n del contador creado sobre su base era baja.

El tercer grupo prob贸 un detector de uso general bastante conocido, que puede detectar una variedad de objetos en tiempo real. 脡l sabe c贸mo buscar miles de tipos de objetos diferentes, pero no resuelve nuestro problema con todas sus caracter铆sticas. Finalizamos este detector, lo capacitamos en nuestra propia muestra extensa y creamos un resultado bastante bueno: un contador de personas con una precisi贸n aceptable. Lo mejoraron con nuevas selecciones, y finalmente obtuvieron un prototipo, que ya no era una pena darle al usuario una prueba. Y su evaluaci贸n fue ... 隆positiva! Dijo que, en general, la soluci贸n ya es competitiva , pero la precisi贸n a煤n no ha sido alta, solo 60-70%.

La primera versi贸n del contador de cola se cre贸 principalmente utilizando clips de este usuario. Resolvimos el problema, para trabajar espec铆ficamente con 茅l , pero entendimos que si entrenamos la red neuronal y creamos un m贸dulo para un proyecto espec铆fico, no podr铆a haber m谩s escalas. Por lo tanto, se realiz贸 una capacitaci贸n adicional en una muestra m谩s universal, lo que condujo a un aumento en la precisi贸n incluso sin mejoras internas globales. Luego comenzamos a trabajar en el empaque del m贸dulo: mejor茅 la interfaz, atornill茅 varias configuraciones, llam茅 la atenci贸n sobre la usabilidad y la l贸gica. Paralelamente, solucionamos una serie de errores en nuestro prototipo (por cierto, uno de ellos aceler贸 inesperadamente el m贸dulo 7 veces), descubrimos c贸mo reducir el consumo de CPU, conectamos el trabajo en la tarjeta de video. Como resultado, obtuvimos un m贸dulo objetivamente funcional y f谩cil de administrar que analiz贸 r谩pidamente, produjo resultados precisos, sab铆a c贸mo trabajar en una tarjeta de video sin cargar el procesador.
隆Nuestro usuario estaba feliz! Fue a poner la nueva versi贸n en sus tiendas y confirm贸 que en la pr谩ctica todo funciona bien. Logramos alcanzar un 85-90% de precisi贸n (para situaciones en las que las personas en la cola no se superponen por completo, y se pueden distinguir).

Por supuesto, durante el proceso de desarrollo, no todo sali贸 bien y, por ejemplo, entre el primer prototipo y la soluci贸n que ahora est谩 instalada en el sitio, hubo una versi贸n fallida que funcion贸 peor que la anterior. Pero por su experiencia, nos dimos cuenta de qu茅 buscar al realizar las pruebas, aprendimos una serie de caracter铆sticas de los marcos utilizados. Y dado esto, creamos un m贸dulo final genial, y luego nos basamos en 茅l, otra funci贸n r谩pida.



Final feliz


Ahora la aplicaci贸n del m贸dulo para contar personas en la cola de la nueva versi贸n se est谩 expandiendo a otras tiendas de este usuario. Y la versi贸n final, entr贸 en producci贸n y entr贸 en la versi贸n de Macroscop, que se est谩 preparando para su lanzamiento. Por cierto, el usuario estaba tan satisfecho con el resultado y la forma general de trabajar que lleg贸 otra solicitud: hacer un detector de estante vac铆o . Y lo tomamos nuevamente, y lo hicimos nuevamente (pero esta es una historia completamente diferente).

Para resumir, para comparar: el desarrollo y el refinamiento de la versi贸n anterior del m贸dulo para contar personas en la cola (hace 4 a帽os) tom贸 alrededor de 8 meses . Creamos el nuevo m贸dulo en 2 meses (el primer prototipo funcional fue entregado al usuario en 2-3 semanas).

Hasta ahora, esto es solo una prueba de la pluma y solo dentro del marco de una direcci贸n: el desarrollo de funciones intelectuales. En general, nos adherimos a un enfoque m谩s riguroso y exhaustivo para el desarrollo de productos, con planificaci贸n, numerosas validaciones de ideas, an谩lisis de demanda y pruebas exhaustivas. Lo que permanece sin cambios es la pr谩ctica de crear Macroscop (ya sea el desarrollo de un n煤cleo o m贸dulos de an谩lisis de video) en estrecha colaboraci贸n con los usuarios.
No hay certeza de que el enfoque de las funciones r谩pidas deba aplicarse de manera continua y en todo el departamento, pero ahora estamos obteniendo una experiencia real de desarrollo r谩pido, y los usuarios para quienes esto se hace son beneficios reales del producto.

En cualquier caso, para nosotros, hemos creado varias reglas, cuyo cumplimiento es la mitad del 茅xito del desarrollo de funciones r谩pidas:

  • Trate de conocer al usuario, pero no se olvide de sus propios objetivos: asuma proyectos que puedan escalarse, invierta en algo que sea 煤til a largo plazo.
  • Llegue al fondo de las verdaderas tareas y necesidades del usuario, identifique las prioridades.
  • Alistar soporte al usuario. Si est谩 listo para comunicarse activamente, probar, dar retroalimentaci贸n y proporcionar los datos necesarios (video de un objeto real, por ejemplo), entonces hay todas las posibilidades de desarrollarse bien y r谩pidamente.
  • No tenga miedo al fracaso y tr谩telo como uno de los posibles resultados.
  • No intente desarrollar algo 煤nico desde cero, pero use la experiencia existente si es posible: en nuestro caso, intente usar partes de los algoritmos de m贸dulos ya implementados. E incluso si la soluci贸n resultante resulta ser viable, dedique tiempo a la investigaci贸n y personalizaci贸n.

Source: https://habr.com/ru/post/es421733/


All Articles