精华内容
下载资源
问答
  • 先找一个正常的训练过程图loss的下降趋势,或者一下我现在在训练的,这个超参数是按照网上设置的应该可以有好效果 看看程序是怎么嫁接YOLO的 YOLOv1算法最后输出的检测结果为7x7x30的形式,其中30个...

    超参

    致谢:https://www.cnblogs.com/wujianming-110117/p/12934969.html

    1 上一章提到的VOC数据集重新训练的方法中涉及到的class-number,以及fiters=(class+5)x3

    2  避免过拟合最重要的参数是:batch_size,YOLOv4中还有一个subdivisions参数,两者是根据GPU的内存决定的

    3 图片的大小要是32的倍数

    4 max_batches是最大的训练次数,一般为max_batches = class * 2000

    5 steps=0.8 * max_batches,0.9 * max_batches

    6 如果使用[Gaussian_yolo]层,修改filters(classes+9)x3,在3个[Gaussian_yolo]层的前一个[convolutional]层为:

    评价指标的建立

    参考致谢:https://mp.weixin.qq.com/s?__biz=MzIzNDM2OTMzOQ==&mid=2247487059&idx=1&sn=9e2c5ee7923ddd36c889507c70ddb804&chksm=e8f63607df81bf11c4597a116b4812af35570ada98220a283af295c829bb60473089a41d80eb&mpshare=1&scene=23&srcid=0722LIxqziSJe01Uv5ddFGvI&sharer_sharetime=1595423944083&sharer_shareid=7ac210d5394f53b68ccf96c0ef8a72ed#rd

    IoU:交并比(intersection over union)A交B / A并B

    T,F,P,N:预测值为正例,记为P(Positive)
                         预测值为反例,记为N(Negative)
                         预测值与真实值相同,记为T(True)
                         预测值与真实值相反,记为F(False)

                         说实话,这个我始终不太明白,不过这样好记一点:TF正不正确,PN预测的是正还是负样本

                         TP -- 预测值和真实值一样,预测值为正样本(真实值为正样本)
                         TN -- 预测值和真实值一样,预测值为负样本(真实值为负样本)
                         FP -- 预测值和真实值不一样,预测值为正样本(真实值为负样本)
                         FN -- 预测值和真实值不一样,预测值为负样本(真实值为正样本)

    GIoU,DIoU,CIoU:https://mp.weixin.qq.com/s/pHIKmVMuakaxyR05GHBmFA

    非极大值抑制:NMS(Non-Maximum Suppression)。就是在预测的结果框和相应的置信度中找到置信度比较高的bounding box。对于有重叠在一起的预测框,如果和当前最高分的候选框重叠面积IoU大于一定的阈值的时候,就将其删除,而只保留得分最高的那个。计算步骤是1NMS计算出每一个bounding box的面积,然后根据置信度进行排序,把置信度最大的bounding box作为队列中首个要比较的对象;2 计算其余bounding box与当前最大scoreIoU,去除IoU大于设定的阈值的bounding box(认为这些box与得分最大的box表达的物体是一个),保留小的IoU预测框(这些可能属于其他物体);3 然后重复上面的过程,直至候选bounding box为空。多个目标检测目标时:先选取置信度最大的候选框B1,然后根据IoU阈值来去除B1候选框周围的框。然后再选取置信度第二大的候选框B2,再根据IoU阈值去掉B2候选框周围的框。

    准确率:(accuracy)是最常用的一种。accuracy = (TP+TN)/(TP+TN+FP+FN) 分对的样本占总数的比例。公式中的TP+TN即为所有的正确预测为正样本的数据与正确预测为负样本的数据的总和,TP+TN+FP+FN即为总样本的个数。

    精度:(precision)描述的是“找的对”的比例,precision = TP/( TP+FP)。找到的所有正样本中,有多少找对了。

    召回率/TPR:(recall&true positive rate又叫灵敏度):描述的是“找的全”的比例,recall/TPR = TP/(TP+FN),其中TP+FN即为所有真正为正样本的数据。所有正样本中有多少被找全了。

    FPR:与TPR相反指实际负例中,错误的判断为正例的比例,这个值往往越小越好,FPR = FP/(FP+TN)。

    F1分数:F1 = 2TP/(2TP+FP+FN),相当于召回率和精度的调和平均数,F1代表认为召回率和精度同样重要,加权调和平均时则有所侧重,F2分数认为召回率的重要程度是精度的2倍,而F0.5分数认为召回率的重要程度是精度的一半。更一般地,我们可以定义precisionrecall权重可调的F1 score):Fβ = ((1+β*β)*precision*recall) / (β*β*precision + recall)

    PR曲线:横坐标为召回率,纵坐标为精度的曲线。

    AP:平均准确率,是对不同召回率点上的准确率进行平均,在PR曲线上表现为PR曲线下的面积。显然AP与PR曲线共存,PR曲线最大的问题是对正负样本分布比较敏感,比如当负样本增加10倍后,在recall不变的情况下,必然召回了更多的负样本,所以精度就会大幅下降。对于不同正负样本比例的测试集,PR曲线的变化就会非常大。

    ROC曲线:Receiver Operating Characteristic Curve,曲线横坐标为FPR,纵坐标为TPR。

    AUC:Area under curve,即ROC曲线下面积,计算方式为ROC曲线的微积分值。其物理意义可以表示为:随机给定一正一负两个样本,将正样本排在负样本之前的概率,因此AUC越大,说明正样本越有可能被排在负样本之前,即正样本分类结果越好。ROC曲线有个很好的特性,当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。ROC曲线可以反映二分类器的总体分类性能,但是无法直接从图中识别出分类最好的阈值,事实上最好的阈值也是视具体的场景所定。ROC曲线一定在y=x之上,否则就是一个不好的分类器。

    mAP:mean average precision,意思是平均精度均值。AP就是PR曲线下面的面积,是指不同召回率下的精度的平均值。然而,在目标检测中,一个模型通常会检测很多种物体,那么每一类都能绘制一个PR曲线,进而计算出一个AP值。那么多个类别的AP值的平均就是mAP.     

    mAP衡量的是学出的模型在所有类别上的好坏,是目标检测中一个最为重要的指标,一般看论文或者评估一个目标检测模型,都会看这个值,这个值是在0-1之间,越大越好。

    一般来说mAP针对整个数据集而言的,AP针对数据集中某一个类别而言的,而percisionrecall针对单张图片某一类别的。

    损失函数的建立

    常规(正常的)训练趋势应该是

                                            

    可能作为调参的依据

    1 通常情况下,为每个类别迭代2000次是足够的,且总的迭代次数不能低于4000次。

    2 在训练过程中,你会看到一系列训练误差,当0.XXXXXXX avg这个参数不再下降时,就该停止训练了

    Region Avg IOU: 0.798363, Class: 0.893232, Obj: 0.700808, No Obj: 0.004567, Avg Recall: 1.000000, count: 8 Region Avg IOU: 0.800677, Class: 0.892181, Obj: 0.701590, No Obj: 0.004574, Avg Recall: 1.000000, count: 8 9002: 0.211667, 0.60730 avg, 0.001000 rate, 3.868000 seconds, 576128 images Loaded: 0.000000 seconds

    • 9002 - 迭代数量(batch数量)
    • 0.60730 avg - 平均损失(误差),越低越好

    3  利用-map参数查看mAP评价指标,或者在训练时自动保存的权重上执行测试命令

    • ./darknet detector map data/obj.data cfg/yolo-obj.cfg backup\yolo-obj_7000.weights
    • ./darknet detector map data/obj.data cfg/yolo-obj.cfg backup\yolo-obj_8000.weights
    • ./darknet detector map data/obj.data cfg/yolo-obj.cfg backup\yolo-obj_9000.weights

    下面介绍一下YOLOv1的损失函数的构成以及基于此在YOLOv4上的改进

    YOLOv1算法最后输出的检测结果为7x7x30的形式,其中30个值分别包括2个候选框的位置,有无包含物体的置信度,以及网格中包含20个物体类别的概率三部分。也就是说YOLOv1的损失包括3部分误差:位置误差,置信度(confidence)误差,分类误差。

    我们知道,如果8维的localization error,两个置信度error20维的classification error同等重要显然是不合理的;还有如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的boxconfidence push0,相比于较少的有object的网格,这种做法是overpowering(强烈震荡)的,这会导致网络不稳定甚至发散。损失函数的设计目标就是让坐标(x,y,w,h)confidenceclassification这个三个方面达到很好的平衡。YOLO-V1算法中简单的全部采用了sum-squared error loss来做这件事,也就是使用权重系数来进行平衡,对于不同的损失用不同的权重,我们来逐个看:

              

    位置损失

    从上图可以看出,坐标损失也分为两部分,坐标中心误差和位置宽高的误差,其中表示第i个网格中的第j个预测框是否负责obj这个物体的预测,只有当某个box predictor对某个ground truth box负责的时候,才会对boxcoordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth boxIoU是不是在那个网格的所有box中最大。(就是7x7方格的选择问题,非极大值抑制)
    但这里有个问题:对于中心点的损失直接用了均方误差,但是对于宽高为什么用了平方根呢?这里是这样的,我们先来看下图:
                                                         

    上图中,蓝色为bounding box,红色框为真实标注,如果Wh没有平方根的话,那么bounding box跟两个真实标注的位置loss是相同的。但是从面积看来B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不应该有相同的loss
    如果Wh加上平方根,那么BA的位置loss约为3.06BC的位置loss约为1.17BA的位置loss的值更大,这更加符合我们的实际判断。所以,算法对位置损失中的宽高损失加上了平方根。
    而公式中的为位置损失的权重系数,在pascal VOC训练中取5

    置信度损失

    这里分成了两部分,一部分是包含物体时置信度的损失,一个是不包含物体时置信度的值。

    置信度的定义:\[confidence = Pr{\rm{(}}Object{\rm{)}}*IOU_{pred}^{truth}\]

    其中前一项表示有无人工标记的物体落入网格内,如果有,则为1,否则为0.第二项代表bounding box和真实标记的box之间的IoU。值越大则box越接近真实位置。(IoU揭示的是重合部分的大小)
    confidence是针对bounding box的,由于每个网格有两个bounding box,所以每个网格会有两个confidence与之相对应。
    从损失函数上看,当网格i中的第j个预测框包含物体的时候,用上面的置信度损失,而不包含物体的时候,用下面的损失函数。对没有objectboxconfidence loss,赋予小的loss weight(而不是0,否则会overpowering),pascal VOC训练中取0.5。有objectboxconfidence loss和类别的lossloss weight正常取1

    类别损失

    类别损失这里也用了均方误差,实际上,感觉这里用交叉熵更好一些。其中表示有无object的中心点落到网格i中,如果网格中包含有物体object的中心的话,那么就负责预测该object的概率。

    总结

    总体来说,对于不同的任务重要程度不同,所以也应该给与不同的loss weight

    • 每个网格两个预测框坐标比较重要,给这些损失赋予更大的loss weight,在pascal VOC中取值为5.

    • 对没有objectboxconfidence loss,赋予较小的loss weight,在pascal VOC训练中取0.5.对有objectboxconfidence loss和类别的loss weight正常取值为1.

    • class error归一化为1

    展开全文
  • 怎么看? 配置方面肯定没问题,MainModule上已加上注解: ({ (type=TestFilter.class) }) 自定义ActionFilter部分代码如下: <p>public View match(ActionContext context) { ...
  • 基础理论-极大似然

    2019-02-28 17:51:00
    求未知参数估计的一种重要方法。思路是设一随机试验在已知条件下,有若干个结果A,B,C,…,如果在一次试验中A发生了,则可认为在已知条件下最有利于A发生, 故应按照已知条件选择分布的参数,使发生A的概率最大...

    官方解释

    求未知参数点估计的一种重要方法。思路是设一随机试验在已知条件下,有若干个结果A,B,C,…,如果在一次试验中A发生了,则可认为在已知条件下最有利于A发生,

    故应按照已知条件选择分布的参数,使发生A的概率最大。

     

    通俗理解

    1. 极大似然是用来求某种分布的参数的方法。那怎么求呢?

    2. 在某种情况(模型已知,参数已定)下,我们通过做实验,甚至可以多做几次实验,看看实验结果,我们希望发生的事情发生了没,如果没发生,说明我们实验的方法不对(不能这么搞,说明前提(假设的分布)错了),

    如果发生了,看看结果是什么样的,我们的目标是想办法让这个结果尽可能发生,也就是让这个结果发生的概率最大。

     

    极大似然的前提是样本独立同分布。

    此时 P(AB)=P(A)P(B)

     

    实例

    有一个罐子,里面有黑白两种球,数目多少不知,两种颜色的比例也不知。我 们想知道罐中白球和黑球的比例,但我们不能把罐中的球全部拿出来数。

    现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球 再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中黑白球的比例。假如在前面的一百次重复记录中,有七十次是白球,请

    问罐中白球所占的比例最有可能是多少?

     

    很多人马上就有答案了:70%。而其后的理论支撑是什么呢?

    我们假设罐中白球的比例是p,那么黑球的比例就是1-p。因为每抽一个球出来,在记录颜色之后,我们把抽出的球放回了罐中并摇匀,所以每次抽出来的球的颜色服从同一独立分布。

    这里我们把一次抽出来球的颜色称为一次抽样。题目中在一百次抽样中,七十次是白球的,三十次为黑球事件的概率是P(样本结果|Model)。

     P(样本结果|Model)=P70(1-P)30

    重点:这里要注意,实验结果70白30黑这件事,是在我们假设的情况下发生的,而这件事其实是真实的,我们要做的是让这件事尽可能发生,即发生的概率接近1,那么怎么尽可能发生,就是调整我们的分布参数。

     

    事情尽可能发生,就是发生的概率最大,就是求P的导数

      (P70(1-P)30)'

    =70P69(1-P)30+30P70(1-P)29*(-1)

    =10P69(1-P)29(7(1-P)-3P)

    =10P69(1-P)29(7-10P)

    =0

    P=0.7 正解

     

     

    极大似然牵扯的东西挺多的,后期再更新吧

    转载于:https://www.cnblogs.com/yanshw/p/10448824.html

    展开全文
  • 说到查看进程大家都知道用ps,ps -ef | grep XXX 应该估计每天都得来那么几次吧,但是为什么说不建议用 ps -ef 呢?...大家知道可以用-o这个参数来控制结果的展示列,如ps -o user那我们用ps -ef -...

    说到查看进程大家都知道用ps,ps -ef | grep XXX 应该估计每天都得来那么几次吧,但是为什么说不建议用 ps -ef 呢?其实还好,没啥大问题,先看下面几个小问题.

    1. 如果要查线程怎么查呢?加个-L就可以,ps -efL就可以.
    2. 如果想在结果列里展示cpu占用率或者内存占用率呢?
    3. 如果想看进程状态呢?

    大家知道可以用-o这个参数来控制结果的展示列,如

    554eb5bc55c47ed544b7cadd1dd2261f.png

    ps -o user

    那我们用ps -ef -o pid,command,rss,%cpu来试试看

    01039973ff5c6eb57d1d6fc1a41298b6.png

    ps

    这个结果很奇怪,ps -ef默认的列完全没有,ps -ef本该展示所有的进程,这里我没有任何grep过滤,但是展示的只是很少一部分的结果.

    如果考虑线程的话,试试ps -efL -o pid,command,rss,%cpu, 直接报错了

    #ps -efL -o pid,command,rss,%cpuerror: conflicting format options

    这就是我说的为啥不推荐用ps -ef的原因,其实有一个小前提就是当你需要额外的展示一些别的列. 但是不用 ps -ef 的话,每次都输入一大堆 ps -e -o aa,bb,cc多麻烦,多难记.

    我们可以用alias,比如我的一个alias配置

    alias psf='ps -o user,pid,ppid,c,stime,tty,time,command'

    这个alias默认展示的列跟ps -f定义的是一致的,设置好之后

    psf -e === ps -ef psf -e | grep python === ps -ef | grep python

    而且这个就解决了上面的问题,比如我们想看rss和cpu百分比,可以这样

    #psf -e -o rss,%cpu | grep -i postgres
    3e7659be115876c052897fedbd0737ba.png

    后面两列就是加上去的. 实际上支持的展示列特别多,可以man ps查看,根据需要选用.

    最后再提供一个小技巧,下面这样可以查看cpu占用率最高的10个进程

    psf -e -o rss,%cpu --sort -%cpu | head -n 10

    --sort是控制进程排序,-%cpu是按照cpu使用率降序,如果需要按照内存降序是 -%mem, 如果想升序就是 +%mem.

    展开全文
  • 说到查看进程大家都知道用ps,ps -ef | grep XXX 应该估计每天都得来那么几次吧,但是为什么说不建议用 ps -ef 呢?...大家知道可以用-o这个参数来控制结果的展示列,如ps -o user那我们用ps -ef -...

    说到查看进程大家都知道用ps,ps -ef | grep XXX 应该估计每天都得来那么几次吧,但是为什么说不建议用 ps -ef 呢?其实还好,没啥大问题,先看下面几个小问题.

    1. 如果要查线程怎么查呢?加个-L就可以,ps -efL就可以.
    2. 如果想在结果列里展示cpu占用率或者内存占用率呢?
    3. 如果想看进程状态呢?

    大家知道可以用-o这个参数来控制结果的展示列,如

    cb33bb57383e3fea0d3543f796e1f546.png

    ps -o user

    那我们用ps -ef -o pid,command,rss,%cpu来试试看

    f046e8c57d3af6409bbc351eaf80e4b6.png

    ps

    这个结果很奇怪,ps -ef默认的列完全没有,ps -ef本该展示所有的进程,这里我没有任何grep过滤,但是展示的只是很少一部分的结果.

    如果考虑线程的话,试试ps -efL -o pid,command,rss,%cpu, 直接报错了

    #ps -efL -o pid,command,rss,%cpuerror: conflicting format options

    这就是我说的为啥不推荐用ps -ef的原因,其实有一个小前提就是当你需要额外的展示一些别的列. 但是不用 ps -ef 的话,每次都输入一大堆 ps -e -o aa,bb,cc多麻烦,多难记.

    我们可以用alias,比如我的一个alias配置

    alias psf='ps -o user,pid,ppid,c,stime,tty,time,command'

    这个alias默认展示的列跟ps -f定义的是一致的,设置好之后

    psf -e === ps -ef psf -e | grep python === ps -ef | grep python

    而且这个就解决了上面的问题,比如我们想看rss和cpu百分比,可以这样

    #psf -e -o rss,%cpu | grep -i postgres
    45f9be661598bf9ae3b47072e16477d8.png

    后面两列就是加上去的. 实际上支持的展示列特别多,可以man ps查看,根据需要选用.

    最后再提供一个小技巧,下面这样可以查看cpu占用率最高的10个进程

    psf -e -o rss,%cpu --sort -%cpu | head -n 10

    --sort是控制进程排序,-%cpu是按照cpu使用率降序,如果需要按照内存降序是 -%mem, 如果想升序就是 +%mem.

    展开全文
  • 如果采用了这一步,那这一步输出的的参数是保存的相邻帧间的运动矢量吗,这一步得出的结果怎么和接下来的检测与跟踪配合? 如果有同学了解这方面,或做过视频运动目标检测,希望可以交流交流,我现在初步实现了...
  • 2.IPP滤波器的参数懂啊,怎么设置通带频率和阻带以及滤波器阶数啊 ``` IppStatus ippsFIR_32fc_I(Ipp32fc* pSrcDst, int numIters, IppsFIRState_32fc* pState ) ``` 3.从IPP的使用说明我了,那个求相位的...
  • 拿到一个算法公式,不知道怎么推的,不知道有没有大佬能帮忙一下; 首先明确的是采用PL-ICP算法,即误差估计采用点到直线的距离。根据文献知道要求解的问题是个最小二乘问题,下面几个图是文献内容![图片说明]...
  • 网上有很多人在责骂我写的教程,认为十天什么都学不会,了我的教程还是什么都不会,我想他们或许是过高估计了我的教程。外面有很多书,关于ASP和ASP.NET的,我就是外面的书学会的。我所要做的就是希望大家能了...
  • sql总结.doc

    2019-08-27 22:08:51
    如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。 2.可移植性差 由于存储过程将应用...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。到了大四毕业设计...
  • 齐活儿,接下来我们怎么干吧。 我们声明一个值类型变量age,直接在初始化时把zerocool的Age值赋给它,显然,age的值就是25了。 但这个时候zerocool不高兴了,他想装嫩,私自把自己的年龄改成22岁,刚够法定结婚...
  • 1.0.25 线性操作符使用的次序会导致结果的不同吗? 18 B1.2 因为矩阵运算次序是不能互换的,如果改变使用移不变线性操作符的次序会发生什么情况? 18 B1.3 什么是堆叠操作符? 24 1.0.26 对矩阵H结构上可分离性...
  • - 函数内部的参数arguments包含了传入的所有参数 - this,表示在这个函数内的作用域,以及prototype 理解匿名函数和闭包 匿名函数又叫拉姆达函数,主要是在把函数当值传递的时候用,或者是...
  • 写给 Jscex 的一些建议

    2020-11-28 13:18:24
    估计源码才知道如何去写。在文档里,如果某个内容说不清楚,建议不如先隐藏掉。 2. 包引入这文档,动态依赖和静态依赖貌似写反了。静态依赖是需要手动自己去写依赖,动态依赖是指可以...
  • 至此,我们得到了完整的oSIP开发库,使用时,只需在我们的程序里包含oSIP的头文件,工程的链接参数里增加osipparser2.lib和osip2.lib即可。 -----------------------------...
  • 1.6.3 站在全局问题 13 1.6.4 首先是不要造成损害 13 第2章 关系数据库建模及数据库设计 14 2.1 关系数据库简介 14 2.2 关系数据库模型 15 2.2.1 数据库模式 15 2.2.2 关系代数 15 2.2.3 关系演算...
  • Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言..........................................................................................................................................
  • 下载与使用(由于整个项目直接下载比较慢,可以方式四) 方式一:使用 git 下载。 git clone https://github.com/zhanwen/MathModel.git 方式二:直接下载压缩包。 方式三 可以单个文件下载,选择自己...
  • w3c的table部分中说width属性是the desired width of the entire table,我估计entire就是包含了padding和border,找不到什么其他说明,先这么理解吧。 定位方面,除了不支持fixed的ie6用absolute,其他都使用fixed...
  • VC实现炫眩qq界面的模拟(附源码)

    千次下载 热门讨论 2008-03-10 15:24:28
    读者可下载源码,它是怎么绑定实现的。 基本整个复杂而超眩的项目就在完成向导创建后调用两到三个第三方接口函数中完成。坦白说,整个换肤开发包提供的接口函数相当简练,就10多个,功能与使用方法亦是相当明了,...
  • 答:这种情况当比较到S[5]和T[5]时,发现不等,就去next[5]的值,next[5]=2,意思是前面的比较过了,其中,S[5]的前面有两个字符和T的开始两个相等,接下来去比较S[5]和T[2]吧。 总之,有了串的next值,一切搞定。...
  • 软件工程教程

    2012-07-06 23:10:29
    用例只描述参与者和系统在交互过程中做些什么,并不描述怎么做。 用例图 关联关系 用例图 泛化关系 用例图 泛化关系 用例图 用例图 用例图 用例用于什么情况? 不知道什么情况不用用例 如果没有用到用例,...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

参数估计结果怎么看