22 using namespace KKMLL;
34 numOfFolds (_numOfFolds),
35 numOfOrderings (_numOfOrderings),
43 CreateOrderings (_log);
50 const KKStr& _indexFileName,
59 indexFileName
(_indexFileName
),
60 numOfFolds (_numOfFolds),
61 numOfOrderings (_numOfOrderings),
67 CreateOrderings (_log);
93 _log.Level (-1) << endl << endl
94 <<
"Orderings *** ERROR *** No File Name in FeatureVectorList object." << endl
100 bool successful =
true;
103 Load (indexFileName, successful, _log);
106 _log.Level (-1) << endl
107 <<
"Orderings::Orderings Error Loading existing ordering[" << indexFileName <<
"]" << endl
127 featureFileName
(_featureFileName
),
135 bool changesdMade =
false;
136 bool successful =
true;
151 _log.Level (-1) << endl
152 <<
"Orderings ***ERROR*** CancelFlag was set, load was canceled." << endl
161 _log.Level (-1) << endl
162 <<
"Orderings ***ERROR*** Loading Feature File[" << featureFileName <<
"]" << endl
171 Load (indexFileName, successful, _log);
174 _log.Level (-1) << endl
175 <<
"Orderings *** ERROR *** Loading Index File[" << indexFileName <<
"]" << endl
203 _log.Level (-1) << endl
204 <<
"CreateOrderingsObjFromFileIfAvaliable *** ERROR *** FileName empty." << endl
218 _log.Level (-1) << endl
219 <<
"CreateOrderingsObjFromFileIfAvaliable *** ERROR *** Dimension Mismatched." << endl
221 <<
"Dimensions Expected NumOfOrderings[" << _numOfOrderings <<
"] NumOfFolds[" << _numOfFolds <<
"]" << endl
222 <<
"Dimensions Found NumOfOrderings[" << orderings->NumOfOrderings () <<
"] NumOfFolds[" << orderings->NumOfFolds () <<
"]" << endl
231 orderings =
new Orderings (_data, _numOfOrderings, _numOfFolds, _log);
254 while (orderings.size () < numOfOrderings)
256 workList->RandomizeOrder ();
257 FeatureVectorListPtr ordering = workList->StratifyAmoungstClasses (mlClasses, -1, numOfFolds, log);
258 orderings.push_back (ordering);
269 while (orderings.size () > 0)
271 FeatureVectorListPtr ordering = orderings.back ();
272 orderings.pop_back ();
280 bool successful =
true;
281 Load (indexFileName, successful, log);
294 log.Level (10) << endl << endl << endl << endl;
296 log.Level (10) <<
"Orderings::Load indexFileName[" << _indexFileName <<
"]" << endl;
301 indexFileName
= _indexFileName;
305 log.Level (-1) << endl << endl
306 <<
"Orderings::Load *** ERROR *** No Index File Name Specified." << endl
313 ifstream i (indexFileName.Str ());
318 log.Level (-1) << endl << endl
319 <<
"Orderings::Load *** ERROR *** Opening[" << indexFileName <<
"]" << endl
330 cout <<
"Beginning Orderings Line[" << line <<
"]" << endl;
331 }
while ((!i.eof ()) && (line.Empty ()));
334 if (line
!= "//ORDERINGS")
336 log.Level (-1) << endl << endl
337 <<
"Orderings::Load *** ERROR *** Invalid File Heading[" << indexFileName <<
"]" << endl
338 <<
" First Line[" << line <<
"]" << endl
339 <<
" Expected [//Orderings]" << endl
348 bool headerFields =
true;
352 while (headerFields && (!i.eof ()))
357 if (field ==
"//FEATUREFILENAME")
358 i >> featureFileName;
360 else if (field ==
"//NUMOFORDERINGS")
363 else if (field ==
"//NUMOFFOLDS")
366 else if (field ==
"//ENDOFHEADER")
367 headerFields =
false;
370 if (numOfOrderings < 1)
372 log.Level (-1) << endl << endl
373 <<
"Orderings::Load *** ERROR *** Invalid Header Field[" << indexFileName <<
"]" << endl
374 <<
" NumOfOrderings[" << numOfOrderings <<
"]" << endl
383 log.Level (10) <<
"Orderings::Load featureFileName[" << featureFileName <<
"]" << endl;
384 log.Level (10) <<
"Orderings::Load numOfOrderings [" << numOfOrderings <<
"]" << endl;
385 log.Level (10) <<
"Orderings::Load numOfFolds [" << numOfFolds <<
"]" << endl;
389 for (orderingIDX = 0; orderingIDX < numOfOrderings; orderingIDX++)
391 vector<
bool> indexLoaded (data->QueueSize (),
false);
396 orderings.push_back (ordering);
403 if ((i.eof ()) || (field !=
"//ORDERINGNUM"))
405 log.Level (-1) << endl << endl
406 <<
"Orderings::Load *** ERROR *** Index File [" << indexFileName <<
"] Incomplete." << endl
417 if (orderingNum !=
kkint32 (orderingIDX))
419 log.Level (-1) << endl << endl
420 <<
"Orderings::Load *** ERROR *** Orderings out of sequence." << endl
421 <<
" Expected[" << orderingIDX <<
"]" << endl
422 <<
" Found [" << orderingNum <<
"]" << endl
432 if (field
!= "COUNT")
434 log.Level (-1) << endl << endl
435 <<
"Orderings::Load *** ERROR *** Orderings out of sequence." << endl
436 <<
" Missing Count Label for Ordering[" << orderingNum <<
"]" << endl
444 i >> imagesInOrdering;
451 while ((field !=
"//ENDOFORDERING") && (!i.eof ()))
453 kkint32 imageIdx = atoi (field.Str ());
455 if ((imageIdx < 0) || (imageIdx >= data->QueueSize ()))
457 log.Level (-1) << endl << endl
458 <<
"Orderings::Load *** ERROR *** Invalid Index Encountered." << endl
459 <<
" Index [" << imageIdx <<
"]" << endl
460 <<
" Size of Data [" << data->QueueSize () <<
"]" << endl
468 if (indexLoaded[imageIdx])
470 log.Level (-1) << endl << endl
471 <<
"Orderings::Load *** ERROR *** Duplicate Index in same ordering." << endl
472 <<
" Index [" << imageIdx <<
"]" << endl
473 <<
" OrderingNum [" << orderingIDX <<
"]" << endl
481 indexLoaded[imageIdx] =
true;
482 ordering->PushOnBack (data->IdxToPtr (imageIdx));
488 if (ordering->QueueSize () < imagesInOrdering)
490 log.Level (-1) << endl << endl
491 <<
"Orderings::Load *** ERROR *** Missing Indexes for Ordering[" << orderingIDX <<
"]." << endl
492 <<
" Expected [" << imagesInOrdering <<
"]" << endl
493 <<
" Found [" << ordering->QueueSize () <<
"]" << endl
501 if (field
== "//ENDOFORDERING")
504 i >> endOfOrderingNum;
507 cout <<
"Ordering " << orderingIDX <<
" of " << numOfOrderings <<
" Loaded" << endl;
510 if (orderings.size () != numOfOrderings)
512 log.Level (-1) << endl << endl
513 <<
"Orderings::Load *** ERROR *** Not orderings were loaded." << endl
514 <<
" Expected [" << numOfOrderings <<
"]" << endl
515 <<
" Number Found [" << (kkuint32)orderings.size () <<
"]" << endl
535 _log.Level (-1) << endl << endl
536 <<
"Orderings::Save *** ERROR *** No Index File Name Specified." << endl
543 indexFileName
= _indexFileName;
555 map<FeatureVectorPtr,kkint32> index;
557 for (idx = 0; idx < data->QueueSize (); idx++)
559 FeatureVectorPtr example = data->IdxToPtr (idx);
560 index.insert (pair<FeatureVectorPtr,kkint32>(example, idx));
563 KKStr tempName = featureFileName;
565 tempName
= indexFileName;
567 map<FeatureVectorPtr,kkint32>::const_iterator indexIDX;
569 ofstream o (indexFileName.Str ());
571 o <<
"//Orderings" << endl;
572 o <<
"//FeatureFileName" <<
"\t" << tempName << endl;
573 o <<
"//NumOfOrderings" <<
"\t" << numOfOrderings << endl;
574 o <<
"//NumOfFolds" <<
"\t" << numOfFolds << endl;
575 o <<
"//DateCreated" <<
"\t" << osGetLocalDateTime () << endl;
576 o <<
"//EndOfHeader" << endl;
580 for (orderingIDX = 0; orderingIDX < orderings.size (); orderingIDX++)
582 FeatureVectorListPtr ordering = orderings[orderingIDX];
583 o <<
"//OrderingNum" <<
"\t" << orderingIDX <<
"\t" <<
"Count" <<
"\t" << ordering->QueueSize () << endl;
585 FeatureVectorList::const_iterator idx;
586 for (idx = ordering->begin (); idx != ordering->end (); idx++)
588 const FeatureVectorPtr example = *idx;
589 indexIDX = index.find (example);
590 if (indexIDX == index.end ())
596 errMsg <<
"Orderings::Save ***ERROR*** FileName[" << indexFileName <<
"] Could not locate Image in data list";
597 cerr << endl << errMsg << endl << endl;
598 throw KKException (errMsg);
601 o << indexIDX->second << endl;
603 o <<
"//EndOfOrdering" <<
"\t" << orderingIDX << endl;
605 cout <<
"Saved " << orderingIDX <<
" of " << orderings.size () << endl;
616 if ((orderingIdx >= orderings.size ()))
619 errMsg <<
"Orderings::Ordering ***ERROR*** Index Out Of Range; Number Of Orderings [" << (kkuint32)orderings.size () <<
"] OrderingIdx [" << (kkuint32)orderingIdx <<
"]";
620 cerr << endl << errMsg << endl << endl;
621 throw KKException (errMsg);
624 return orderings[orderingIdx];
Orderings(const FeatureVectorListPtr _data, const KKStr &_indexFileName, kkuint32 _numOfOrderings, kkuint32 _numOfFolds, RunLog &_log)
Constructs a Orderings object from a FeatureLectorList object.
Used to maintain multiple orderings of a single list of FeatureVector objects.
kkuint32 NumOfFolds() const
void Save(const KKStr &_indexFileName, RunLog &_log)
KKStr osRemoveExtension(const KKStr &_fullFileName)
FeatureVectorList(const FeatureVectorList &examples, bool _owner)
Create a duplicate list, depending on the '_owner' parameter may also duplicate the contents...
MLClassListPtr ExtractListOfClasses() const
kkuint32 NumOfOrderings() const
const FileDescPtr FileDesc() const
bool operator==(const char *rtStr) const
KKStr operator+(const char *right) const
unsigned __int32 kkuint32
virtual FeatureVectorListPtr LoadFeatureFile(const KKStr &_fileName, MLClassList &_mlClasses, kkint32 _maxCount, VolConstBool &_cancelFlag, bool &_successful, bool &_changesMade, RunLog &_log)
Loads the contents of a feature data file and returns a ImageFeaturesList container object...
FeatureVectorList(FileDescPtr _fileDesc, bool _owner)
Will create a new empty list of FeatureVector's.
KKStr & operator=(KKStr &&src)
bool operator!=(const char *rtStr) const
Orderings(const KKStr &_featureFileName, FeatureFileIOPtr _driver, RunLog &_log, bool &cancelFlag)
Constructs Orderings of a FeatureVectorList from a previous construction that was saved in a data fil...
Container class for FeatureVector derived objects.
KKStr(const KKStr &str)
Copy Constructor.
FeatureFileIO * FeatureFileIOPtr
const FeatureVectorListPtr Ordering(kkuint32 orderingIdx) const
static KKStr Concat(const std::vector< std::string > &values)
Concatenates the list of 'std::string' strings.
void Upper()
Converts all characters in string to their Upper case equivalents via 'toupper'.
bool osFileExists(const KKStr &_fileName)
const KKStr & FileName() const
KKStr & operator=(const KKStr &src)
Used for logging messages.
void EncodeProblem(const struct svm_paramater ¶m, struct svm_problem &prob_in, struct svm_problem &prob_out)
static OrderingsPtr CreateOrderingsObjFromFileIfAvaliable(const FeatureVectorListPtr _data, kkuint32 _numOfOrderings, kkuint32 _numOfFolds, RunLog &_log)
Constructs a Orderings object for a specified FeatureVectorList.
Orderings(FeatureVectorListPtr _data, RunLog &_log)
Constructs a Orderings objects for a specified FeatureVectorList using a previously built Orderings d...
Maintains a list of MLClass instances.