20.03.2021 Views

Deep-Learning-with-PyTorch

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

412 CHAPTER 14 End-to-end nodule analysis, and where to go next

candidateInfo_tup = \

CandidateInfoTuple(False, False, False, 0.0, series_uid, center_xyz)

candidateInfo_list.append(candidateInfo_tup)

Builds our candidate info tuple and

appends it to the list of detections

return candidateInfo_list

As output, we get a list of three arrays (one each for the index, row, and column) the

same length as our candidate_count. We can use this data to populate a list of

candidateInfo_tup instances; we have grown attached to this little data structure, so

we stick our results into the same kind of list we’ve been using since chapter 10. As we

don’t really have suitable data for the first four values (isNodule_bool,

hasAnnotation_bool, isMal_bool, and diameter_mm), we insert placeholder values of

a suitable type. We then convert our coordinates from voxels to physical coordinates in

a loop, creating the list. It might seem a bit silly to move our coordinates away from our

array-based index, row, and column, but all of the code that consumes

candidateInfo_tup instances expects center_xyz, not center_irc. We’d get wildly

wrong results if we tried to swap one for the other!

Yay—we’ve conquered step 3, getting nodule locations from the voxel-wise detections!

We can now crop out the suspected nodules and feed them to our classifier to

weed out some more false positives.

14.3.3 Did we find a nodule? Classification to reduce false positives

As we started part 2 of this book, we described the job of a radiologist looking through

CT scans for signs of cancer thus:

Currently, the work of reviewing the data must be performed by highly trained specialists,

requires painstaking attention to detail, and it is dominated by cases where no cancer exists.

Doing that job well is akin to being placed in front of 100 haystacks and being told,

“Determine which of these, if any, contain a needle.”

We’ve spent time and energy discussing the proverbial needles; let’s discuss the hay

for a moment by looking at figure 14.4. Our job, so to speak, is to fork away as much

hay as we can from in front of our glassy-eyed radiologist, so that they can refocus

their highly trained attention where it can do the most good.

Let’s look at how much we are discarding at each step while we perform our endto-end

diagnosis. The arrows in figure 14.4 show the data as it flows from the raw CT

voxels through our project to our final malignancy determination. Each arrow that

ends with an X indicates a swath of data discarded by the previous step; the arrow

pointing to the next step represents the data that survived the culling. Note that the

numbers here are very approximate.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!