Skip to content

Fiducial Finder

Hans Johnson edited this page May 15, 2019 · 6 revisions

helpful paths:
abpwrs@caudate:/localscratch/Users/johnsonhj/20181002_LesionMappingBAW/UIOWA2018_LesionMapping/nifti_net_125_full_labelmap_config/exp05_96x96x96_2b_0.05lr

Path to data: /Shared/sinapse/tmp_phd_data

NiftyNet command:

cd /NiftyNet/
python net_run.py -a niftynet.contrib.landmark_application.landmark_application.LandmarkApplication -c /path/to/config.ini

NiftyNet files to add/modify

This is the custom config file we will want to use to run landmark detection

/PATH/TO/SINAPSE/20190329_FiducialFinder/networks/test_landmark_1/test_landmark_1_config.ini

This is the LandmarkApplication class that will run our landmark detection networks.
NOTE: this is BRAINSia/NiftyNet not NifTk/NiftyNet

/PATH/TO/NiftyNet/niftynet/contrib/landmark_application/landmark_application.py

This file & directory needs to be created. This will read in our fcsv files and create the Tensorflow Tensor that represents the 1D vector output.

/PATH/TO/NiftyNet/niftynet/contrib/fcsv_loader/fcsv_loader.py
/PATH/TO/NiftyNet/niftynet/contrib/fcsv_loader/__init__.py

Arjit Initial Literature Search

I went through the list of methods used for Landmark detection (3D Images) using Deep Learning. Here's the summary

FCNs and CNNs:

These methods mainly train the networks on patches. The idea is to train them to regress the displacement vector between the input patch and the target landmark. To make it more robust, a different papers use different approaches. Some made a network which filters "candidate patches" for the target landmark and then use the trained network on these candidates. Some used a joint network which would learn probabilities alongwith the displacement vector and then they take a sort of weighted average of these vectors. Some also created 2 networks, one to learn the local information using patches, and the other which is very similar to the first(same weights) but with extra layers which could learn the correlation among these patches. There was also an interesting variant of this kind, which the authors called Patch-Based Iterative Network. It would keep on searching for the right patch iteratively based on the current batch.

Using Reinforcement Learning:

There were a few papers with a RL approach for landmark detection. The idea is to make an agent learn where to search for the landmark. Typically this is achieved by transforming it into a RL setting where the states encode the patch we are looking at or the Region of Interest, the actions encode whether to go 1 pixel +-x, +-y, +-z. and the rewards are encoded as the difference in euclidean distance of the previous position to target and the current position and target. There was also a paper, comparing the effectiveness of different Deep Q-Networks for this problem.

Decision Forests:

There were some papers trying to approach this problem using Decision forests, using stratified decision forests, and hough forests.

I think the RL approach is pretty exciting and challenging. An Artificial Agent for Anatomical Landmark Detection in Medical Images Evaluating reinforcement learning agents for anatomical landmark detection These are the papers which I went through for RL in Landmark Detection. https://github.com/amiralansary/tensorpack-medical/tree/master/examples/LandmarkDetection/DQN This is the implementation of the different DQNs for this task discussed in the paper. Its using tensorpack-medical, a TF interface designed by the authors.