国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程

這篇具有很好參考價(jià)值的文章主要介紹了【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、代碼

#---------------------------------------------------#
#   檢測圖片
#---------------------------------------------------#
def detect_image(self, image, count=False, name_classes=None):
    #---------------------------------------------------------#
    #   在這里將圖像轉(zhuǎn)換成RGB圖像,防止灰度圖在預(yù)測時(shí)報(bào)錯(cuò)。
    #   代碼僅僅支持RGB圖像的預(yù)測,所有其它類型的圖像都會(huì)轉(zhuǎn)化成RGB
    #---------------------------------------------------------#
    image       = cvtColor(image)
    #---------------------------------------------------#
    #   對(duì)輸入圖像進(jìn)行一個(gè)備份,后面用于繪圖
    #---------------------------------------------------#
    old_img     = copy.deepcopy(image)
    orininal_h  = np.array(image).shape[0]
    orininal_w  = np.array(image).shape[1]
    #---------------------------------------------------------#
    #   給圖像增加灰條,實(shí)現(xiàn)不失真的resize
    #   也可以直接resize進(jìn)行識(shí)別
    #---------------------------------------------------------#
    image_data, nw, nh  = resize_image(image, (self.input_shape[1],self.input_shape[0]))
    #---------------------------------------------------------#
    #   添加上batch_size維度
    #---------------------------------------------------------#
    image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, np.float32)), (2, 0, 1)), 0)

    with torch.no_grad():
        images = torch.from_numpy(image_data)
        if self.cuda:
            images = images.cuda()
            
        #---------------------------------------------------#
        #   圖片傳入網(wǎng)絡(luò)進(jìn)行預(yù)測
        #---------------------------------------------------#
        pr = self.net(images)[0]
        #---------------------------------------------------#
        #   取出每一個(gè)像素點(diǎn)的種類
        #---------------------------------------------------#
        pr = F.softmax(pr.permute(1,2,0),dim = -1).cpu().numpy()
        #--------------------------------------#
        #   將灰條部分截取掉
        #--------------------------------------#
        pr = pr[int((self.input_shape[0] - nh) // 2) : int((self.input_shape[0] - nh) // 2 + nh), \
                int((self.input_shape[1] - nw) // 2) : int((self.input_shape[1] - nw) // 2 + nw)]
        #---------------------------------------------------#
        #   進(jìn)行圖片的resize
        #---------------------------------------------------#
        pr = cv2.resize(pr, (orininal_w, orininal_h), interpolation = cv2.INTER_LINEAR)
        #---------------------------------------------------#
        #   取出每一個(gè)像素點(diǎn)的種類
        #---------------------------------------------------#
        pr = pr.argmax(axis=-1)

        seg_img = np.reshape(np.array(self.colors, np.uint8)[np.reshape(pr, [-1])], [orininal_h, orininal_w, -1])
        #------------------------------------------------#
        #   將新圖片轉(zhuǎn)換成Image的形式
        #------------------------------------------------#
        image   = Image.fromarray(np.uint8(seg_img))
        #------------------------------------------------#
        #   將新圖與原圖及進(jìn)行混合
        #------------------------------------------------#
        image   = Image.blend(old_img, image, 0.7)

二、代碼逐步debug調(diào)試

(1)讀圖

#---------------------------------------------------------#
#   在這里將圖像轉(zhuǎn)換成RGB圖像,防止灰度圖在預(yù)測時(shí)報(bào)錯(cuò)。
#   代碼僅僅支持RGB圖像的預(yù)測,所有其它類型的圖像都會(huì)轉(zhuǎn)化成RGB
#---------------------------------------------------------#
image       = cvtColor(image)

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能

(2) Letterbox

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能
【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能
無論輸入的圖片尺寸多大,都會(huì)經(jīng)過letter_box后,變?yōu)?12x512尺寸

(3) 歸一化、HWC 轉(zhuǎn) CHW,并expand維度到NCHW,轉(zhuǎn)tensor

def preprocess_input(image):
    image /= 255.0
    return image
    
#---------------------------------------------------------#
#   添加上batch_size維度
#---------------------------------------------------------#
image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, np.float32)), (2, 0, 1)), 0)

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能

(4) 前向傳播

#---------------------------------------------------#
#   圖片傳入網(wǎng)絡(luò)進(jìn)行預(yù)測
#---------------------------------------------------#
pr = self.net(images)[0]

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能
21個(gè)channel代表(20+1)個(gè)類別,512x512為模型輸入及輸入尺寸

(5) softmax 計(jì)算像素類別概率

#---------------------------------------------------#
#   取出每一個(gè)像素點(diǎn)的種類
#---------------------------------------------------#
pr = F.softmax(pr.permute(1,2,0),dim = -1).cpu().numpy()

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能

經(jīng)過softmax后,512x512的mask圖中,每個(gè)位置(x,y)對(duì)應(yīng)的21個(gè)channel的值和為1。

(6) 截取灰條部分,并resize到原圖尺寸(逆letter_box)

            #--------------------------------------#
            #   將灰條部分截取掉
            #--------------------------------------#
            pr = pr[int((self.input_shape[0] - nh) // 2) : int((self.input_shape[0] - nh) // 2 + nh), \
                    int((self.input_shape[1] - nw) // 2) : int((self.input_shape[1] - nw) // 2 + nw)]
            #---------------------------------------------------#
            #   進(jìn)行圖片的resize
            #---------------------------------------------------#
            pr = cv2.resize(pr, (orininal_w, orininal_h), interpolation = cv2.INTER_LINEAR)

pr類型是np,array,所以可以通過這種方式進(jìn)行逆letter_box操作,將mask的寬高,還原到原始輸入圖片的寬高。

(7) 利用argmax,計(jì)算每個(gè)像素屬于的類別

#---------------------------------------------------#
#   取出每一個(gè)像素點(diǎn)的種類
#---------------------------------------------------#
pr = pr.argmax(axis=-1)

返回最后一個(gè)維度(channel)中,最大值所對(duì)應(yīng)的索引,即類別。例如,像素點(diǎn)(x1,y1)所對(duì)應(yīng)的21個(gè)channel中,第5個(gè)channel的值最大,則像素點(diǎn)(x1,y1)對(duì)應(yīng)類別則是class=5。

(8) 可視化

seg_img = np.reshape(np.array(self.colors, np.uint8)[np.reshape(pr, [-1])], [orininal_h, orininal_w, -1])
#------------------------------------------------#
#   將新圖片轉(zhuǎn)換成Image的形式
#------------------------------------------------#
image   = Image.fromarray(np.uint8(seg_img))
#------------------------------------------------#
#   將新圖與原圖及進(jìn)行混合
#------------------------------------------------#
image   = Image.blend(old_img, image, 0.7)

【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程,搭建自己的深度學(xué)習(xí)框架,語義分割,深度學(xué)習(xí),人工智能
將預(yù)測的結(jié)果與原圖進(jìn)行混合。文章來源地址http://www.zghlxwxcb.cn/news/detail-853081.html

到了這里,關(guān)于【深度學(xué)習(xí)實(shí)戰(zhàn)(6)】搭建通用的語義分割推理流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包