This project implement the algorithm record in the paper Deep Image Homography Estimation. The network is trained and tested by torch, the other part are implemented by c++. If you want to know how to algorithm work, please check this blog
This project composed by 4 parts, they are
- cnn, this part incharge training and testing of cnn.
- data_generator, this part generate the train data and test data
- generate_train_result, this part use the trained model to generate the results
- Generate train and test data
- Call the script to train and test the generated data
- (Optional)Generate train results on image
- Qt5
- opencv3.3, you should clone the source codes from github and build the library by yourself, by the time I am developing, there are some layers in this project do not support by opencv3.3 yet.
- torch
The model is trained by torch and able to load by the opencv dnn module, that means you can run the model on all of the major platforms(windows, mac, linux, android, ios).
Results of my implementation is outperform the paper(my average loss 2.58, paper is 9.2), overall performance of my model is better than the paper more than 3 times(9.2/2.58 = 3.57). What makes the performance improve so much?A few of reasons I could think of are
- I change the network architectures from vgg like to squeezeNet1.1 like.
- I do not apply any data augmentation, maybe blurring or occlusion cause the model harder to train.
- The paper use data augmentation to generate 500000 data for training, but I use 500032 images from imagenet as my data for training. I guess this potentially increase variety of the data, the end result is network become easier to train and more robust(but they may not work well for blur or occlusion).
Here, 7.2MByte only, suit for mobile apps
If you liked this project, please help others find it by clicking the star icon above. Thanks a lot!