最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基于域相關(guān)實現(xiàn)圖像增強的方法教程

 更新時間:2022年01月08日 10:36:47   作者:woshicver  
當在圖像上訓練深度神經(jīng)網(wǎng)絡(luò)模型時,通過對由數(shù)據(jù)增強生成的更多圖像進行訓練,可以使模型更好地泛化。本文將為大家介紹Python基于域相關(guān)的圖像增強實現(xiàn)方法,需要的可以了解一下

介紹

當在圖像上訓練深度神經(jīng)網(wǎng)絡(luò)模型時,通過對由數(shù)據(jù)增強生成的更多圖像進行訓練,可以使模型更好地泛化。常用的增強包括水平和垂直翻轉(zhuǎn)/移位、以一定角度和方向(順時針/逆時針)隨機旋轉(zhuǎn)、亮度、飽和度、對比度和縮放增強。

Python中一個非常流行的圖像增強庫是albumentations(https://albumentations.ai/),通過直觀的函數(shù)和優(yōu)秀的文檔,可以輕松地增強圖像。它也可以與PyTorch和TensorFlow等流行的深度學習框架一起使用。

域相關(guān)的數(shù)據(jù)增強

直覺

背后的想法來自于在現(xiàn)實中可能遇到的圖像。例如,像雪或雨滴這樣的增強是不應(yīng)該在x射線圖像中發(fā)現(xiàn)的增強,但胸管和起搏器是可以在x射線圖像中發(fā)現(xiàn)的增強。

這個想法從何而來

改變了Roman (@ nroman on Kaggle)為SIIM-ISIC黑色素瘤分類比賽做增強的方法。有關(guān)他的方法的詳細信息,請參見:https://www.kaggle.com/c/siim-isic-melanoma-classification/discussion/159176. 增強的一個片段如下所示:

原始圖像(左上方)和頭發(fā)增強圖像(右上方)

此文確實在我們的模型訓練中使用了他的增強函數(shù),這有助于提高我們大多數(shù)模型的交叉驗證(CV)分數(shù)。

想說的是,這種形式的增強可能在我們的最終排名中發(fā)揮了關(guān)鍵作用!從那時起,使用頭發(fā)(或一般的人工制品)來增強圖像數(shù)據(jù)的想法在我參加的后續(xù)比賽中非常接近,并盡可能地加以應(yīng)用。

特別是,該方法被推廣并應(yīng)用于全球小麥檢測、木薯葉病分類挑戰(zhàn)賽。

昆蟲增強

正如標題所示,這種方法包括用昆蟲增強圖像。這可以是數(shù)據(jù)中的一種自然設(shè)置,因為昆蟲通常在空中或地面上被發(fā)現(xiàn)。

在本例中,在木薯和全球小麥檢測競賽中,蜜蜂被用作增強葉片圖像時的首選昆蟲。以下是增強圖像的外觀示例:

蜜蜂在葉子周圍飛翔的增強圖像

我們還可以使用掩碼形式,導致圖像中出現(xiàn)黑點(類似于相冊中的脫落),即沒有顏色和黑色的蜜蜂:

增強圖像,黑色/黑色蜜蜂圍繞樹葉飛行

以下以Albumentations風格編寫的代碼允許增強函數(shù)與來自Albumentations庫的其他增強函數(shù)一起輕松使用:

from albumentations.core.transforms_interface import ImageOnlyTransform
    
class InsectAugmentation(ImageOnlyTransform):
    """
    將昆蟲的圖像強加到目標圖像上
    -----------------------------------------------
    參數(shù):
        insects (int): 昆蟲的最大數(shù)量
        insects_folder (str): 昆蟲圖片文件夾的路徑
    """
 
    def __init__(self, insects=2, dark_insect=False, always_apply=False, p=0.5):
        super().__init__(always_apply, p)
        self.insects = insects
        self.dark_insect = dark_insect
        self.insects_folder = "/kaggle/input/bee-augmentation/"
 
    def apply(self, image, **kwargs):
        """
        參數(shù):
            image (PIL Image): 畫昆蟲的圖像。
        Returns:
            PIL Image: 帶昆蟲的圖像。
        """
        n_insects = random.randint(1, self.insects) # 在這個例子中,我用1而不是0來說明增強效果
        
        if not n_insects:
            return image
        
        height, width, _ = image.shape  # 目標圖像的寬度和高度
        insects_images = [im for im in os.listdir(self.insects_folder) if 'png' in im]
        
        for _ in range(n_insects):
            insect = cv2.cvtColor(cv2.imread(os.path.join(self.insects_folder, random.choice(insects_images))), cv2.COLOR_BGR2RGB)
            insect = cv2.flip(insect, random.choice([-1, 0, 1]))
            insect = cv2.rotate(insect, random.choice([0, 1, 2]))
 
            h_height, h_width, _ = insect.shape  # 昆蟲圖像的寬度和高度
            roi_ho = random.randint(0, image.shape[0] - insect.shape[0])
            roi_wo = random.randint(0, image.shape[1] - insect.shape[1])
            roi = image[roi_ho:roi_ho + h_height, roi_wo:roi_wo + h_width]
 
            # 創(chuàng)建掩碼和反掩碼
            img2gray = cv2.cvtColor(insect, cv2.COLOR_BGR2GRAY)
            ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
            mask_inv = cv2.bitwise_not(mask)
 
            # 現(xiàn)在黑掉的區(qū)域是昆蟲
            img_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
 
            # 從昆蟲圖像中只選取昆蟲區(qū)域。
            if self.dark_insect:
                img_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
                insect_fg = cv2.bitwise_and(img_bg, img_bg, mask=mask)
            else:
                insect_fg = cv2.bitwise_and(insect, insect, mask=mask)
 
            # 添加
            dst = cv2.add(img_bg, insect_fg, dtype=cv2.CV_64F)
 
            image[roi_ho:roi_ho + h_height, roi_wo:roi_wo + h_width] = dst
                
        return image

如果你希望使用黑色版本,請將dark_insect設(shè)置為True。在這個Kaggle筆記本中可以找到一個示例實現(xiàn):https://www.kaggle.com/khoongweihao/insect-augmentation-with-efficientdet-d6/notebook

使用針的增強

在這種方法中,使用針來增強圖像,例如可以是x射線圖像。以下是增強圖像的外觀示例:

x光片左側(cè)帶針頭的增強圖像

類似地,我們可以使用黑色版本的針,從而生成以下增強圖像:

x射線兩側(cè)帶有黑色/黑色針頭的增強圖像

作為上述擴展模塊的代碼片段如下所示:

def NeedleAugmentation(image, n_needles=2, dark_needles=False, p=0.5, needle_folder='../input/xray-needle-augmentation'):
    aug_prob = random.random()
    if aug_prob < p:
        height, width, _ = image.shape  # 目標圖像的寬度和高度
        needle_images = [im for im in os.listdir(needle_folder) if 'png' in im]
 
        for _ in range(1, n_needles):
            needle = cv2.cvtColor(cv2.imread(os.path.join(needle_folder, random.choice(needle_images))), cv2.COLOR_BGR2RGB)
            needle = cv2.flip(needle, random.choice([-1, 0, 1]))
            needle = cv2.rotate(needle, random.choice([0, 1, 2]))
 
            h_height, h_width, _ = needle.shape  # 針圖像的寬度和高度
            roi_ho = random.randint(0, abs(image.shape[0] - needle.shape[0]))
            roi_wo = random.randint(0, abs(image.shape[1] - needle.shape[1]))
            roi = image[roi_ho:roi_ho + h_height, roi_wo:roi_wo + h_width]
 
            # 創(chuàng)建掩碼和反掩碼
            img2gray = cv2.cvtColor(needle, cv2.COLOR_BGR2GRAY)
            ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
            mask_inv = cv2.bitwise_not(mask)
 
            # 現(xiàn)在黑掉的區(qū)域是針
            img_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
 
            # 只選取針區(qū)域。
            if dark_needles:
                img_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
                needle_fg = cv2.bitwise_and(img_bg, img_bg, mask=mask)
            else:
                needle_fg = cv2.bitwise_and(needle, needle, mask=mask)
 
            # 添加
            dst = cv2.add(img_bg, needle_fg, dtype=cv2.CV_64F)
 
            image[roi_ho:roi_ho + h_height, roi_wo:roi_wo + h_width] = dst
 
    return image

請注意,以上內(nèi)容不是Albumentations格式,不能直接應(yīng)用于常規(guī)Albumentations增強。必須進行一些調(diào)整,使其與上述昆蟲/蜜蜂增強中的格式相同。但變化應(yīng)該很??!

同樣,如果你希望使用黑色版本,請將dark_Piners設(shè)置為True。在我的Kaggle筆記本中可以找到一個示例實現(xiàn):https://www.kaggle.com/khoongweihao/x-ray-needle-augmentation-et-al/notebook.

實驗結(jié)果

總的來說,局部CV結(jié)果有所改善,大部分略有改善(如0.001–0.003)。但在某些情況下,使用這種增強方法在訓練過程中“失敗”。

例如,在全球小麥檢測競賽中,任務(wù)涉及檢測小麥頭部,即目標檢測任務(wù)。盡管進行了大量的超參數(shù)調(diào)整,但使用原始蜜蜂的蜜蜂增強導致訓練驗證損失波動很大。

雖然使用增強器確實提高了CV,但可以說這確實是一個幸運的機會。使用僅保留黑色像素的增強被證明在應(yīng)用程序的各個領(lǐng)域是穩(wěn)定的。特別是,CV的提升是實質(zhì)性的,也是一致的。

到目前為止,尚未找到蜜蜂數(shù)量增加導致不同epoch之間出現(xiàn)這種訓練結(jié)果的原因,但有一種假設(shè)是蜜蜂的顏色接近某些麥頭,因此“混淆”了檢測算法,該算法隨后在同一邊界框內(nèi)捕獲麥頭和最近的蜜蜂。

在一些邊界框預(yù)測中觀察到了這一點,但沒有足夠的觀察案例可以肯定地說這一假設(shè)是正確的。在任何情況下,還應(yīng)該考慮圖像屬性(顏色)是否具有接近目標(例如小麥頭)的分布。

另一方面,使用針的增強被證明(原始及其黑色/黑色版本)都相對穩(wěn)定。在該示例中,預(yù)測的目標雖然在顏色分布上相似,但可能具有明顯的特征(例如,胸管看起來與針頭大不相同),因此分類算法不會混淆針頭是否是正確的目標。

到此這篇關(guān)于Python基于域相關(guān)實現(xiàn)圖像增強的方法教程的文章就介紹到這了,更多相關(guān)Python圖像增強內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用grequests并發(fā)發(fā)送請求的示例

    Python使用grequests并發(fā)發(fā)送請求的示例

    這篇文章主要介紹了Python使用grequests并發(fā)送請求的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • linux下python使用sendmail發(fā)送郵件

    linux下python使用sendmail發(fā)送郵件

    這篇文章主要為大家詳細介紹了linux下python使用sendmail發(fā)送郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 對python3 中方法各種參數(shù)和返回值詳解

    對python3 中方法各種參數(shù)和返回值詳解

    今天小編就為大家分享一篇對python3 中方法各種參數(shù)和返回值詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python計算機視覺OpenCV入門講解

    python計算機視覺OpenCV入門講解

    這篇文章主要介紹了python計算機視覺OpenCV入門講解,關(guān)于圖像處理的相關(guān)簡單操作,包括讀入圖像、顯示圖像及圖像相關(guān)理論知識
    2022-06-06
  • Python 中 and, or, &, |, ^ 的使用小結(jié)

    Python 中 and, or, &, |, ^ 

    這篇文章主要介紹了Python 中 and, or, &, |, ^ 的使用小結(jié),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • PyTorch實現(xiàn)重寫/改寫Dataset并載入Dataloader

    PyTorch實現(xiàn)重寫/改寫Dataset并載入Dataloader

    這篇文章主要介紹了PyTorch實現(xiàn)重寫/改寫Dataset并載入Dataloader,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Pycharm遠程調(diào)試原理及具體配置詳解

    Pycharm遠程調(diào)試原理及具體配置詳解

    這篇文章主要介紹了Pycharm遠程調(diào)試原理及具體配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • OpenCV圖像處理GUI功能詳解

    OpenCV圖像處理GUI功能詳解

    GUI功能是opencv的入門知識,本文給大家介紹下OpenCV圖像處理GUI功能,結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,感興趣的朋友一起看看吧
    2022-03-03
  • Django REST Swagger實現(xiàn)指定api參數(shù)

    Django REST Swagger實現(xiàn)指定api參數(shù)

    這篇文章主要介紹了Django REST Swagger實現(xiàn)指定api參數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python?共現(xiàn)矩陣的實現(xiàn)代碼

    python?共現(xiàn)矩陣的實現(xiàn)代碼

    這篇文章主要介紹了python?共現(xiàn)矩陣的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

神农架林区| 马边| 锦屏县| 通海县| 丰宁| 瓮安县| 民县| 开封县| 方城县| 古浪县| 津南区| 井冈山市| 土默特右旗| 饶河县| 乌苏市| 和平县| 米脂县| 龙门县| 青神县| 漯河市| 巴东县| 乐业县| 古浪县| 含山县| 双桥区| 南召县| 吉林市| 容城县| 措美县| 清徐县| 和平县| 如皋市| 山阴县| 泊头市| 洪雅县| 大同县| 杭锦旗| 理塘县| 天柱县| 清丰县| 启东市|