您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python基于域相關(guān)實(shí)現(xiàn)圖像增強(qiáng)的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python基于域相關(guān)實(shí)現(xiàn)圖像增強(qiáng)的方法是什么”吧!
當(dāng)在圖像上訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型時(shí),通過對(duì)由數(shù)據(jù)增強(qiáng)生成的更多圖像進(jìn)行訓(xùn)練,可以使模型更好地泛化。常用的增強(qiáng)包括水平和垂直翻轉(zhuǎn)/移位、以一定角度和方向(順時(shí)針/逆時(shí)針)隨機(jī)旋轉(zhuǎn)、亮度、飽和度、對(duì)比度和縮放增強(qiáng)。
Python中一個(gè)非常流行的圖像增強(qiáng)庫是albumentations,通過直觀的函數(shù)和優(yōu)秀的文檔,可以輕松地增強(qiáng)圖像。它也可以與PyTorch和TensorFlow等流行的深度學(xué)習(xí)框架一起使用。
域相關(guān)的數(shù)據(jù)增強(qiáng)
直覺
背后的想法來自于在現(xiàn)實(shí)中可能遇到的圖像。例如,像雪或雨滴這樣的增強(qiáng)是不應(yīng)該在x射線圖像中發(fā)現(xiàn)的增強(qiáng),但胸管和起搏器是可以在x射線圖像中發(fā)現(xiàn)的增強(qiáng)。
這個(gè)想法從何而來
改變了Roman (@ nroman on Kaggle)為SIIM-ISIC黑色素瘤分類比賽做增強(qiáng)的方法。 增強(qiáng)的一個(gè)片段如下所示:
原始圖像(左上方)和頭發(fā)增強(qiáng)圖像(右上方)
此文確實(shí)在我們的模型訓(xùn)練中使用了他的增強(qiáng)函數(shù),這有助于提高我們大多數(shù)模型的交叉驗(yàn)證(CV)分?jǐn)?shù)。
想說的是,這種形式的增強(qiáng)可能在我們的最終排名中發(fā)揮了關(guān)鍵作用!從那時(shí)起,使用頭發(fā)(或一般的人工制品)來增強(qiáng)圖像數(shù)據(jù)的想法在我參加的后續(xù)比賽中非常接近,并盡可能地加以應(yīng)用。
特別是,該方法被推廣并應(yīng)用于全球小麥檢測(cè)、木薯葉病分類挑戰(zhàn)賽。
正如標(biāo)題所示,這種方法包括用昆蟲增強(qiáng)圖像。這可以是數(shù)據(jù)中的一種自然設(shè)置,因?yàn)槔ハx通常在空中或地面上被發(fā)現(xiàn)。
在本例中,在木薯和全球小麥檢測(cè)競(jìng)賽中,蜜蜂被用作增強(qiáng)葉片圖像時(shí)的首選昆蟲。以下是增強(qiáng)圖像的外觀示例:
蜜蜂在葉子周圍飛翔的增強(qiáng)圖像
我們還可以使用掩碼形式,導(dǎo)致圖像中出現(xiàn)黑點(diǎn)(類似于相冊(cè)中的脫落),即沒有顏色和黑色的蜜蜂:
增強(qiáng)圖像,黑色/黑色蜜蜂圍繞樹葉飛行
以下以Albumentations風(fēng)格編寫的代碼允許增強(qiáng)函數(shù)與來自Albumentations庫的其他增強(qiáng)函數(shù)一起輕松使用:
from albumentations.core.transforms_interface import ImageOnlyTransform class InsectAugmentation(ImageOnlyTransform): """ 將昆蟲的圖像強(qiáng)加到目標(biāo)圖像上 ----------------------------------------------- 參數(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) # 在這個(gè)例子中,我用1而不是0來說明增強(qiáng)效果 if not n_insects: return image height, width, _ = image.shape # 目標(biāo)圖像的寬度和高度 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
如果你希望使用黑色版本,請(qǐng)將dark_insect設(shè)置為True。
在這種方法中,使用針來增強(qiáng)圖像,例如可以是x射線圖像。以下是增強(qiáng)圖像的外觀示例:
x光片左側(cè)帶針頭的增強(qiáng)圖像
類似地,我們可以使用黑色版本的針,從而生成以下增強(qiáng)圖像:
x射線兩側(cè)帶有黑色/黑色針頭的增強(qiáng)圖像
作為上述擴(kuò)展模塊的代碼片段如下所示:
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 # 目標(biāo)圖像的寬度和高度 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
請(qǐng)注意,以上內(nèi)容不是Albumentations格式,不能直接應(yīng)用于常規(guī)Albumentations增強(qiáng)。必須進(jìn)行一些調(diào)整,使其與上述昆蟲/蜜蜂增強(qiáng)中的格式相同。但變化應(yīng)該很?。?/p>
同樣,如果你希望使用黑色版本,請(qǐng)將dark_Piners設(shè)置為True。
總的來說,局部CV結(jié)果有所改善,大部分略有改善(如0.001–0.003)。但在某些情況下,使用這種增強(qiáng)方法在訓(xùn)練過程中“失敗”。
例如,在全球小麥檢測(cè)競(jìng)賽中,任務(wù)涉及檢測(cè)小麥頭部,即目標(biāo)檢測(cè)任務(wù)。盡管進(jìn)行了大量的超參數(shù)調(diào)整,但使用原始蜜蜂的蜜蜂增強(qiáng)導(dǎo)致訓(xùn)練驗(yàn)證損失波動(dòng)很大。
雖然使用增強(qiáng)器確實(shí)提高了CV,但可以說這確實(shí)是一個(gè)幸運(yùn)的機(jī)會(huì)。使用僅保留黑色像素的增強(qiáng)被證明在應(yīng)用程序的各個(gè)領(lǐng)域是穩(wěn)定的。特別是,CV的提升是實(shí)質(zhì)性的,也是一致的。
到目前為止,尚未找到蜜蜂數(shù)量增加導(dǎo)致不同epoch之間出現(xiàn)這種訓(xùn)練結(jié)果的原因,但有一種假設(shè)是蜜蜂的顏色接近某些麥頭,因此“混淆”了檢測(cè)算法,該算法隨后在同一邊界框內(nèi)捕獲麥頭和最近的蜜蜂。
在一些邊界框預(yù)測(cè)中觀察到了這一點(diǎn),但沒有足夠的觀察案例可以肯定地說這一假設(shè)是正確的。在任何情況下,還應(yīng)該考慮圖像屬性(顏色)是否具有接近目標(biāo)(例如小麥頭)的分布。
另一方面,使用針的增強(qiáng)被證明(原始及其黑色/黑色版本)都相對(duì)穩(wěn)定。在該示例中,預(yù)測(cè)的目標(biāo)雖然在顏色分布上相似,但可能具有明顯的特征(例如,胸管看起來與針頭大不相同),因此分類算法不會(huì)混淆針頭是否是正確的目標(biāo)。
感謝各位的閱讀,以上就是“Python基于域相關(guān)實(shí)現(xiàn)圖像增強(qiáng)的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Python基于域相關(guān)實(shí)現(xiàn)圖像增強(qiáng)的方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。