如何使用Albumentations 對目標檢測任務做增強

      網友投稿 929 2025-04-01

      目錄

      1、導入所需的庫

      2、定義可視化函數顯示圖像上的邊界框和類標簽

      3、獲取圖像和標注

      4、使用RandomSizedBBoxSafeCrop保留原始圖像中的所有邊界框

      5、定義增強管道

      6、輸入用于增強的圖像和邊框

      7、其他不同隨機種子的示例

      諸如RandomCrop和CenterCrop之類的某些增強功能可能會變換圖像,使其不包含所有原始邊界框。 本示例說明如何使用名為RandomSizedBBoxSafeCrop的變換來裁剪圖像的一部分,但保留原始圖像的所有邊界框。

      1、導入所需的庫

      import random import cv2 from matplotlib import pyplot as plt import albumentations as A

      2、定義可視化函數顯示圖像上的邊界框和類標簽

      可視化函數參考https://github.com/facebookresearch/Detectron/blob/master/detectron/utils/vis.py

      如何使用Albumentations 對目標檢測任務做增強

      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)

      3、獲取圖像和標注

      在此示例中,我們將使用來自COCO數據集的圖像,該圖像具有兩個關聯的邊界框。 該映像位于http://cocodataset.org/#explore?id=386298

      從磁盤加載圖像

      image = cv2.imread('images/000000386298.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

      用坐標和類標簽定義兩個邊界框

      這些邊界框的坐標使用coco格式聲明。 每個邊界框使用四個值[x_min, y_min, width, height]進行描述。 有關邊界框坐標的不同格式的詳細說明,請參閱有關邊界框的文檔文章-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)

      4、使用RandomSizedBBoxSafeCrop保留原始圖像中的所有邊界框

      RandomSizedBBoxSafeCrop?crops 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. The?erosion_rate?parameter controls how much area of the original bounding box could be lost after cropping.?erosion_rate = 0.2?means that the augmented bounding box's area could be up to 20% smaller than the area of the original bounding box.

      RandomSizedBBoxSafeCrop裁剪圖像的隨機部分。 它確保裁剪的部分將包含原始圖像的所有邊界框。 然后,變換會將作物重新縮放為相應參數指定的高度和寬度。 erosion_rate參數控制裁剪后可能丟失原始邊界框的面積。 frosting_rate = 0.2表示擴充后的邊界框的面積可能比原始邊界框的面積小20%。

      5、定義增強管道

      transform = A.Compose( [A.RandomSizedBBoxSafeCrop(width=448, height=336, erosion_rate=0.2)], bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']), )

      6、輸入用于增強的圖像和邊框

      我們固定隨機種子是為了可視化目的,因此增強將始終產生相同的結果。 在真實的計算機視覺管道中,您不應該在對圖像應用轉換之前固定隨機種子,因為在這種情況下,管道將始終輸出相同的圖像。 圖像增強的目的是每次使用不同的變換。

      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, )

      7、其他不同隨機種子的示例

      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, )

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:ROUND()函數對數據四舍五入
      下一篇:WPS表格如何設置序號下拉列表(wps怎么往下拉序號)
      相關文章
      亚洲人成网站在线播放2019| 国产偷v国产偷v亚洲高清| 亚洲成AV人片在WWW色猫咪| 狼人大香伊蕉国产WWW亚洲| 亚洲日本在线电影| 亚洲成A人片在线播放器| 亚洲一区二区三区高清视频| 亚洲精品在线免费观看| 亚洲欧洲视频在线观看| 亚洲欧洲国产视频| 亚洲人成免费电影| 亚洲人成777在线播放| 亚洲av无码一区二区三区观看| 亚洲一区二区三区精品视频| 亚洲免费网站在线观看| 亚洲六月丁香婷婷综合| 亚洲综合小说另类图片动图| 亚洲午夜理论片在线观看| 亚洲日本中文字幕天天更新| 亚洲AV无码XXX麻豆艾秋| 国产精品手机在线亚洲| 亚洲国产精品一区二区三区久久 | 中文字幕精品无码亚洲字| 亚洲人成人无码网www国产| 国产精品亚洲αv天堂无码| 亚洲中文字幕无码久久2017| 亚洲精品无码永久在线观看你懂的 | 亚洲高清国产拍精品熟女| 亚洲av无码专区在线电影| 精品无码专区亚洲| 亚洲国产成人久久综合区| 亚洲伊人成无码综合网| 亚洲人成伊人成综合网久久久 | 亚洲熟妇久久精品| 亚洲AV日韩AV一区二区三曲 | 久久精品国产亚洲av影院| 亚洲国产成人精品无码区在线网站 | 国产成人综合亚洲亚洲国产第一页 | 亚洲无成人网77777| 男人天堂2018亚洲男人天堂| 亚洲av无码无线在线观看|