Poor image recognition performance - suggestions appreciated!

Doloop
Doloop New Altair Community Member
edited November 5 in Community Q&A
I have created a process that uses a neural network (NN) to evaluate images.  The images are from network cameras and I want the NN to classify the images into two groups:  images in which people and/or vehicles appear or images in which people and/or vehicles do not appear.  (The process then emails me whenever it finds an image in which people or vehicles appear.)  I'm using the ImageMiner-1.4.1 extension.  I am getting poor performance from my model and I assume it is because I am not really extracting the best features from the images so that the NN can make accurate classifications.  I would appreciate it if anyone who is familiar with the ImageMiner-1.4.1 extension could give me some suggestions as to the types of features I should be using for this kind of task (and any other suggestions that might be helpful).

(In case anyone is wondering what I mean by poor performance.  I've used cross-validation and my best performance is a precision of 86% [not too bad] and accuracy of 27% [ugh!!].  The model performs much worse than this when applied against other unlabeled images.  I also tried using the "similarity" operator (provided by the ImageMiner-1.4.1 extension and it gave me FABULOUS performance on cross-validation (100% precision and 100% accuracy) - but then when I actually used it against more unlabeled images, it failed miserably.  It only identified about 30% correctly.)

Thanks in advance.

doloop

Answers

  • StaryVena
    StaryVena New Altair Community Member
    Hello,
    try it first with global features:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <process version="5.3.000">
      <context>
        <input/>
        <output/>
        <macros/>
      </context>
      <operator activated="true" class="process" compatibility="5.3.000" expanded="true" name="Process">
        <process expanded="true" height="325" width="614">
          <operator activated="true" class="imageprocessing:multiple_color_image_opener" compatibility="1.3.003" expanded="true" height="60" name="MCIO" width="90" x="380" y="30">
            <list key="images">
              <parameter key="true" value="D:\store\categorization\nature"/>
              <parameter key="false" value="D:\store\categorization\urban"/>
            </list>
            <parameter key="assign_label" value="true"/>
            <process expanded="true" height="702" width="1221">
              <operator activated="true" class="imageprocessing:global_feature_extraction" compatibility="1.3.003" expanded="true" height="60" name="Global Feature Extractor from a Single Image" width="90" x="380" y="30">
                <parameter key="include_position_filename" value="false"/>
                <process expanded="true" height="702" width="1221">
                  <operator activated="true" class="imageprocessing:statistics" compatibility="1.3.003" expanded="true" height="60" name="Global statistics" width="90" x="447" y="30"/>
                  <operator activated="true" class="imageprocessing:histogram" compatibility="1.3.003" expanded="true" height="60" name="histogram" width="90" x="313" y="75">
                    <parameter key="Bins" value="32"/>
                  </operator>
                  <operator activated="true" class="imageprocessing:BIC" compatibility="1.3.003" expanded="true" height="76" name="BIC" width="90" x="313" y="165"/>
                  <operator activated="true" class="imageprocessing:dLog_distance" compatibility="1.3.003" expanded="true" height="60" name="dLog" width="90" x="447" y="165"/>
                  <operator activated="true" class="imageprocessing:color_model_operator" compatibility="1.3.003" expanded="true" height="60" name="ClrToGS" width="90" x="313" y="435">
                    <parameter key="Color component" value="Red"/>
                  </operator>
                  <operator activated="true" class="imageprocessing:obcf" compatibility="1.3.003" expanded="true" height="60" name="OBCF" width="90" x="447" y="435"/>
                  <operator activated="true" class="imageprocessing:color_model_operator" compatibility="1.3.003" expanded="true" height="60" name="ClrToGS (2)" width="90" x="313" y="345">
                    <parameter key="Color component" value="Green"/>
                  </operator>
                  <operator activated="true" class="imageprocessing:obcf" compatibility="1.3.003" expanded="true" height="60" name="OBCF (2)" width="90" x="447" y="345"/>
                  <operator activated="true" class="imageprocessing:color_model_operator" compatibility="1.3.003" expanded="true" height="60" name="ClrToGS (3)" width="90" x="313" y="255">
                    <parameter key="Color component" value="Blue"/>
                  </operator>
                  <operator activated="true" class="imageprocessing:obcf" compatibility="1.3.003" expanded="true" height="60" name="OBCF (3)" width="90" x="447" y="255"/>
                  <connect from_port="color image plus 1" to_op="Global statistics" to_port="color image plus"/>
                  <connect from_port="color image plus 2" to_op="histogram" to_port="color image plus"/>
                  <connect from_port="color image plus 3" to_op="BIC" to_port="color image plus"/>
                  <connect from_port="color image plus 4" to_op="ClrToGS" to_port="color image plus"/>
                  <connect from_port="color image plus 5" to_op="ClrToGS (2)" to_port="color image plus"/>
                  <connect from_port="color image plus 6" to_op="ClrToGS (3)" to_port="color image plus"/>
                  <connect from_op="Global statistics" from_port="features" to_port="feature 1"/>
                  <connect from_op="histogram" from_port="features" to_port="feature 2"/>
                  <connect from_op="BIC" from_port="grayscale image plus Hist" to_op="dLog" to_port="grayscale image plus Hist"/>
                  <connect from_op="dLog" from_port="features" to_port="feature 5"/>
                  <connect from_op="ClrToGS" from_port="grayscale image plus" to_op="OBCF" to_port="grayscale image plus"/>
                  <connect from_op="OBCF" from_port="features" to_port="feature 4"/>
                  <connect from_op="ClrToGS (2)" from_port="grayscale image plus" to_op="OBCF (2)" to_port="grayscale image plus"/>
                  <connect from_op="OBCF (2)" from_port="features" to_port="feature 6"/>
                  <connect from_op="ClrToGS (3)" from_port="grayscale image plus" to_op="OBCF (3)" to_port="grayscale image plus"/>
                  <connect from_op="OBCF (3)" from_port="features" to_port="feature 7"/>
                  <portSpacing port="source_color image plus 1" spacing="0"/>
                  <portSpacing port="source_color image plus 2" spacing="0"/>
                  <portSpacing port="source_color image plus 3" spacing="0"/>
                  <portSpacing port="source_color image plus 4" spacing="0"/>
                  <portSpacing port="source_color image plus 5" spacing="0"/>
                  <portSpacing port="source_color image plus 6" spacing="0"/>
                  <portSpacing port="source_color image plus 7" spacing="0"/>
                  <portSpacing port="sink_feature 1" spacing="0"/>
                  <portSpacing port="sink_feature 2" spacing="0"/>
                  <portSpacing port="sink_feature 3" spacing="0"/>
                  <portSpacing port="sink_feature 4" spacing="0"/>
                  <portSpacing port="sink_feature 5" spacing="0"/>
                  <portSpacing port="sink_feature 6" spacing="0"/>
                  <portSpacing port="sink_feature 7" spacing="0"/>
                  <portSpacing port="sink_feature 8" spacing="0"/>
                </process>
              </operator>
              <connect from_port="color image plus" to_op="Global Feature Extractor from a Single Image" to_port="color image plus"/>
              <connect from_op="Global Feature Extractor from a Single Image" from_port="example set" to_port="Example set"/>
              <portSpacing port="source_color image plus" spacing="0"/>
              <portSpacing port="sink_Example set" spacing="0"/>
            </process>
          </operator>
          <connect from_op="MCIO" from_port="example set" to_port="result 1"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="0"/>
          <portSpacing port="sink_result 2" spacing="0"/>
        </process>
      </operator>
    </process>

    You can experiment with edge detection, gaussian blur and other filters...

    Best,
    Václav