yolo darknet的启示(突破6bn+2residual,cudnn实现CBL)

📅 2026/7/11 2:29:55 👁️ 阅读次数 📝 编程学习
yolo darknet的启示(突破6bn+2residual,cudnn实现CBL)

搞工业机器视觉的人,有一种天生的喜欢yolo!

今天,7bn+3residual,这说明,bn层和残差块可以继续添加!

还是要有怀疑和尝试的精神!

其实,在cifar10上,7bn+3residual感觉有点过度,如果是训练,够用就好!如果是da分辨率的图像,继续增加bn层和残差块,才变得有实际意义!

所以,残差块尝试降维后,又升维,效果不好!

7bn+3residual训练得分也一般,但尝试一种新东西,跑起来,已经是成功,然后再慢慢改进!

也就是说,我可以尝试大分辨率的训练了!

32*32的cifar训练慢慢可以宣告结束了!

看看训练40轮没崩溃的效果:

先看架构:

learn rate:1e-05
轮次:38
时间: 23110.236328 ms
train Classification result: 19.24% ok (used 49984 images)
均值: 0.1271439195,方差:0.0028827651
均值: -0.2113353908,方差:0.0004993885
均值: 0.3338155448,方差:0.0014339959
均值: 0.2335036546,方差:0.0004293791
均值: 0.1801297963,方差:0.0017966304
均值: 0.0047765928,方差:0.0033084354
均值: -0.1828130037,方差:0.0019517142
均值: 0.3012771308,方差:0.0007776191
均值: 0.0036486187,方差:0.0018622045
均值: -0.0599044822,方差:0.0007307360
均值: 0.1259885430,方差:0.0016608177
均值: 0.2196586430,方差:0.0008038962
均值: -0.1785935909,方差:0.0003868770
均值: -0.1551580429,方差:0.0012674336
均值: 0.0092445854,方差:0.0011179807
均值: 0.0075621014,方差:0.0006979248
均值: 0.1750876009,方差:0.0006878381
均值: 0.1400706321,方差:0.0016453919
均值: 0.1041845605,方差:0.0003682757
均值: 0.0642209798,方差:0.0007756161
均值: 0.1715795100,方差:0.0008800479
均值: -0.1564081758,方差:0.0002486607
均值: 0.2390058041,方差:0.0005841126
均值: -0.1557001919,方差:0.0039955424
均值: 0.0375819169,方差:0.0011390452
均值: 0.3267762959,方差:0.0005321549
均值: 0.0500742793,方差:0.0014510320
均值: 0.0603393391,方差:0.0072002909
均值: 0.1078442261,方差:0.0029186588
均值: 0.2713217437,方差:0.0013740987
均值: -0.1449769288,方差:0.0060739527
均值: 0.2905433178,方差:0.0003204170
rb均值: -0.0390642621,rb方差:0.000916633173
rb均值: 0.1794353426,rb方差:0.001492809737
rb均值: 0.3245928884,rb方差:0.000380433223
rb均值: 0.2684802413,rb方差:0.000812193961
rb均值: -0.0965696499,rb方差:0.001555342809
rb均值: 0.0534199066,rb方差:0.000887580740
rb均值: 0.0119903907,rb方差:0.001486138091
rb均值: 0.0829400867,rb方差:0.000642761705
rb均值: -0.0717621446,rb方差:0.002448620042
rb均值: 0.0587351732,rb方差:0.000986455474
rb均值: 0.2032028288,rb方差:0.000969655346
rb均值: 0.2148298770,rb方差:0.001120114815
rb均值: 0.0991356224,rb方差:0.001362916781
rb均值: 0.0019956066,rb方差:0.001093696803
rb均值: -0.1091915220,rb方差:0.003511046292
rb均值: 0.0623876266,rb方差:0.000529425452
rb均值: -0.4338119030,rb方差:0.001276447903
rb均值: -0.3760890961,rb方差:0.001803981722
rb均值: -0.4306257665,rb方差:0.000915475946
rb均值: -0.3411856890,rb方差:0.003737014951
rb均值: -0.1302397102,rb方差:0.000747695740
rb均值: 0.1900480092,rb方差:0.003162280889
rb均值: 0.1510370374,rb方差:0.001126138959
rb均值: -0.0786980689,rb方差:0.000798819819
rb均值: -0.1488232762,rb方差:0.001185730449
rb均值: 0.3017099798,rb方差:0.000985594583
rb均值: -0.0677339882,rb方差:0.000390912784
rb均值: 0.1564132422,rb方差:0.004587723408
rb均值: 0.0498987287,rb方差:0.003765411908
rb均值: 0.0169767272,rb方差:0.001924954704
rb均值: 0.3526547551,rb方差:0.002180872019
rb均值: 0.1596872807,rb方差:0.000654597068
rb均值: 0.3678979576,rb方差:0.002242948161
rb均值: 0.0205265284,rb方差:0.001346461824
rb均值: -0.2260576189,rb方差:0.001606544480
rb均值: -0.2391085476,rb方差:0.001044049975
rb均值: 0.0819803253,rb方差:0.002171222819
rb均值: -0.0897822455,rb方差:0.001365703763
rb均值: 0.1101164147,rb方差:0.002222929616
rb均值: -0.4422039092,rb方差:0.002460170537
rb均值: -0.1877422482,rb方差:0.000820508401
rb均值: -0.0126300575,rb方差:0.004124301486
rb均值: 0.0493747629,rb方差:0.003613920882
rb均值: -0.0872443095,rb方差:0.000847513555
rb均值: 0.1319258958,rb方差:0.002113292692
rb均值: 0.3016111851,rb方差:0.003641376039
rb均值: -0.2939792275,rb方差:0.003062962322
rb均值: 0.1426689774,rb方差:0.002235667547
rb均值: 0.0328550823,rb方差:0.001425898517
rb均值: 0.3701271713,rb方差:0.001716276980
rb均值: 0.1968962997,rb方差:0.007316167001
rb均值: -0.0954261795,rb方差:0.001055009197
rb均值: -0.1482347995,rb方差:0.002489172854
rb均值: 0.0174233261,rb方差:0.009699993767
rb均值: 0.2641937137,rb方差:0.001379133901
rb均值: 0.1295230538,rb方差:0.000974509458
rb均值: 0.2974347174,rb方差:0.001759281266
rb均值: 0.2845378816,rb方差:0.002030129312
rb均值: -0.1182849258,rb方差:0.002581670880
rb均值: 0.0224006120,rb方差:0.001664460986
rb均值: -0.1690917015,rb方差:0.001387158409
rb均值: -0.1952017397,rb方差:0.002503600903
rb均值: 0.1507936865,rb方差:0.006386510096
rb均值: 0.0322905071,rb方差:0.001199360704
均值: -0.1121454313,方差:0.0128701925
均值: 0.0826563984,方差:0.0030856135
均值: 0.1004444584,方差:0.0070941313
均值: 0.1082457453,方差:0.0089840367
均值: 0.2026736587,方差:0.0091302283
均值: 0.3454448283,方差:0.0043688808
均值: 0.0630316660,方差:0.0130874431
均值: 0.0934243500,方差:0.0112322327
均值: -0.1457915306,方差:0.0143400552
均值: -0.2044883221,方差:0.0099089155
均值: 0.1393559575,方差:0.0141589725
均值: -0.1394432634,方差:0.0093419114
均值: -0.1129246503,方差:0.0050147418
均值: 0.1790036410,方差:0.0091674775
均值: 0.0171594024,方差:0.0121004740
均值: -0.0491469540,方差:0.0048262868
均值: -0.0430094302,方差:0.0094683459
均值: 0.3478636444,方差:0.0134560131
均值: -0.1178697422,方差:0.0047718785
均值: 0.0500279590,方差:0.0029003024
均值: 0.1096612513,方差:0.0103722103
均值: 0.2116708905,方差:0.0093749007
均值: 0.2008302212,方差:0.0059379786
均值: -0.0042532906,方差:0.0063069710
均值: -0.0775027722,方差:0.0034302848
均值: 0.1178009585,方差:0.0060313172
均值: -0.0291974209,方差:0.0059973770
均值: -0.0018592019,方差:0.0124519020
均值: 0.0347059816,方差:0.0054867892
均值: 0.1957944036,方差:0.0219890047
均值: -0.0206267443,方差:0.0061817211
均值: 0.0923775882,方差:0.0066534546
rb均值: -0.1468503624,rb方差:0.514619410038
rb均值: 1.0945937634,rb方差:1.118079066277
rb均值: 0.2037583590,rb方差:1.298680782318
rb均值: 2.0962805748,rb方差:1.075383067131
rb均值: 0.3219115734,rb方差:1.027411937714
rb均值: -0.1597445756,rb方差:0.440882861614
rb均值: 0.4391078949,rb方差:0.481568038464
rb均值: -0.6703985929,rb方差:1.297284722328
rb均值: 0.3011008203,rb方差:0.935113966465
rb均值: -1.6486603022,rb方差:0.721871316433
rb均值: -0.1557932496,rb方差:1.694716691971
rb均值: 0.0033881452,rb方差:0.392967432737
rb均值: -0.5664314032,rb方差:0.547676563263
rb均值: 0.0150661059,rb方差:1.302479147911
rb均值: -0.7746558189,rb方差:0.574206888676
rb均值: 0.8685243726,rb方差:0.482303768396
rb均值: 0.1834148467,rb方差:2.323847293854
rb均值: 0.3039263189,rb方差:0.479439407587
rb均值: 0.6128163934,rb方差:0.769122064114
rb均值: 0.6830773354,rb方差:1.275282025337
rb均值: 1.2293783426,rb方差:0.393769174814
rb均值: -0.0458886512,rb方差:0.730980515480
rb均值: -0.3260147870,rb方差:2.595458507538
rb均值: -0.3997245133,rb方差:0.556357145309
rb均值: -0.4381921589,rb方差:1.052927494049
rb均值: -1.0017154217,rb方差:1.166311383247
rb均值: -1.3151785135,rb方差:0.436381548643
rb均值: -0.3907709718,rb方差:0.907785892487
rb均值: 0.7108307481,rb方差:2.755680322647
rb均值: 0.2597629428,rb方差:0.645223617554
rb均值: 0.0430130921,rb方差:1.012958168983
rb均值: 1.1136987209,rb方差:0.864887416363
rb均值: -0.1154021248,rb方差:0.021006459370
rb均值: 0.1156152189,rb方差:0.023414060473
rb均值: 0.0892219990,rb方差:0.019505828619
rb均值: 0.1396925151,rb方差:0.024844396859
rb均值: 0.0567088872,rb方差:0.032241478562
rb均值: -0.1823167950,rb方差:0.031778484583
rb均值: 0.0352640338,rb方差:0.012037058361
rb均值: 0.0718829036,rb方差:0.032396856695
rb均值: 0.1509544998,rb方差:0.030641095713
rb均值: -0.0264862683,rb方差:0.019659599289
rb均值: -0.0706780255,rb方差:0.028138013557
rb均值: 0.0375175588,rb方差:0.035386458039
rb均值: -0.1408219486,rb方差:0.013301557861
rb均值: -0.0002306042,rb方差:0.026158610359
rb均值: -0.1571017206,rb方差:0.017769843340
rb均值: -0.0218536295,rb方差:0.032844435424
rb均值: -0.0268377271,rb方差:0.029085701331
rb均值: -0.0219340120,rb方差:0.038424011320
rb均值: -0.0923893228,rb方差:0.055522482842
rb均值: 0.0476764515,rb方差:0.013533934020
rb均值: 0.1009622887,rb方差:0.016005380079
rb均值: 0.0890090764,rb方差:0.018030153587
rb均值: -0.0389258265,rb方差:0.020700739697
rb均值: -0.1287163496,rb方差:0.019969634712
rb均值: 0.0730661452,rb方差:0.013762272894
rb均值: -0.0554218516,rb方差:0.015819987282
rb均值: -0.1501842886,rb方差:0.030016310513
rb均值: -0.1658928543,rb方差:0.034830793738
rb均值: -0.0273568984,rb方差:0.018832661211
rb均值: 0.0450271070,rb方差:0.015628635883
rb均值: -0.0651334748,rb方差:0.016027862206
rb均值: 0.0288194735,rb方差:0.024744547904
均值: 162.3019866943,方差:0.1462335289
均值: 37.7166290283,方差:0.0759480372
均值: 134.8147888184,方差:0.0658562407
均值: 16.2825698853,方差:0.0348935798
均值: 196.1622772217,方差:-0.3660278022
均值: 15.2907056808,方差:0.0582733266
均值: -10.4346265793,方差:0.1056058630
均值: -7.6367063522,方差:0.0712258071
均值: 11.6941814423,方差:0.0874804407
均值: 197.7062683105,方差:0.0905932784
均值: 72.6540603638,方差:-0.0178958066
均值: -8.0940704346,方差:0.0377495624
均值: 43.9305534363,方差:0.0501453355
均值: -11.5583734512,方差:0.0427870154
均值: -7.3656725883,方差:0.0893332139
均值: -11.5264072418,方差:0.0225695707
均值: -7.3012747765,方差:0.0775645748
均值: -11.5213766098,方差:0.0186793674
均值: -3.9215676785,方差:0.0615919903
均值: 109.8956527710,方差:0.0383495651
均值: -11.9310550690,方差:-0.1544442922
均值: 164.0859222412,方差:0.1094555333
均值: 92.2024230957,方差:0.1226359308
均值: -9.2814674377,方差:0.0299011376
均值: -11.0127735138,方差:0.1469851434
均值: -4.9676375389,方差:0.0304383859
均值: -3.2968242168,方差:0.0560424440
均值: -0.2839553952,方差:-1.0610678196
均值: 146.9124450684,方差:0.1008401364
均值: 38.5788154602,方差:0.0858640894
均值: 222.8332824707,方差:-0.1655865610
均值: -6.6083993912,方差:0.0503053106
rb均值: -39.1166839600,rb方差:0.011960560456
rb均值: 36.0514106750,rb方差:0.002342209220
rb均值: 20.4288654327,rb方差:0.005140264053
rb均值: -38.4431114197,rb方差:0.001903682598
rb均值: -66.6534423828,rb方差:0.001963926712
rb均值: -42.2224464417,rb方差:0.003511637915
rb均值: 27.5382671356,rb方差:0.018335783854
rb均值: 1.8339958191,rb方差:0.043879859149
rb均值: 44.8379707336,rb方差:0.000690233486
rb均值: -21.7206840515,rb方差:0.006009255070
rb均值: 42.9280624390,rb方差:0.007272493094
rb均值: 20.2691192627,rb方差:0.013680236414
rb均值: -42.3653717041,rb方差:0.005167781841
rb均值: 50.2898178101,rb方差:0.007105726749
rb均值: 7.0378370285,rb方差:0.002605774440
rb均值: 41.1988143921,rb方差:0.008458645083
rb均值: -21.4763679504,rb方差:0.011773868464
rb均值: 40.1553535461,rb方差:0.014933293685
rb均值: 4.4795641899,rb方差:0.023558568209
rb均值: -37.2808074951,rb方差:0.008539400995
rb均值: 53.6717453003,rb方差:0.019362282008
rb均值: -38.2880134583,rb方差:0.000689849432
rb均值: -61.2706489563,rb方差:0.002354579512
rb均值: 27.1242465973,rb方差:0.010402738117
rb均值: 29.0371780396,rb方差:0.003677292028
rb均值: -41.5852890015,rb方差:0.003607605351
rb均值: 5.0134110451,rb方差:0.002446315484
rb均值: 20.6500549316,rb方差:0.004206457175
rb均值: -52.5558280945,rb方差:0.006359080318
rb均值: -5.0455164909,rb方差:-0.001104559749
rb均值: 21.3165397644,rb方差:0.001048562350
rb均值: -21.5110721588,rb方差:0.008319489658
rb均值: 3.0679037571,rb方差:41.704158782959
rb均值: -3.2689187527,rb方差:4.265918731689
rb均值: -17.9928474426,rb方差:29.889366149902
rb均值: -2.6091468334,rb方差:7.338628292084
rb均值: -33.2683486938,rb方差:251.519409179688
rb均值: 1.2888743877,rb方差:4.909247398376
rb均值: -0.2729818821,rb方差:1.386992931366
rb均值: -5.6042361259,rb方差:4.036290168762
rb均值: -1.6061414480,rb方差:3.426803112030
rb均值: -27.4495391846,rb方差:85.002601623535
rb均值: -8.2270507812,rb方差:6.764956474304
rb均值: 3.9059045315,rb方差:1.514521837234
rb均值: -2.0609478951,rb方差:6.957289695740
rb均值: 2.5321967602,rb方差:3.071455240250
rb均值: 4.2376461029,rb方差:2.189170837402
rb均值: 2.9861218929,rb方差:2.027086734772
rb均值: -3.2896912098,rb方差:10.522394180298
rb均值: 0.5296290517,rb方差:2.545908927917
rb均值: -5.3655996323,rb方差:3.733109235764
rb均值: 1.3859844208,rb方差:0.937664985657
rb均值: -5.6631474495,rb方差:6.322004795074
rb均值: 11.7142086029,rb方差:19.921474456787
rb均值: -8.5998029709,rb方差:9.454778671265
rb均值: -1.9182958603,rb方差:4.644729614258
rb均值: 5.3644919395,rb方差:1.137774586678
rb均值: 3.9211273193,rb方差:5.031405925751
rb均值: -0.0594671182,rb方差:1.945767402649
rb均值: 5.7695345879,rb方差:2.947789192200
rb均值: -21.5667533875,rb方差:40.075798034668
rb均值: -10.8491811752,rb方差:7.029078483582
rb均值: -17.3137226105,rb方差:58.248363494873
rb均值: -0.4448814094,rb方差:1.652493476868

看到没,反差中还有负值!

我的理解是:bn块和残差块过度导致有残差块失效(残差起作用了),出现负值!不知道理解对不对!

训练都快40轮了,该正常都正常了!

顺便,我们仿照残差块residualExt2类,写一个CBL类!

刚刚写好,试了下,跑起来,说明正常!

layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, 5, 64, 32, 32, 3, 1, 1));
layers.emplace_back(std::make_shared<BN>(cudnn, batch, 64, 32, 32));
layers.emplace_back(std::make_shared<LeakyRL>(cudnn, batch, 64, 32, 32));

先试了试代替这3句话!

layers.emplace_back(std::make_shared<CBL>(cudnn, batch, 5, 64, 32, 32, 3, 1));

具体类如下:

classCBL:public Layer {//202607102154新增darknet cbl模块!cudnn实现!
public:
CBL(cudnnHandle_t& cudnn_, int batch_, int c, int co,int h, int w,int juanjihe,int pading) : cudnn(cudnn_), batch(batch_)
, _ci(c), _co(co), _h(h), _w(w),_jjh(juanjihe),_pad(pading) {



layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, _ci, _co, _h, _w, _jjh, 1, _pad));

layers.emplace_back(std::make_shared<BN>(cudnn, batch, _co, _h, _w));

layers.emplace_back(std::make_shared<LeakyRL>(cudnn, batch, _co, _h, _w));//20260710收到darknet的启发1506

cudaMalloc(&output, batch * _co * _h * _w * sizeof(float));
//观察看这个_ci对不对!
cudaMalloc(&grad_input, batch * _ci * _h * _w * sizeof(float));
}
void forward(float* input_)override {
input = input_;

for (const auto& l : layers) {
l->forward(input);
input = l->get_output();
}


}
void forward2(float* input_)override {
input = input_;

for (const auto& l : layers) {
l->forward2(input);
input = l->get_output();
}

}

void backward(float* grad_output)override {
float* grad = grad_output;

for (int i = layers.size() - 1; i >= 0; i--) {
layers[i]->backward(grad);
grad = layers[i]->get_grad_input();
}


int NN = batch * _ci * _h * _w;

cudaMemcpy(grad_input, grad, sizeof(float) * NN, cudaMemcpyDeviceToDevice);
error_handling(cudaGetLastError());
}
int getname() override { return 4; }
float* get_output() override { return output; }
float* get_grad_input() override { return grad_input; }
void update(float lr) {
for (const auto& l : layers) {
l->update(lr);

}
}


~CBL() {
cudaFree(output);
cudaFree(grad_input);
}


private:
// cublasHandle_t &cublas;
int _ci, _h, _w,_co;
int _jjh, _pad;
cudnnHandle_t& cudnn;
int batch;
float* input, * output, * grad_input;
//float* input2;
//float* d_residual;
public:
std::vector<std::shared_ptr<Layer>> layers;

};