00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef SURPRISEMODEL_H_DEFINED
00039 #define SURPRISEMODEL_H_DEFINED
00040
00041 #include "Image/Point2D.H"
00042 #include "Image/Image.H"
00043 #include "Util/MathFunctions.H"
00044
00045 enum SU_KL_BIAS
00046 {
00047 SU_KL_NONE,
00048 SU_KL_STATIC
00049 };
00050
00051
00052
00053
00054
00055
00056 class SurpriseModel
00057 {
00058 public:
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 SurpriseModel(const double updatefac = 0.5, const double sampleval = 0.0,
00069 const double samplevar = 1.0);
00070
00071
00072
00073
00074 virtual ~SurpriseModel();
00075
00076
00077 virtual void reset() = 0;
00078
00079
00080 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00081 const double samplevar = 1.0);
00082
00083
00084 virtual void resetUpdFac(const double updfac);
00085
00086
00087 virtual void load(const double sampleval = 0.0,
00088 const double samplevar = 1.0) = 0;
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 virtual double surprise(const SurpriseModel& sample);
00102
00103
00104
00105
00106
00107
00108 virtual void preComputeHyperParams(const SurpriseModel& sample);
00109
00110
00111
00112
00113
00114 virtual void combineFrom(const Image<SurpriseModel>& models,
00115 const Image<float>& weights);
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 virtual void combineFrom(const Image<SurpriseModel>& models,
00130 const Image<float>& weights,
00131 const Point2D<int>& pos,
00132 const int width, const int height, const int offset);
00133
00134
00135 virtual void setBias(const double slfac,
00136 const double ssfac,
00137 const SU_KL_BIAS klbias);
00138
00139 virtual double getMean() const = 0;
00140
00141
00142 virtual double getVar() const = 0;
00143
00144
00145 virtual double getUpdateFac() const = 0;
00146
00147
00148
00149 protected:
00150 double itsUpdateFac;
00151 double itsInitialVal;
00152 double itsInitialVar;
00153 };
00154
00155
00156
00157
00158
00159 class SurpriseModelSG : public SurpriseModel
00160 {
00161 public:
00162
00163 SurpriseModelSG(const double updatefac = 0.5, const double sampleval = 0.0,
00164 const double samplevar = 1.0);
00165
00166
00167 virtual ~SurpriseModelSG();
00168
00169
00170 virtual void reset();
00171
00172
00173 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00174 const double samplevar = 1.0);
00175
00176
00177 virtual void load(const double sampleval, const double samplevar = 1.0);
00178
00179
00180 virtual double surprise(const SurpriseModelSG& other);
00181
00182
00183 virtual void preComputeHyperParams(const SurpriseModelSG& sample);
00184
00185
00186 virtual void combineFrom(const Image<SurpriseModelSG>& models,
00187 const Image<float>& weights);
00188
00189
00190 virtual void combineFrom(const Image<SurpriseModelSG>& models,
00191 const Image<float>& weights,
00192 const Point2D<int>& pos,
00193 const int width, const int height, const int offset);
00194
00195
00196 virtual double getMean() const;
00197
00198
00199 virtual double getVar() const;
00200
00201
00202 virtual double getUpdateFac() const;
00203
00204 protected:
00205 int itsN;
00206 double itsMean;
00207 double itsVar;
00208 };
00209
00210
00211
00212
00213
00214 class SurpriseModelSP : public SurpriseModel
00215 {
00216 public:
00217
00218 SurpriseModelSP(const double updatefac = 0.5, const double sampleval = 0.0,
00219 const double samplevar = 1.0 );
00220
00221
00222 virtual ~SurpriseModelSP();
00223
00224
00225 virtual void reset();
00226
00227
00228 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00229 const double samplevar = 1.0 );
00230
00231
00232 virtual void load(const double sampleval, const double samplevar = 1.0);
00233
00234
00235 virtual double surprise(const SurpriseModelSP& other);
00236
00237
00238 virtual void preComputeHyperParams(const SurpriseModelSP& sample);
00239
00240
00241 virtual void combineFrom(const Image<SurpriseModelSP>& models,
00242 const Image<float>& weights);
00243
00244
00245 virtual void combineFrom(const Image<SurpriseModelSP>& models,
00246 const Image<float>& weights,
00247 const Point2D<int>& pos,
00248 const int width, const int height, const int offset);
00249
00250
00251 virtual double getMean() const;
00252
00253
00254 virtual double getVar() const;
00255
00256
00257 virtual double getUpdateFac() const;
00258
00259
00260 double getAlpha() const;
00261
00262
00263 double getBeta() const;
00264
00265
00266 void preSetAlpha();
00267
00268 protected:
00269 int itsN;
00270 double itsAlpha;
00271 double itsBeta;
00272
00273 };
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283 class SurpriseModelSP1 : public SurpriseModel
00284 {
00285 public:
00286
00287 SurpriseModelSP1(const double updatefac = 0.5, const double sampleval = 0.0,
00288 const double samplevar = 1.0 );
00289
00290
00291 virtual ~SurpriseModelSP1();
00292
00293
00294 virtual void reset();
00295
00296
00297 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00298 const double samplevar = 1.0 );
00299
00300
00301 virtual void load(const double sampleval, const double samplevar = 1.0);
00302
00303
00304 virtual double surprise(const SurpriseModelSP1& other);
00305
00306
00307 virtual void preComputeHyperParams(const SurpriseModelSP1& sample);
00308
00309
00310 virtual void combineFrom(const Image<SurpriseModelSP1>& models,
00311 const Image<float>& weights);
00312
00313
00314 virtual void combineFrom(const Image<SurpriseModelSP1>& models,
00315 const Image<float>& weights,
00316 const Point2D<int>& pos,
00317 const int width, const int height, const int offset);
00318
00319
00320 virtual double getMean() const;
00321
00322
00323 virtual double getVar() const;
00324
00325
00326 virtual double getUpdateFac() const;
00327
00328
00329 double getAlpha() const;
00330
00331
00332 double getBeta() const;
00333
00334
00335 void preSetAlpha();
00336
00337 protected:
00338 int itsN;
00339 double itsAlpha;
00340 double itsBeta;
00341
00342 };
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353 class SurpriseModelSPC : public SurpriseModel
00354 {
00355 public:
00356
00357 SurpriseModelSPC(const double updatefac = 0.5, const double sampleval = 0.0,
00358 const double samplevar = 1.0 );
00359
00360
00361 virtual ~SurpriseModelSPC();
00362
00363
00364 virtual void reset();
00365
00366
00367 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00368 const double samplevar = 1.0 );
00369
00370
00371 virtual void load(const double sampleval, const double samplevar = 1.0);
00372
00373
00374 virtual double surprise(const SurpriseModelSPC& other);
00375
00376
00377 virtual void preComputeHyperParams(const SurpriseModelSPC& sample);
00378
00379
00380 virtual void combineFrom(const Image<SurpriseModelSPC>& models,
00381 const Image<float>& weights);
00382
00383
00384 virtual void combineFrom(const Image<SurpriseModelSPC>& models,
00385 const Image<float>& weights,
00386 const Point2D<int>& pos,
00387 const int width, const int height, const int offset);
00388
00389
00390 virtual double getMean() const;
00391
00392
00393 virtual double getVar() const;
00394
00395
00396 virtual double getUpdateFac() const;
00397
00398
00399 double getAlpha() const;
00400
00401
00402 double getBeta() const;
00403
00404
00405 void preSetAlpha();
00406
00407 protected:
00408 int itsN;
00409 double itsAlpha;
00410 double itsBeta;
00411 };
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423 class SurpriseModelSPF : public SurpriseModel
00424 {
00425 public:
00426
00427 SurpriseModelSPF(const double updatefac = 0.5, const double sampleval = 0.0,
00428 const double samplevar = 1.0 );
00429
00430
00431 virtual ~SurpriseModelSPF();
00432
00433
00434 virtual void reset();
00435
00436
00437 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00438 const double samplevar = 1.0 );
00439
00440
00441 virtual void load(const double sampleval, const double samplevar = 1.0);
00442
00443
00444 virtual double surprise(const SurpriseModelSPF& other);
00445
00446
00447 virtual void preComputeHyperParams(const SurpriseModelSPF& sample);
00448
00449
00450 virtual void combineFrom(const Image<SurpriseModelSPF>& models,
00451 const Image<float>& weights);
00452
00453
00454 virtual void combineFrom(const Image<SurpriseModelSPF>& models,
00455 const Image<float>& weights,
00456 const Point2D<int>& pos,
00457 const int width, const int height, const int offset);
00458
00459
00460 virtual double getMean() const;
00461
00462
00463 virtual double getVar() const;
00464
00465
00466 virtual double getUpdateFac() const;
00467
00468
00469 double getAlpha() const;
00470
00471
00472 double getBeta() const;
00473
00474
00475 void preSetAlpha();
00476
00477 protected:
00478 int itsN;
00479 double itsAlpha;
00480 double itsBeta;
00481 double itsLastS;
00482 double itsSFac;
00483 };
00484
00485
00486
00487
00488
00489
00490
00491
00492 class SurpriseModelCS : public SurpriseModel
00493 {
00494 public:
00495
00496 SurpriseModelCS(const double updatefac = 0.5, const double sampleval = 0.0,
00497 const double samplevar = 1.0 );
00498
00499
00500 virtual ~SurpriseModelCS();
00501
00502
00503 virtual void reset();
00504
00505
00506 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00507 const double samplevar = 1.0 );
00508
00509
00510 virtual void load(const double sampleval, const double samplevar = 1.0);
00511
00512
00513 virtual double surprise(const SurpriseModelCS& other);
00514
00515
00516 virtual void preComputeHyperParams(const SurpriseModelCS& sample);
00517
00518
00519 virtual void combineFrom(const Image<SurpriseModelCS>& models,
00520 const Image<float>& weights);
00521
00522
00523 virtual void combineFrom(const Image<SurpriseModelCS>& models,
00524 const Image<float>& weights,
00525 const Point2D<int>& pos,
00526 const int width, const int height, const int offset);
00527
00528
00529 virtual double getMean() const;
00530
00531
00532 virtual double getVar() const;
00533
00534
00535 virtual double getUpdateFac() const;
00536
00537
00538 double getAlpha() const;
00539
00540
00541 double getBeta() const;
00542
00543
00544 void preSetAlpha();
00545
00546 protected:
00547 int itsN;
00548 double itsAlpha;
00549 double itsBeta;
00550
00551 };
00552
00553
00554
00555
00556
00557
00558
00559 class SurpriseModelGG : public SurpriseModel
00560 {
00561 public:
00562
00563 SurpriseModelGG(const double updatefac = 0.5, const double sampleval = 0.0,
00564 const double samplevar = 1.0 );
00565
00566
00567 virtual ~SurpriseModelGG();
00568
00569
00570 virtual void reset();
00571
00572
00573 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00574 const double samplevar = 1.0 );
00575
00576
00577 virtual void load(const double sampleval, const double samplevar = 1.0);
00578
00579
00580 virtual double surprise(const SurpriseModelGG& other);
00581
00582
00583 virtual void preComputeHyperParams(const SurpriseModelGG& sample);
00584
00585
00586 virtual void combineFrom(const Image<SurpriseModelGG>& models,
00587 const Image<float>& weights);
00588
00589
00590 virtual void combineFrom(const Image<SurpriseModelGG>& models,
00591 const Image<float>& weights,
00592 const Point2D<int>& pos,
00593 const int width, const int height, const int offset);
00594
00595
00596 virtual double getMean() const;
00597
00598
00599 virtual double getVar() const;
00600
00601
00602 virtual double getUpdateFac() const;
00603
00604
00605 virtual void setBias(const double slfac,
00606 const double ssfac,
00607 const SU_KL_BIAS klbias);
00608
00609
00610 double getAlpha() const;
00611
00612
00613 double getBeta() const;
00614
00615 protected:
00616 bool itsCombineFromRun;
00617 int itsN;
00618 SU_KL_BIAS itsJointKLBiasType;
00619 double itsAlpha;
00620 double itsBeta;
00621 double itsMean;
00622 double itsVar;
00623 double itsSig;
00624 double itsSum;
00625 double itsSS;
00626 double itsWeightSum;
00627 double itsSLfac;
00628 double itsSSfac;
00629
00630 };
00631
00632
00633
00634
00635
00636 class SurpriseModelPM : public SurpriseModel
00637 {
00638 public:
00639
00640 SurpriseModelPM(const double updatefac = 0.5, const double sampleval = 0.0,
00641 const double samplevar = 1.0 );
00642
00643
00644 virtual ~SurpriseModelPM();
00645
00646
00647 virtual void reset();
00648
00649
00650 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00651 const double samplevar = 1.0 );
00652
00653
00654 virtual void load(const double sampleval, const double samplevar = 1.0);
00655
00656
00657 virtual double surprise(const SurpriseModelPM& other);
00658
00659
00660 virtual void preComputeHyperParams(const SurpriseModelPM& sample);
00661
00662
00663 virtual void combineFrom(const Image<SurpriseModelPM>& models,
00664 const Image<float>& weights);
00665
00666
00667 virtual void combineFrom(const Image<SurpriseModelPM>& models,
00668 const Image<float>& weights,
00669 const Point2D<int>& pos,
00670 const int width, const int height, const int offset);
00671
00672
00673 virtual double getMean() const;
00674
00675
00676 virtual double getVar() const;
00677
00678
00679 virtual double getUpdateFac() const;
00680
00681 protected:
00682 int itsN;
00683
00684 double itsSample;
00685 double itsAlpha0;
00686 double itsAlpha1;
00687 double itsAlpha2;
00688 double itsBeta0;
00689 double itsBeta1;
00690 double itsBeta2;
00691 double itsInitBeta;
00692 double itsExpectAlpha1;
00693 double itsExpectAlpha2;
00694 double itsXBar1;
00695 double itsXBar2;
00696 double itsLgamma1;
00697 double itsLgamma2;
00698 };
00699
00700
00701
00702
00703
00704
00705 class SurpriseModelOD : public SurpriseModel
00706 {
00707 public:
00708
00709 SurpriseModelOD(const double updatefac = 0.5, const double sampleval = 0.0,
00710 const double samplevar = 1.0 );
00711
00712
00713 virtual ~SurpriseModelOD();
00714
00715
00716 virtual void reset();
00717
00718
00719 virtual void init(const double updatefac = 0.5, const double sampleval = 0.0,
00720 const double samplevar = 1.0 );
00721
00722
00723 virtual void load(const double sampleval, const double samplevar = 1.0);
00724
00725
00726 virtual double surprise(const SurpriseModelOD& other);
00727
00728
00729 virtual void preComputeHyperParams(const SurpriseModelOD& sample);
00730
00731
00732 virtual void combineFrom(const Image<SurpriseModelOD>& models,
00733 const Image<float>& weights);
00734
00735
00736 virtual void combineFrom(const Image<SurpriseModelOD>& models,
00737 const Image<float>& weights,
00738 const Point2D<int>& pos,
00739 const int width, const int height, const int offset);
00740
00741
00742 virtual double getMean() const;
00743
00744
00745 virtual double getVar() const;
00746
00747
00748 virtual double getUpdateFac() const;
00749
00750 protected:
00751 int itsN;
00752 double itsLambda;
00753 };
00754
00755 #endif
00756
00757
00758
00759
00760
00761