User Tools

Site Tools


pr0ntools:cfcv:pr0nsweeper

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
pr0ntools:cfcv:pr0nsweeper [2015/07/13 06:46] – [Clicking] mcmasterpr0ntools:cfcv:pr0nsweeper [2015/07/16 06:20] (current) – [Running] mcmaster
Line 3: Line 3:
 This page is about the pr0nsweeper Python GUI that allows a human to quickly review and fix CV results. This page is about the pr0nsweeper Python GUI that allows a human to quickly review and fix CV results.
  
-Although this page is public its not advertised.  I would like to keep it low profile for the time being until the suite is more mature.+Proof of concept stage / not intended for general use. 
  
 ====== Keyboard and mouse quick summary ====== ====== Keyboard and mouse quick summary ======
- 
-Tile types: 
-  * Blue metal: "wires" 
-  * White void: no material present 
-  * Orange unknown: could not decide if metal or void 
  
 Left click: metal operation Left click: metal operation
Line 34: Line 30:
  
 ====== Introduction ====== ====== Introduction ======
 +
 +An integrated circuit is composed of metal connecting various areas together to form nets.  We want to recover netlists from various chips but so far all efforts have revolved around manually drawing polygons from microscope images.  A few people have tried to do some computer vision (CV) approaches but ultimately fixing the errors takes longer than drawing the original polygons.
 +
 +Can we do better?  Sort of...we can cheat ("cheating is a valid engineering strategy").  We cheat by using a confocal microscope (or other high contrast imager) on a chip laid out in a grid.  This simplifies the problem dramatically:
 +  * The system is now regenerative: errors can be corrected
 +  * Grid => simple algorithms determine if metal or not in that square
 +
 +However, this computer vision process is still far from perfect and generates a lot of uncertainties.  This GUI presents the CV results to a human that can quickly correct minor CV errors (humans are slow but much better at pattern matching than computers).  The system tries to flag areas for review rather than making a concrete decision if its unsure.  It may from time to time entirely misinterpret an area.  Your job is to look for and correct these errors.
 +
 +
 +====== GUI overview ======
 +
 +{{:pr0ntools:cfcv:pr0nsweeper:overview.png?300|}}
 +
 +At startup, the left area has the raw CV result and the right has the original image with the CV result overlaid on top.  You'll notice there are a few different tile colors on the left:
 +  * Blue metal: "wires"
 +  * White void: no material present
 +  * Orange unknown: could not decide if metal or void
 +
 +In most images there will be a large amount of blue and white with a number of orange tiles.  The typical workflow is to correct a small number of errors (if any) and then convert all remaining warnings to metal.  These steps are described in more detail in the following sections.
 +
 +The reason why most warnings are metal is because the thresholding algorithm currently used has a hard time dealing with vias.  Future versions will hopefully handle them better.
 +
  
 ====== Clicking ====== ====== Clicking ======
Line 39: Line 58:
 Left clicking is metal oriented: it turns tiles into metal.  if the tile is already metal, it turns it into unknown.  Similarly, right clicking is void oriented. Left clicking is metal oriented: it turns tiles into metal.  if the tile is already metal, it turns it into unknown.  Similarly, right clicking is void oriented.
  
-{{:pr0ntools:cfcv:pr0nsweeper:group-pre.png?150}}+You may click on either the grid on the left or the image on the right. 
 + 
 + 
 +{{:pr0ntools:cfcv:pr0nsweeper:group-pre.png?100}}
  
-{{:pr0ntools:cfcv:pr0nsweeper:group-post.png?150}}+{{:pr0ntools:cfcv:pr0nsweeper:group-post.png?100}}
  
 Above: before and after shift right clicking to remove entire upper left unknown group Above: before and after shift right clicking to remove entire upper left unknown group
Line 50: Line 72:
 ====== Global operations ====== ====== Global operations ======
  
-{{:pr0ntools:cfcv:pr0nsweeper:global_m_pre.png?600}}+{{:pr0ntools:cfcv:pr0nsweeper:global_m_pre.png?150}}
  
-{{:pr0ntools:cfcv:pr0nsweeper:global_m_post.png?600}}+{{:pr0ntools:cfcv:pr0nsweeper:global_m_post.png?150}}
  
 Above: using "M" to turn all unknowns into metal Above: using "M" to turn all unknowns into metal
Line 61: Line 83:
 ====== Grid errors ====== ====== Grid errors ======
  
-{{:pr0ntools:cfcv:pr0nsweeper:grid_error.png?600}}+{{:pr0ntools:cfcv:pr0nsweeper:grid_error.png?450}}
  
-Above: minor grid error+Above: grid error visible in the upper left and lower right corner
  
 If the grid is detected incorrectly it will disrupt metal detection.  In the above example, the Y grid offset is very poor (although the pitch is correct).  Correct errors like above by biasing the grid to a particular direction, using the same bias for the entire image.  For example, make the lower unknowns metal and the upper unknowns void.  Suggest using this convention (lower => metal, upper => void) if its unclear which direction the correction should be applied. If the grid is detected incorrectly it will disrupt metal detection.  In the above example, the Y grid offset is very poor (although the pitch is correct).  Correct errors like above by biasing the grid to a particular direction, using the same bias for the entire image.  For example, make the lower unknowns metal and the upper unknowns void.  Suggest using this convention (lower => metal, upper => void) if its unclear which direction the correction should be applied.
Line 84: Line 106:
  
 There's still a lot that can be done with the computer vision preprocessing.  The current suite is somewhat optimized for the references images: to be seen how well it will apply to other data sets (ex: SEM images). There's still a lot that can be done with the computer vision preprocessing.  The current suite is somewhat optimized for the references images: to be seen how well it will apply to other data sets (ex: SEM images).
 +
 +====== Running ======
 +
 +Ubuntu 12.04x64
 +
 +sudo apt-get install -y python-qt4 python-imaging python-pyicu
 +
 +git clone https://github.com/JohnDMcMaster/pr0ntools.git
 +
 +cd cf/sweeper
 +
 +python sweeper.py --host sketchyurl.com
 +
 +====== Backend ======
 +
 +This is for informational purposes only.  Its not required to use the pr0nsweeper GUI.
 +
 +Data is collected using [[mcmaster:tech_inst:k2_ind|my confocal microscope]].  It is not stitched or preprocessed in any way.
 +
 +The core CV engine is in cfcv.py.  This basically performs the following steps:
 +  * Straighten image
 +  * Determine design grid
 +  * Calculate metal and void thresholds
 +  * Apply thresholds to image
 +  * Munge output to try to heuristically correct errors
 +
 +cfcv_batch.py is a batch processor around the engine that allows, for example, running jobs in parallel.
 +
 +Once cfcv_batch.py completes the output directory is fed into the pr0nsweeper job distribution server, server.py.  When a client requests an image it grabs one from the output directory and feeds it to the client.  The client suggests changes to the image and then sends it back to the server where the results are recorded.
  
  
Line 89: Line 140:
  
   * [[https://github.com/JohnDMcMaster/pr0ntools/tree/master/capture/cf|Source code]]   * [[https://github.com/JohnDMcMaster/pr0ntools/tree/master/capture/cf|Source code]]
 +
 +
pr0ntools/cfcv/pr0nsweeper.1436769986.txt.gz · Last modified: 2015/07/13 06:46 by mcmaster