來(lái)源丨h(huán)ttps://blog.csdn.net/MrSpart/article/details/116137943
【 看到這個(gè)題目相信不少人第一感覺(jué)是小題大作、故弄玄虛。不過(guò)還請(qǐng)先稍微按捺一下胸中的不快,在腦中給出下面這幾個(gè)問(wèn)題的答案。然后對(duì)照一下本文將要給出的答案,看看是否能夠心平氣和。】
像元值應(yīng)該如何進(jìn)行歸一化?
樣本圖像的尺寸僅與內(nèi)存、顯存大小有關(guān)嗎?
網(wǎng)絡(luò)能檢測(cè)的目標(biāo)框范圍只與圖像大小有關(guān)嗎?
卷積網(wǎng)絡(luò)真的具有平移和旋轉(zhuǎn)不變性?
制作目標(biāo)檢測(cè)訓(xùn)練樣本的最佳方案是什么?
以下為原文:
像元值應(yīng)該如何進(jìn)行歸一化?
不能想當(dāng)然地認(rèn)為像元值的取值范圍就是0到255,雖然普通數(shù)碼相機(jī)拍攝出來(lái)的圖像各個(gè)通道的取值范圍確實(shí)是0-255。要知道這個(gè)0-255的取值是從更大取值范圍處理得來(lái)的。在局部強(qiáng)烈光照下或者均勻光照下,還是弱光環(huán)境或者強(qiáng)光環(huán)境,人眼能夠感受到相同的顏色,但是數(shù)碼相機(jī)的傳感器會(huì)量化出不同的像元值。RGB的取值對(duì)應(yīng)了固定的顏色,不同環(huán)境下傳感器會(huì)量化出的像元值要怎么才能映射為一致的顏色?這個(gè)技術(shù)就叫做寬動(dòng)態(tài)。為了寬動(dòng)態(tài)處理結(jié)果更細(xì)膩,傳感器的量化范圍通常更大。如下圖,左側(cè)是關(guān)閉了寬動(dòng)態(tài)的效果,在這個(gè)圖上要想把手機(jī)檢測(cè)出來(lái)幾乎是不可能的。
由于數(shù)碼相機(jī)做過(guò)了寬動(dòng)態(tài)處理,對(duì)普通數(shù)碼照片進(jìn)行歸一化,可以簡(jiǎn)單的將0-255線性映射到0-1。而醫(yī)學(xué)圖像、遙感圖像則不能簡(jiǎn)單的利用最小最大像元值歸一化到0-1。由于白噪聲的存在,醫(yī)學(xué)圖像、遙感圖像的直方圖通常如下圖所示(橫軸代表像元值范圍,紅色縱軸表示歸一化后的取值,綠色縱軸表示不同像元值的像素頻數(shù),綠色曲線就是直方圖)。
如果按照紅色實(shí)線代表的歸一化映射進(jìn)行處理,最終絕大多少像素取值集中在0附近,整幅圖像一片黑(翻轉(zhuǎn)后的綠色虛曲線就是歸一化后的直方圖。最佳的處理方式是按照紅色長(zhǎng)線段虛線代表的映射進(jìn)行歸一化,但是這個(gè)映射難以求解,一般按照紅色點(diǎn)虛線代表的映射進(jìn)行處理就行。
紅色點(diǎn)虛線代表的映射其實(shí)挺簡(jiǎn)單的,選取合適的最小最大值,小于最小值的置為0,大于最大值的置為1,中間的線性映射。最大最小值的選取方法有均值+-x*標(biāo)準(zhǔn)差和排除兩端一定占比的像素。排除兩端一定占比的像素的示意圖如下,從兩端按照百分比排除像素時(shí)就能夠選取新的最小最大值,此時(shí)的歸一化映射圖像為紅色點(diǎn)虛線。
樣本圖像的尺寸僅與內(nèi)存、顯存大小有關(guān)嗎?
如果柵格的邊長(zhǎng)減去1后不能被stride整除,卷積的降采樣過(guò)程會(huì)丟棄邊緣的像素,結(jié)果是特征圖像素與輸入圖像位置映射會(huì)產(chǎn)生偏移。最終的特征圖是不能完整映射到輸入圖像范圍的,拿一個(gè)錯(cuò)位的特征圖像素去預(yù)測(cè)原圖上的目標(biāo),想想都不靠譜。目前所有的深度學(xué)習(xí)框架都沒(méi)有考慮這里的映射錯(cuò)位關(guān)系,就算用Mask-RCNN提供的ROIAlign也是錯(cuò)位的。
所以訓(xùn)練時(shí)輸入樣本圖像的大小和檢測(cè)時(shí)切塊的大小只能用最終特征圖的尺寸反推回去,保證在卷積過(guò)程中不丟棄邊緣。
網(wǎng)絡(luò)能檢測(cè)的目標(biāo)框范圍只與圖像大小有關(guān)嗎?
感受野是直接或者間接參與計(jì)算特征圖像素值的輸入圖像像素的范圍,直接感受野就是卷積核大小,隨著卷積層數(shù)的加深之前層次的感受野會(huì)疊加進(jìn)去。感受野小了缺乏環(huán)境信息,感受野大了引入太多環(huán)境干擾,所以一個(gè)網(wǎng)絡(luò)能夠檢測(cè)的目標(biāo)框范圍與特征圖像素或者特征向量的感受野有關(guān),通常能夠檢測(cè)的目標(biāo)框邊長(zhǎng)范圍是感受野邊長(zhǎng)的0.1-0.5倍。
詳細(xì)結(jié)論參考論文:Understanding the effective receptive field in semantic image segmentation
https://www.onacademic.com/detail/journal_1000040207575210_3759.html
拿到了一個(gè)網(wǎng)絡(luò)要做感受野分析,然后確定它能夠檢測(cè)多少像素的目標(biāo)。實(shí)際目標(biāo)檢測(cè)任務(wù)需要綜合網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)和圖像分辨率選擇。如果目標(biāo)框的像素范圍超過(guò)了網(wǎng)絡(luò)的感受野,就需要將原始圖像縮小后再檢測(cè)。
卷積網(wǎng)絡(luò)真的具有平移和旋轉(zhuǎn)不變性?
直覺(jué)上同一個(gè)卷積核,只要不是中心對(duì)稱(chēng)的像素團(tuán),旋轉(zhuǎn)之后的卷積值肯定是不一樣的,也就是說(shuō)卷積網(wǎng)絡(luò)顯然不具有旋轉(zhuǎn)不變性。那么卷積是否具有平移不變性呢?好像具有平移不變性啊,同一個(gè)像素團(tuán)不管放在哪里,只要卷積核對(duì)齊了,卷積值都是一樣的。但是不要忘記了padding,每一層卷積都加padding的話,圖像邊緣的像素混入的padding影響肯定更大。對(duì)于卷積網(wǎng)絡(luò)來(lái)說(shuō),同一個(gè)像素團(tuán)離圖像中心的距離不同卷積值肯定是不同的,所以加了padding的卷積網(wǎng)絡(luò)平移不變性也是不存在的。不帶padding的網(wǎng)絡(luò)每一層都必須進(jìn)行嚴(yán)密的設(shè)計(jì),就像不帶padding的UNet一樣的,顯然是很麻煩的。通常為了網(wǎng)絡(luò)設(shè)計(jì)的簡(jiǎn)單,對(duì)訓(xùn)練樣本做平移增廣是很有必要的。
可能有些人還記著以前關(guān)于CNN具有各種不變性的尬解釋?zhuān)D(zhuǎn)不過(guò)來(lái)彎的讀讀下面的論文,CNN啥不變性都沒(méi)得,就靠蠻力擬合大量得數(shù)據(jù)。
Making Convolutional Networks Shift-Invariant Again
SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep
Mind the Pad -- CNNs Can Develop Blind Spots
On Translation Invariance in CNNs: Convolutional Layers can Exploit Absolute Spatial Location
How much Position Information Do Convolutional Neural Networks Encode
Why do deep convolutional networks generalize so poorly to small image transformations
制作目標(biāo)檢測(cè)訓(xùn)練樣本的最佳方案是什么?
1.做感受野分析,確定能夠檢測(cè)目標(biāo)邊長(zhǎng)范圍
這一步得自己算。現(xiàn)成的網(wǎng)絡(luò)都能搜到別人算好的結(jié)果,拿來(lái)直接用。
2.用最終特征圖的尺寸反推訓(xùn)練樣本圖像的尺寸
這一步也得自己算。有了目標(biāo)邊長(zhǎng)范圍,選擇大于目標(biāo)框最大邊長(zhǎng)2倍左右的訓(xùn)練樣本圖像的尺寸。
3.對(duì)原始樣本圖像進(jìn)行旋轉(zhuǎn)和成像效果變換增廣
這一步得寫(xiě)代碼。目前廣泛使用的正框樣本庫(kù),旋轉(zhuǎn)之后范圍框更加不準(zhǔn),沒(méi)得意義。如果自己要做樣本記得一定要用傾斜范圍框去標(biāo)注,這樣才能做旋轉(zhuǎn)樣本增廣,從傾斜范圍框生成的正框準(zhǔn)一些。旋轉(zhuǎn)增廣有現(xiàn)成的工具可以用,但是都是基于正框?qū)崿F(xiàn)的,這里有一個(gè)基于python和opencv實(shí)現(xiàn)的(https://github.com/XuelianZ/augment)。
成像效果變換樣本指,通過(guò)直方圖匹配等算法,仿真夜晚、霧、雨、雪等天氣情況的成像效果。
為什么這兩種增廣放到切圖之前?對(duì)于成像效果變換來(lái)說(shuō)需要的統(tǒng)計(jì)信息越準(zhǔn)確越好,切成小圖之后難以得到較好的算法效果。對(duì)于旋轉(zhuǎn)來(lái)說(shuō),切完圖進(jìn)行旋轉(zhuǎn),必然要填充值。填充值屬于人為制造的偽顯著區(qū)域,不符合檢測(cè)時(shí)的實(shí)際情況。
4.對(duì)原始樣本圖像進(jìn)行切圖,切圖的同時(shí)可以做平移樣本增廣
這一步還得寫(xiě)代碼。已經(jīng)有的工具很多都是簡(jiǎn)單的切圖,只能支持0-255的普通數(shù)碼照片,也沒(méi)有考慮到能夠檢測(cè)的目標(biāo)邊長(zhǎng)范圍。如果有超過(guò)能夠檢測(cè)的目標(biāo)邊長(zhǎng)范圍的范圍框,需要對(duì)圖像進(jìn)行縮小,且要將這個(gè)縮小比率記錄下來(lái)。檢測(cè)目錄時(shí)也要按這個(gè)縮放比率進(jìn)行檢測(cè)。對(duì)于醫(yī)學(xué)圖像、遙感圖像在切圖過(guò)程中需要進(jìn)行歸一化處理。歸一化參數(shù)需要從原始大樣本圖像上計(jì)算出來(lái),切完的小圖的統(tǒng)計(jì)信息不夠全面,歸一化參數(shù)可能不夠好。
5.其它樣本增廣操作
比如翻轉(zhuǎn)、加噪、拼接、摳洞、縮放等等,這些操作可以在訓(xùn)練過(guò)程中隨機(jī)執(zhí)行。個(gè)人認(rèn)為拼接、摳洞、縮放對(duì)工程應(yīng)用來(lái)說(shuō)沒(méi)有意義。拼接增廣指隨機(jī)找?guī)讖垐D各取一部分或者縮小之后拼起來(lái)作為一幅圖用,拼接出來(lái)的圖有強(qiáng)烈的拼接痕。摳洞指隨機(jī)的將目標(biāo)的一部分區(qū)域扣掉填充0值。拼接、摳洞屬于人為制造的偽顯著區(qū)域,不符合實(shí)際情況,白白增加訓(xùn)練量。
拼接的一個(gè)作用是增加了小目標(biāo)樣本的數(shù)量,其實(shí)平移增廣也可以增加小目標(biāo)樣本的數(shù)量。因?yàn)樾∧繕?biāo)可以在圖像范圍內(nèi)平移的次數(shù)更多。
訓(xùn)練過(guò)程隨機(jī)縮放也是沒(méi)必要的,縮放之后的圖像可能會(huì)導(dǎo)致特征圖和輸入圖像映射錯(cuò)位(參考“樣本圖像的尺寸僅與內(nèi)存、顯存大小有關(guān)嗎?”);另外工程應(yīng)用過(guò)程中控制好成像距離就能控制目標(biāo)尺寸范圍。僅采集符合所設(shè)計(jì)目標(biāo)尺寸范圍的樣本圖像即可。
強(qiáng)烈推薦的訓(xùn)練樣本圖像制作工具(切圖工具)
這套工具在切圖過(guò)程中實(shí)現(xiàn)了兩種歸一化方案和平移增廣,輸出圖像可以選擇輸出為0-1或者0-255,輸出到0-255的圖像可以用普通看圖工具查看。輸出到0-1的圖像數(shù)值精度高一些,可能訓(xùn)練效果會(huì)好一些。對(duì)于普通數(shù)碼照片,因?yàn)樵瓉?lái)取值范圍就是0-255,僅以0和255作為最小最大值做個(gè)線性映射,不會(huì)選取新的最小最大值。這套工具還包含一個(gè)統(tǒng)計(jì)范圍框?qū)捀叻秶⒋_定切圖縮放比率的工具。
這套工具僅支持yolo格式的范圍框標(biāo)注,范圍框坐標(biāo)可以是歸一化的也可以是不歸一化的。建議做樣本時(shí)不要?dú)w一化坐標(biāo),整數(shù)的坐標(biāo)值還是更準(zhǔn)一些,可以利于其它處理。
(一)范圍框?qū)捀呓y(tǒng)計(jì)工具
是命令行工具,有6個(gè)參數(shù),參數(shù)之間用空格分開(kāi)。
輸入目錄 范圍框標(biāo)注格式 c,cx,cy,w,h
輸出目錄
輸入文件擴(kuò)展名,多個(gè)擴(kuò)展名用半角逗號(hào)分隔
輸入影像的比例尺,0表示從影像中讀取,沒(méi)有空間參考的影像的比例尺默認(rèn)為1,普通照片就是沒(méi)有空間參考的,遙感影像才有空間參考
輸出樣本圖片邊長(zhǎng)
裁剪出的樣本圖片上的目標(biāo)框邊長(zhǎng)范圍,有四個(gè)值半角逗號(hào)分隔,頭兩個(gè)是“按照所需縮放比例縮放之后最佳目標(biāo)框邊長(zhǎng)的范圍”,后兩個(gè)是“按照所需縮放比例縮放之后有效目標(biāo)框邊長(zhǎng)的范圍”
“最佳目標(biāo)框邊長(zhǎng)的范圍”指需要對(duì)圖像進(jìn)行縮放,讓所有的范圍框的邊長(zhǎng)都能落入這個(gè)范圍。“有效目標(biāo)框邊長(zhǎng)的范圍”指按照某個(gè)比例縮放后,還是有目標(biāo)框不能落在最佳范圍,但是只要在有效范圍內(nèi)就保留。
下面是一個(gè)運(yùn)行示例,路徑參數(shù)中有空格需要用半角引號(hào)包起來(lái)。
sidelen_cwh.exe “D:DOTA v1.5trainimagesimages” D:Test png,jpg 0 576 21,405,10,567
這個(gè)工具會(huì)輸出一個(gè)文本文件STATS.txt。其中內(nèi)容為
1.000000,2.0000001.000000,1.0000007.162937,487.783206
這里為了兼容遙感影像,引入了比例尺的概率。第一行縮放比例是一個(gè)像素對(duì)應(yīng)的地理長(zhǎng)度,普通數(shù)碼照片的比例尺默認(rèn)為1,還有一個(gè)為2的縮放比例,意思是將圖像寬高都縮小為原來(lái)的二分之一。第二行是所有圖像的原始比例尺范圍,因?yàn)闆](méi)有空間參考,所以比例尺都是1。第三行是范圍框邊長(zhǎng)的范圍,以地理長(zhǎng)度為單位的,如果沒(méi)有空間參考也就是像素單位。
從中可以看出DOTA數(shù)據(jù)集范圍框邊長(zhǎng)的最大值有488,對(duì)于yolov3的感受野來(lái)說(shuō)不能全都檢測(cè)出來(lái),除了在原始比例尺檢測(cè)外,還得在縮小后的圖像上檢測(cè)。當(dāng)然訓(xùn)練也是一樣的需要在多個(gè)比例尺上進(jìn)行。
(二)訓(xùn)練樣本裁剪工具
也是命令行工具,有12個(gè)參數(shù),參數(shù)之間用空格分開(kāi)。
輸入目錄 范圍框標(biāo)注格式 c,cx,cy,w,h
輸出目錄
輸入文件擴(kuò)展名,多個(gè)擴(kuò)展名用半角逗號(hào)分隔
輸入影像的比例尺,0表示從影像中讀取,沒(méi)有空間參考的影像的比例尺默認(rèn)為1,普通照片就是沒(méi)有空間參考的,遙感影像才有空間參考
輸出樣本的比例尺,也就是縮放比例,多個(gè)值用半角逗號(hào)分隔。采用范圍框?qū)捀呓y(tǒng)計(jì)工具輸出文件的第一行。
輸出樣本圖像的通道組合,將原始樣本圖像的多個(gè)通道按順序輸出,通道編號(hào)從1開(kāi)始
歸一化映射參數(shù),有mg、mo、sg、so四種方式,其后跟的數(shù)值是相應(yīng)方式的歸一化參數(shù)。m表示最大最小值拉伸,其后的數(shù)值表示像元數(shù)目截?cái)嗟陌俜直龋籹表示均值加減標(biāo)準(zhǔn)差拉伸,其后的數(shù)值表示標(biāo)準(zhǔn)差的倍數(shù);g表示拉伸到0-255,如果本來(lái)就是8位的則不拉伸;o表示拉伸到0-1,如果本來(lái)就是8位的則直接將0-255映射到0-1。
輸出樣本圖片邊長(zhǎng)
裁剪出的樣本圖片上的目標(biāo)框邊長(zhǎng)范圍,與范圍框?qū)捀呓y(tǒng)計(jì)工具一致。
進(jìn)行樣本增廣時(shí)目標(biāo)框平移的最小像素?cái)?shù)量和平移量占范圍框?qū)捀叩谋戎担?dāng)比值乘以實(shí)際范圍框?qū)捀咝∮谧钚∑揭屏繒r(shí)仍然按最小平移量移動(dòng)。
目標(biāo)范圍框在裁剪圖像范圍內(nèi)的部分占比的閾值,超過(guò)這個(gè)值才保留。切圖之后范圍框跑到圖像外了,需要排除。
目標(biāo)框?qū)捀呔垲?lèi)數(shù)目。
下面是一個(gè)運(yùn)行示例,路徑參數(shù)中有空格需要用半角引號(hào)包起來(lái)。
splitimg_cwh.exe “D:DOTA v1.5trainimagesimages” D:Test png,jpg 0 1 1,2,3 sg2.5 576 21,405,10,567 237,0.65 0.67 9
這個(gè)工具除了輸出裁剪出來(lái)的樣本外,還會(huì)輸出一個(gè)文本文件ANCHORS.txt和一個(gè)圖像HIST.tif。
ANCHORS.txt其中內(nèi)容為
20,20, 57,45, 104,78, 150,139, 169,179, 25,89, 30,169, 42,329, 122,407
這是范圍框?qū)捀叩木垲?lèi)中心,可以直接用做yolo的錨點(diǎn)框。
HIST.tif是范圍框的二維統(tǒng)計(jì)直方圖,像素值累計(jì)了各個(gè)寬高的范圍框數(shù)量。利用范圍框的二維累計(jì)直方圖可以加快聚類(lèi)。
裁剪出來(lái)的樣本圖像如下。
挑選了幾個(gè)方塊圖,把范圍框疊加顯示看看平移增廣的效果。
責(zé)任編輯:haq
-
圖像
+關(guān)注
關(guān)注
2文章
1083瀏覽量
40418 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7519瀏覽量
88639
原文標(biāo)題:實(shí)操教程|怎樣制作目標(biāo)檢測(cè)的訓(xùn)練樣本圖像?
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論