原文鏈接:https://blog.csdn.net/u010165147/article/details/97105166
一、分類與檢測(cè)
分類和檢測(cè)是計(jì)算機(jī)視覺(jué)里面兩個(gè)非常重要的任務(wù)滨砍,雖然兩個(gè)任務(wù)的目標(biāo)并不完全相同汤锨,但是本質(zhì)上檢測(cè)是在分類問(wèn)題上的一次推廣壤巷,即檢測(cè)是在整個(gè)個(gè)圖像上做的局部分類并且標(biāo)記該局部分類的位置贯钩,那么可以說(shuō):檢測(cè)=搜索+分類选浑,所以某種意義上來(lái)說(shuō)檢測(cè)可以歸約為分類問(wèn)題[4]
現(xiàn)在的因?yàn)樯疃染W(wǎng)絡(luò)(尤其是CNN)的流行,很多重要的物體檢測(cè)算法都是基于CNN顿仇,如YOLO淘正,SSD摆马,F(xiàn)aster R-CNN等,這些算法某種程度上是利用了CNN的局部分類特性鸿吆,所以當(dāng)我們?nèi)タ催@些算法的時(shí)候囤采,發(fā)現(xiàn)和傳統(tǒng)的物體檢測(cè)不同,檢測(cè)里面好像少了搜索惩淳,檢測(cè)變得更像檢測(cè)了蕉毯,但是實(shí)際上正是CNN的局部分類特性或者權(quán)重共享讓我們可以直接在格點(diǎn)上獲得物體的坐標(biāo),CNN的設(shè)計(jì)非常巧妙黎泣,這個(gè)問(wèn)題會(huì)在以后的博客里詳細(xì)探究
二恕刘、困難樣本的產(chǎn)生原因
閉集與開(kāi)集分類問(wèn)題
閉集分類問(wèn)題(closed-set problem)缤谎,即測(cè)試和訓(xùn)練的每個(gè)類別都有具體的標(biāo)簽抒倚,不包含未知的類別(unknown category or unseen category); 如著名的MNIST和ImageNet數(shù)據(jù)集,里面包含的每個(gè)類別為確定的坷澡。以MNIST(字符分類)為例托呕,里面包含了0~9的字符類別,測(cè)試時(shí)也是0~9的類別频敛,并不包含如字母A~Z等的未知類別项郊,閉集分類問(wèn)題的目的即:正確劃分這10個(gè)類別
開(kāi)集分類問(wèn)題(open-set problem)不僅僅包含0~9的字符類別,還包含其他如A~Z等等的未知類別斟赚,但是這些未知的類別并沒(méi)有標(biāo)簽着降,分類器無(wú)法知道這些未知類別里面圖像的具體類別,如:是否是A拗军,這些許許多多的不同類別圖像共同構(gòu)成了一個(gè)類別:未知類別任洞,在檢測(cè)里面我們叫做背景類別(background),而開(kāi)集分類問(wèn)題的目的即是:正確劃分這10個(gè)類別且正確排除非數(shù)字類別[5-7]发侵,關(guān)于開(kāi)放環(huán)境下的分類問(wèn)題會(huì)在后續(xù)的文章中作全面的總結(jié)
所以對(duì)于物體檢測(cè)問(wèn)題而言交掏,檢測(cè)器面對(duì)的是整個(gè)世界的物體,這些物體里面只有非常少的被標(biāo)記了具體類別刃鳄,大量的物體其實(shí)并沒(méi)有類別信息盅弛,甚至根本不知道如何標(biāo)記他的類別,所以面對(duì)開(kāi)集問(wèn)題叔锐,我們要求檢測(cè)(分類)器要有非常好的排他能力或排除背景類別能力挪鹏,那么訓(xùn)練數(shù)據(jù)將會(huì)非常重要,為了有這樣的能力我們需要切割下大量的背景作為負(fù)樣本(negative samples)來(lái)訓(xùn)練愉烙,但是這些背景樣本是否足夠了讨盒?不管加了多少背景數(shù)據(jù),目前都無(wú)法從理論上回答這個(gè)問(wèn)題:背景是否足夠齿梁。 而事實(shí)上不管如果加背景數(shù)據(jù)訓(xùn)練催植,模型總能遇到不能正確分類或很難分類的背景樣本(false positive) 肮蛹,這個(gè)就是我們常說(shuō)的困難負(fù)樣本(hard negative samples) 與之相反的是 hard positive samples,統(tǒng)稱為困難樣本(hard samples)
如下圖是一個(gè)關(guān)于人臉檢測(cè)中hard negative samples的舉例:
三创南、困難樣本挖掘方法
TopK Loss
即在訓(xùn)練時(shí)選擇前K個(gè)loss較大的樣本進(jìn)行back propagate(bp)伦忠,而loss較小的樣本(easy samples)則認(rèn)為分類正確不用bp(loss較小可認(rèn)為學(xué)會(huì)了,既然學(xué)會(huì)了就沒(méi)有必要再學(xué)稿辙,也就不需要bp了)昆码,這里的前K可以是一個(gè)百分比,即前K%的hard樣本邻储,如70%赋咽,這個(gè)是MTCNN OHSM 采用的方法[1],注意K不能太大否則不能達(dá)到hard sample mining的作用吨娜,從本人的訓(xùn)練測(cè)試中脓匿,不用TopK loss會(huì)出現(xiàn)很多很難解決的誤檢問(wèn)題; 講道理人腦也類似,傾向于學(xué)習(xí)那些不會(huì)的問(wèn)題(or novel things)宦赠,對(duì)于容易解決且已經(jīng)正確的問(wèn)題不再去學(xué)習(xí)陪毡,也就是我們常說(shuō)的有效信息變少了; 對(duì)模型而言如果全部使用分錯(cuò)的樣本loss去bp容易按下葫蘆起了瓢,topk 能有效避免這個(gè)問(wèn)題
import torch
import torch.nn as nn
ce_loss=nn.CrossEntropyLoss(reduce=False)
def topK_loss(gt_label, pred_label):
? ? loss_wise = ce_loss(pred_label, gt_label)
? ? loss_sorted=loss_wise/loss_wise.sum()
? ? loss_sorted=loss_sorted.sort(descending=True)
? ? ratio=0.0
? ? break_point=0
? ? for i,v in enumerate(loss_sorted[0]):
? ? ? ? break_point=i
? ? ? ? if ratio>=0.7:
? ? ? ? ? ? break
? ? ? ? ratio+=v.data.numpy()
? ? need_bp=loss_sorted[1][:break_point]
? ? loss_topk=loss_wise[need_bp].mean()
Focal Loss
Focal Loss其實(shí)就是gamma變換的loss化勾扭,gamma變換經(jīng)常被用于圖像增強(qiáng)毡琉,所以focal loss的作用也顯而易見(jiàn),對(duì)于分錯(cuò)的樣本增強(qiáng)其權(quán)重妙色,對(duì)于分對(duì)的樣本則減弱其權(quán)重桅滋,增強(qiáng)或衰減程度由gamma控制,文章中使用的γ=2\gamma=2γ=2身辨,權(quán)重相當(dāng)于平方變化丐谋,那么Focal Loss的主要目的是控制easy samples的權(quán)重,相對(duì)來(lái)說(shuō)Focal Loss比TopK Loss更加平滑[3]栅表,測(cè)試結(jié)果上Focal Loss也更好一些笋鄙,當(dāng)然差距其實(shí)并不是特別大
公式:
FL(pt)=?(1?pt)γlog(pt)FL(p_t)=?(1 ? p_t )^{\gamma} log(p_t )FL(p
————————————————
版權(quán)聲明:本文為CSDN博主「_pinnacle_」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議怪瓶,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明萧落。
原文鏈接:https://blog.csdn.net/u010165147/article/details/97105166