Implementación de Pytorch de Flyet por Dosovitskiy et al.
Este repositorio es una implementación de antorcha de Flowtet, por Alexey Dosovitskiy et al. En Pytorch. Ver implementación de antorcha aquí
Este código se inspira principalmente en el ejemplo oficial de ImageNet. No se ha probado para múltiples GPU, pero debería funcionar al igual que en el código original.
El código proporciona un ejemplo de capacitación, utilizando el conjunto de datos de la silla voladora, con aumento de datos. Se puede agregar una implementación para conjuntos de datos de flujo de escenas en el futuro.
Actualmente se proporcionan dos modelos de red neuronal, junto con su variación de norma por lotes (experimental):
Gracias a Kaixhin, puede descargar una versión previa a la envoltura de Flughets (de Caffe, no de Pytorch) aquí. Esta carpeta también contiene redes entrenadas desde cero.
Alimente directamente la red descargada al script, no necesita descomprimirla incluso si su entorno de escritorio le indica.
Estas redes esperan una entrada BGR (en comparación con RGB en Pytorch). Sin embargo, el orden BGR no es muy importante.
Estos módulos se pueden instalar con pip
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
o
pip install -r requirements.txtPrimero, debe descargar el conjunto de datos de la silla voladora. Es ~ 64 GB grande y le recomendamos que lo ponga en una unidad SSD.
Los hiperparámetros predeterminados proporcionados en main.py son los mismos que en los scripts de entrenamiento de la cafe.
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownetsRecomendamos que establezca J (número de hilos de datos) en alto si utiliza DataAgmation para evitar la carga de datos para retrasar el entrenamiento.
Para obtener más ayuda, puede escribir
python main.py -hTensorBoard-Pytorch se usa para registrar. Para visualizar el resultado, simplemente escriba
tensorboard --logdir=/path/to/checkpointsLos modelos se pueden descargar aquí en la carpeta Pytorch.
Los modelos fueron entrenados con opciones predeterminadas a menos que se especifiquen. La deformación del color no se usó.
| Arco | tasa de aprendizaje | tamaño por lotes | tamaño de la época | Nombre del archivo | Validación EPE |
|---|---|---|---|---|---|
| Volantes | 1e-4 | 8 | 2700 | Flownets_epe1.951.pth.tar | 1.951 |
| Volantes bn | 1e-3 | 32 | 695 | FLOWNETS_BN_EPE2.459.pth.tar | 2.459 |
| Flownetc | 1e-4 | 8 | 2700 | FLOWNETC_EPE1.766.PTH.TAR | 1.766 |
Nota : Flownets Bn tardó más en entrenar y obtuvo peores resultados. Se recomienda encarecidamente que no lo use para el conjunto de datos de sillas voladoras.
La predicción se realiza por volantes.
Código exacto para el flujo óptico -> El mapa de color se puede encontrar aquí
| Aporte | predicción | Estrut por tierra |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Si necesita ejecutar la red en sus imágenes, puede descargar una red de petróleo aquí y iniciar el script de inferencia en su carpeta de pares de imágenes.
Su carpeta debe tener todos los pares de imágenes en la misma ubicación, con el patrón de nombre
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained En cuanto al script main.py , hay un menú de ayuda disponible para opciones adicionales.
Para tener transformaciones coherentes entre las entradas y el objetivo, debemos definir nuevas transformaciones que tomen la entrada y el objetivo, ya que se define una nueva variable aleatoria cada vez que se llama a una transformación aleatoria.
Para permitir el aumento de datos, hemos considerado la rotación y las traducciones para las entradas y su resultado en el mapa de flujo objetivo. Aquí hay un conjunto de cosas a cuidar para lograr un aumento de datos adecuado
Si aplica una transformación en IMG1, debe aplicar lo mismo para el mapa de flujo, para obtener puntos de origen coherentes para el flujo.
Dada una traducción (tx,ty) aplicada en IMG2, tendremos
flow[:,:,0] += tx
flow[:,:,1] += ty
Una escala aplicada tanto en IMG1 como en IMG2 con un zoom parámetros alpha multiplica el flujo por la misma cantidad
flow *= alpha
Una rotación aplicada en ambas imágenes por un ángulo theta también gira los vectores de flujo ( flow[i,j] ) por el mismo ángulo
for_all i,j flow[i,j] = rotate(flow[i,j], theta)
rotate: x,y,theta -> (x*cos(theta)-x*sin(theta), y*cos(theta), x*sin(theta))
Consideremos una rotación por el ángulo theta del centro de imagen.
Debemos transformar cada vector de flujo en función de las coordenadas donde aterriza. En cada coordenada (i, j) , tenemos:
flow[i, j, 0] += (cos(theta) - 1) * (j - w/2 + flow[i, j, 0]) + sin(theta) * (i - h/2 + flow[i, j, 1])
flow[i, j, 1] += -sin(theta) * (j - w/2 + flow[i, j, 0]) + (cos(theta) - 1) * (i - h/2 + flow[i, j, 1])