Python深度學(xué)習(xí)之使用Albumentations對(duì)圖像做增強(qiáng)
一、導(dǎo)入所需的庫(kù)
import random import cv2 from matplotlib import pyplot as plt import albumentations as A
二、定義可視化函數(shù)顯示圖像上的邊界框和類標(biāo)簽
可視化函數(shù)參考https://github.com/facebookresearch/Detectron/blob/master/detectron/utils/vis.py
BOX_COLOR = (255, 0, 0) # Red
TEXT_COLOR = (255, 255, 255) # White
def visualize_bbox(img, bbox, class_name, color=BOX_COLOR, thickness=2):
"""Visualizes a single bounding box on the image"""
x_min, y_min, w, h = bbox
x_min, x_max, y_min, y_max = int(x_min), int(x_min + w), int(y_min), int(y_min + h)
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color=color, thickness=thickness)
((text_width, text_height), _) = cv2.getTextSize(class_name, cv2.FONT_HERSHEY_SIMPLEX, 0.35, 1)
cv2.rectangle(img, (x_min, y_min - int(1.3 * text_height)), (x_min + text_width, y_min), BOX_COLOR, -1)
cv2.putText(
img,
text=class_name,
org=(x_min, y_min - int(0.3 * text_height)),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.35,
color=TEXT_COLOR,
lineType=cv2.LINE_AA,
)
return img
def visualize(image, bboxes, category_ids, category_id_to_name):
img = image.copy()
for bbox, category_id in zip(bboxes, category_ids):
class_name = category_id_to_name[category_id]
img = visualize_bbox(img, bbox, class_name)
plt.figure(figsize=(12, 12))
plt.axis('off')
plt.imshow(img)
三、獲取圖像和標(biāo)注
在此示例中,我們將使用來自COCO數(shù)據(jù)集的圖像,該圖像具有兩個(gè)關(guān)聯(lián)的邊界框。 該映像位于http://cocodataset.org/#explore?id=386298
從磁盤加載圖像
image = cv2.imread('images/000000386298.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
用坐標(biāo)和類標(biāo)簽定義兩個(gè)邊界框
這些邊界框的坐標(biāo)使用coco格式聲明。 每個(gè)邊界框使用四個(gè)值[x_min, y_min, width, height]進(jìn)行描述。 有關(guān)邊界框坐標(biāo)的不同格式的詳細(xì)說明,請(qǐng)參閱有關(guān)邊界框的文檔文章-https://albumentations.ai/docs/getting_started/bounding_boxes_augmentation/。
bboxes = [[5.66, 138.95, 147.09, 164.88], [366.7, 80.84, 132.8, 181.84]]
category_ids = [17, 18]
# We will use the mapping from category_id to the class name
# to visualize the class label for the bounding box on the image
category_id_to_name = {17: 'cat', 18: 'dog'}
展示圖像的邊框
visualize(image, bboxes, category_ids, category_id_to_name)

四、使用RandomSizedBBoxSafeCrop保留原始圖像中的所有邊界框
RandomSizedBBoxSafeCropcrops a random part of the image. It ensures that the cropped part will contain all bounding boxes from the original image. Then the transform rescales the crop to height and width specified by the respective parameters. Theerosion_rateparameter controls how much area of the original bounding box could be lost after cropping.erosion_rate = 0.2means that the augmented bounding box's area could be up to 20% smaller than the area of the original bounding box.
RandomSizedBBoxSafeCrop裁剪圖像的隨機(jī)部分。 它確保裁剪的部分將包含原始圖像的所有邊界框。 然后,變換會(huì)將作物重新縮放為相應(yīng)參數(shù)指定的高度和寬度。 erosion_rate參數(shù)控制裁剪后可能丟失原始邊界框的面積。 frosting_rate = 0.2表示擴(kuò)充后的邊界框的面積可能比原始邊界框的面積小20%。
五、定義增強(qiáng)管道
transform = A.Compose( [A.RandomSizedBBoxSafeCrop(width=448, height=336, erosion_rate=0.2)], bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']), )
六、輸入用于增強(qiáng)的圖像和邊框
我們固定隨機(jī)種子是為了可視化目的,因此增強(qiáng)將始終產(chǎn)生相同的結(jié)果。 在真實(shí)的計(jì)算機(jī)視覺管道中,您不應(yīng)該在對(duì)圖像應(yīng)用轉(zhuǎn)換之前固定隨機(jī)種子,因?yàn)樵谶@種情況下,管道將始終輸出相同的圖像。 圖像增強(qiáng)的目的是每次使用不同的變換。
random.seed(7) transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids) visualize( transformed['image'], transformed['bboxes'], transformed['category_ids'], category_id_to_name, )

七、其他不同隨機(jī)種子的示例
random.seed(3) transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids) visualize( transformed['image'], transformed['bboxes'], transformed['category_ids'], category_id_to_name, )

random.seed(444) transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids) visualize( transformed['image'], transformed['bboxes'], transformed['category_ids'], category_id_to_name, )

到此這篇關(guān)于Python深度學(xué)習(xí)之使用Albumentations對(duì)目標(biāo)檢測(cè)任務(wù)做增強(qiáng)的文章就介紹到這了,更多相關(guān)用Albumentations對(duì)目標(biāo)做增強(qiáng)內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信