Dosovitskiy et al.
이 저장소는 Alexey Dosovitskiy et al. Pytorch에서. 여기에서 토치 구현을 참조하십시오
이 코드는 주로 공식 imagenet 예제에서 영감을 얻었습니다. 다중 GPU에 대해 테스트되지 않았지만 원래 코드와 마찬가지로 작동해야합니다.
이 코드는 플라잉 의자 데이터 세트를 사용하여 데이터 확대와 함께 교육 예제를 제공합니다. 장면 흐름 데이터 세트에 대한 구현이 향후 추가 될 수 있습니다.
배치 규범 변동 (실험)과 함께 현재 두 가지 신경망 모델이 제공됩니다.
Kaixhin 덕분에 Pytorch가 아닌 Caffe에서 사전에 사전 된 버전의 흐르는 버전을 다운로드 할 수 있습니다. 이 폴더에는 훈련 된 네트워크도 처음부터 포함됩니다.
다운로드 된 네트워크를 스크립트에 직접 공급하면 데스크탑 환경에서 말해도 압축 할 필요가 없습니다.
이 네트워크는 BGR 입력 (Pytorch의 RGB와 비교)을 기대합니다. 그러나 BGR 주문은 그리 중요하지 않습니다.
이 모듈은 pip 로 설치할 수 있습니다
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
또는
pip install -r requirements.txt먼저 비행 의자 데이터 세트를 다운로드해야합니다. 그것은 ~ 64GB가 크며 SSD 드라이브에 넣는 것이 좋습니다.
main.py 에 제공된 기본 하이퍼 파라미터는 Caffe Training Scripts와 동일합니다.
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownets데이터로드를 사용하여 교육 속도를 늦추기 위해 데이터로드를 사용하는 경우 j (데이터 스레드 수)를 높게 설정하는 것이 좋습니다.
추가 도움을 얻으려면 입력 할 수 있습니다
python main.py -hTensorboard-Pytorch는 로깅에 사용됩니다. 결과를 시각화하려면 간단히 입력하십시오
tensorboard --logdir=/path/to/checkpointsPytorch 폴더에서 모델을 여기에서 다운로드 할 수 있습니다.
지정되지 않는 한 모델은 기본 옵션으로 훈련되었습니다. 컬러 워핑은 사용되지 않았습니다.
| 아치 | 학습 속도 | 배치 크기 | 에포크 크기 | 파일 이름 | 유효성 검사 EPE |
|---|---|---|---|---|---|
| 흐르는 | 1E-4 | 8 | 2700 | flownets_epe1.951.pth.tar | 1.951 |
| 흐르는 bn | 1E-3 | 32 | 695 | flownets_bn_epe2.459.pth.tar | 2.459 |
| 흐르는 | 1E-4 | 8 | 2700 | flownetc_epe1.766.pth.tar | 1.766 |
참고 : 비행 BN은 훈련하는 데 시간이 오래 걸렸고 결과가 더 나빠졌습니다. 비행 의자 데이터 세트에 사용하지 않는 것이 좋습니다.
예측은 흐르는 날로 이루어집니다.
광학 흐름에 대한 정확한 코드 -> 색상 맵은 여기에서 찾을 수 있습니다.
| 입력 | 예측 | 진실 |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
이미지에서 네트워크를 실행 해야하는 경우 여기에서 사전 예정된 네트워크를 다운로드하고 이미지 쌍 폴더에서 추론 스크립트를 시작할 수 있습니다.
폴더는 이름 패턴으로 모든 이미지 쌍이 같은 위치에 있어야합니다.
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained main.py 스크립트는 추가 옵션을 위해 도움말 메뉴를 사용할 수 있습니다.
입력과 대상 사이의 일관된 변환을하려면, 랜덤 변환이 호출 될 때마다 새로운 랜덤 변수가 정의되므로 입력과 타겟을 모두 취하는 새로운 변환을 정의해야합니다.
데이터 확대를 허용하기 위해 입력에 대한 회전 및 변환 및 대상 흐름 맵에서 결과를 고려했습니다. 적절한 데이터 확대를 달성하기 위해 처리해야 할 일이 있습니다.
IMG1에 변환을 적용하는 경우 흐름에 대한 원래 원점을 얻으려면 유량 맵에 동일하게 적용해야합니다.
IMG2에 적용되는 번역 (tx,ty) 이 주어지면
flow[:,:,0] += tx
flow[:,:,1] += ty
Zoom 매개 변수로 IMG1 및 IMG2에 적용되는 스케일 alpha 흐름에 동일한 양을 곱합니다.
flow *= alpha
각도로 두 이미지에 적용되는 회전 theta 또한 같은 각도만큼 흐름 벡터 ( flow[i,j] )를 회전시킵니다.
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))
이미지 센터의 theta 에 의한 회전을 고려해 봅시다.
우리는 착륙하는 좌표를 기반으로 각 흐름 벡터를 변형해야합니다. 각 좌표 (i, j) 에 다음과 같습니다.
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])