microsoft / Recursive-Cascaded-Networks

[ICCV 2019] Recursive Cascaded Networks for Unsupervised Medical Image Registration
https://arxiv.org/abs/1907.12353
MIT License
361 stars 87 forks source link

Questions about ‘Jacc score’ and ‘Jacobian determinant’ #53

Open CGC1031 opened 3 years ago

CGC1031 commented 3 years ago

Hello, may I ask that ‘Jacobian determinant’ should stand for Jacobian determinant, which is used to evaluate the folding situation of the deformation field. So what does ’Jacc score‘ stand for? What does it mean physically in registration? Looking forward to your reply! image image image

CGC1031 commented 3 years ago

Some papers evaluate the regularity of the deformation field by calculating the non-positive volume number or proportion of the Jacobian determinant. So it should be as low as possible. However, I found that in our project, the higher the number of VTN cascades, the higher the DICE, but also the higher the value of the Jacobian determinant. I wonder how we compute the Jacobian in our project? Why are the values getting higher and higher? Your answers will be very helpful to me and I am looking forward to your reply.

zsyzzsoft commented 3 years ago

Jacc score is a similar metric as the Dice score. "Jacobian determinant" is actually the standard deviation of Jacobian determinant, which is used in this paper as a measurement of non-smoothness. You are right that a large number of cascades can make the deformation field less smooth.

CGC1031 commented 3 years ago

Thank you for your reply. Q1: So we still want the standard deviation of the Jacobian to be as low as possible, right? Q2: Based on your valuable suggestions, I have been able to realize the visualization of many images, such as moving images and fixed images and flow fields. Could you tell me how to extract the following Grid and Warped graph? I think your drawing is very clear. Could you give me some more suggestions? grid

zsyzzsoft commented 3 years ago

Q1: Yes. Q2: I uploaded the visualization code written in jupyter notebook here, which can be a reference though a bit messy.

CGC1031 commented 3 years ago

Hello, I observed that in the article of ICCV2019, you used DICE as the evaluation metric, and in the article VTN, you used IoU as the evaluation metric. Since I do not understand the significance of IoU as a metric, I have read your VTN article again. You have this sentence in the article. "The Segmentation IoU is computed for the volume and not the sections. It might well be the case that the overlap is not so satisfactory when viewed from those planes yet is better when viewed as a volume."

Q1:Why did you use different metrics in the two papers instead of both Dice and IoU?Is there any meaningful difference between the two metrics?

Q2:Could you give me more explanation about the difference between "Volume "and" section " in the first sentence?

Q3:Is the Segmentation IoU computed for the sections? And IoU is computed for the volumes?

The problem I face is that I don't know which metric to use in my paper, and I still don't know the meaning of IoU. Looking forward to your reply. Thank you. paper pic

zsyzzsoft commented 3 years ago

Both Jacc score and Dice score are a measurement of segmentation IoU, and they are largely correlated. They are both computed for the volumes. We used Dice score in the ICCV article only because we found some other papers using Dice score so we thought that it may be more easily acceptable.

CGC1031 commented 3 years ago

Thank you for sharing your Jupyter code. It is very helpful for me. I can successfully draw the flow_filed. Since I can draw flows, I assume that it is the same true for grids. But the grid graph has some problems. I hope you can take a look at it. Thank you! Fig.1 is my flow_filed, it is right. real_flow_1 Fig.2 results[key][0] shape is :(128-128-128-3) results[key][0][:, :, 64] shape is :(128-128-3) 1 Fig.3 Call your jupter code and we do the "Debug" operation. As is shown in the Fig.4, we find the value of the inv_flow between(-0.89,0.89). It's too small and the grid is blank. So we multiply x times 64. Then we find the value of the inv_flow1 between(-57.0,57.5). Fig.3 2 After the multiply operation, we can get a grid graph as Fig.4. But we find that the gird graph is not total. So we alter the code in line 47:plt.axis((-256, 256, 256, -256)). At last, we obtain the gird graph in Fig.6. However, it's so strange. I think this figure is wrong, the figure is seriously distorted, but the flow field is correct. Could you please give me some suggestions? I watched it for a long time, and I didn't want to give up when I got to this point.Looking forward to your reply! Fig.4 3 Fig.5 4 Fig.6 5

zsyzzsoft commented 3 years ago

How did you compute the inverse field?

CGC1031 commented 3 years ago

You are reminding me that I saw the inverse code you wrote, but I notice that you didn't call it. Could you tell me where should I call it? QQ图片20210601112000 inverse