葛鈺峣,郭昱汝,周楨洋
(北方工業(yè)大學(xué),北京 100144)
計(jì)算機(jī)視覺(jué)在人工智能里可以類(lèi)比于人類(lèi)的眼睛,是在感知層上最為重要的核心技術(shù)之一[1]。目前,計(jì)算機(jī)視覺(jué)的主要應(yīng)用場(chǎng)景包括面部識(shí)別和檢測(cè),車(chē)牌閱讀,照片編輯,高級(jí)機(jī)器人視覺(jué),光學(xué)字符識(shí)別等[2]。深度學(xué)習(xí)框架最初主要用于深度學(xué)習(xí)的科研工作,代表性開(kāi)源深度學(xué)習(xí)框架包括Theano,Caffe等[3]。近年來(lái),國(guó)外的大型科技公司開(kāi)始紛紛布局這一領(lǐng)域并開(kāi)源,影響力比較大的包括谷歌的TensorFlow和臉書(shū)PyTorch。飛槳是國(guó)內(nèi)首個(gè)也是當(dāng)前唯一一 個(gè)功能完備的開(kāi)源深度學(xué)習(xí)平臺(tái),基于百度在深度學(xué)習(xí)領(lǐng)域的長(zhǎng)期積累自主研發(fā),并在2016年開(kāi)源[4]。為了鼓勵(lì)開(kāi)發(fā)者了解與參與深度學(xué)習(xí)開(kāi)源項(xiàng)目,百度飛槳主辦了2021 PaddlePaddle Hackathon飛槳黑客馬拉松活動(dòng),吸引了來(lái)自全球的開(kāi)發(fā)者。本單測(cè)項(xiàng)目為參與百度黑客馬拉松參賽項(xiàng)目。本文涉及的API是基于百度飛槳的paddle.nn.UpsamplingNearest2D API,該API的最近鄰插值圖像處理方法主要應(yīng)用于圖像大小的調(diào)整。本文介紹了paddle.nn.UpsamplingNearest2D的作用及原理,并給出了部分復(fù)現(xiàn)和測(cè)試的代碼。
最近臨插值算法是利用已知圖像中的像素點(diǎn)來(lái)填充新圖像對(duì)應(yīng)位置的像素,基于這種方法可以實(shí)現(xiàn)對(duì)原圖的放大或者縮小。由于其本質(zhì)是對(duì)原圖像像素的復(fù)制和抽樣,故不會(huì)產(chǎn)生新的像素,其新圖像的每個(gè)像素都是基于其對(duì)應(yīng)的原圖像附近的像素而生成的。
原圖片和縮放后圖片的寬高分別是SW,SH,DW,DH縮放原理如圖1所示。
圖1 縮放圖示
設(shè)原圖像的寬和高分別為W_1和H_1,縮放后圖像的寬和高為W_2和H_2,水平和垂直比例scale_factor的計(jì)算公式如式(1)所示。
目標(biāo)圖像中的點(diǎn)(x,y)對(duì)應(yīng)變換尺寸前的圖像坐標(biāo)為(x0,y0),其中:x0=int(x*scale_factor[0]),y0=int(y*scale_factor[1])[5]
函數(shù)包含4個(gè)輸入?yún)?shù)一個(gè)輸出。4個(gè)輸入分別為4D張量代表原圖像,縮放倍數(shù),縮放后圖像的長(zhǎng)寬方向的像素?cái)?shù),輸入的數(shù)據(jù)格式。輸出為4D張量代表調(diào)整后圖像。本文復(fù)現(xiàn)的函數(shù)的輸入?yún)?shù)中img為4D張量的原圖像,scale_fator為縮放倍數(shù),size為縮放后的圖像尺寸,data_formate為輸入數(shù)據(jù)格式。其中針對(duì)數(shù)據(jù)格式為NCHW(num_batches,channels,height,width)或者NHWC(num_batches,height,width,channels),默認(rèn)值:'NCHW'。
下面展示復(fù)現(xiàn)后代函數(shù)碼。
#篇幅關(guān)系,僅以數(shù)據(jù)格式為NCHW為例:
本次測(cè)試使用的測(cè)試工具為pytest,測(cè)試內(nèi)容包含參數(shù)覆蓋、數(shù)據(jù)類(lèi)型覆蓋、異常輸入等方面,下面展示前兩部分。
首先對(duì)API的參數(shù)覆蓋進(jìn)行測(cè)試,針對(duì)使用不同的輸入?yún)?shù)size和scale_factor進(jìn)行分別測(cè)試。通過(guò)使用兩種不同的表達(dá)方式對(duì)圖像進(jìn)行調(diào)整來(lái)測(cè)試此API。
經(jīng)過(guò)對(duì)參數(shù)覆蓋測(cè)試,測(cè)試結(jié)果無(wú)誤,證明該API正確性和穩(wěn)定性可以得到保證。
經(jīng)過(guò)對(duì)數(shù)據(jù)類(lèi)型測(cè)試,測(cè)試結(jié)果無(wú)誤,證明該API正確性和穩(wěn)定性可以得到保證。
API說(shuō)明:
輸入為4-D Tensor時(shí)形狀為(num_batches,channels,in_h,in_w)或者(num_batches,in_h,in_w,channels),調(diào)整大小只適用于高度和寬度對(duì)應(yīng)的維度。
參數(shù)說(shuō)明:
(1)size-輸出Tensor,輸入為4D張量,形狀為(out_h,out_w)的2-D Tensor。如果size是列表,每一個(gè)元素可以是整數(shù)或者形狀為[1]的變量。如果size是變量,則其維度大小為1。默認(rèn)值為None。
(2)scale_factor輸入的高度或?qū)挾鹊某藬?shù)因子。size和scale_factor至少要設(shè)置一個(gè)。size的優(yōu)先級(jí)高于scale_factor。默認(rèn)值為None。如果scale_factor是一個(gè)list或tuple,其必須與輸入的shape匹配。
(3)data_format指定輸入的數(shù)據(jù)格式,輸出的數(shù)據(jù)格式將與輸入保持一致。對(duì)于4-D Tensor,支持NCHW(num_batches,channels,height,width)或 者NHWC(num_batches,height,width,channels),默認(rèn)值:'NCHW'。
本文從參數(shù)覆蓋、正確性驗(yàn)證、數(shù)據(jù)類(lèi)型覆蓋、異常輸入等方面對(duì)飛槳框架中paddle.nn.UpsamplingNearest2D進(jìn)行了復(fù)現(xiàn)和單元測(cè)試,并未發(fā)現(xiàn)問(wèn)題。保證百度飛槳框架paddle.nn.UpsamplingNearest2D的正確性與穩(wěn)定性,完整的代碼因篇幅關(guān)系在此不做贅述。單測(cè)相關(guān)代碼已在Github網(wǎng)站PaddlePaddle/PaddleTest/[PaddlePaddle hackath-on]add UpsamplingNearest2D unittest下開(kāi)源。