Kaggle小技巧:TTA(test time augmentation)測試時增強
1.原理簡述
TTA:test time augmentation
顧名思義是測試時增強的意思,可將準確率提高若干個百分點,它就是測試時增強(test time augmentation, TTA)。這裡會為原始影像造出多個不同版本,包括不同區域裁剪和更改縮放程度等,並將它們輸入到模型中;然後對多個版本進行計算得到平均輸出,作為影像的最終輸出分數。
儘管有作弊的嫌疑。
但這種技術很有效,因為原始影像顯示的區域可能會缺少一些重要特徵,在模型中輸入影像的多個版本並取平均值,能解決上述問題。
2.程式碼實現
這次打kaggle比賽時,是影像目標檢測類的,用到了TTA,提高了LB,實現的主要API類如下:
***
類中函式說明:
augment:為一張圖片製作TTA
batch_augment:為多張圖片批量製作TTA
deaugment_boxes:將TTA預測框返回到影像的原始狀態中
***
class BaseTTA:
image_size = 512
def augment(self, image):
raise NotImplementedError
def batch_augment(self, images):
raise NotImplementedError
def deaugment_boxes(self, boxes):
raise NotImplementedError
# 水平翻轉
class TTAHorizontalFlip(BaseTTA):
def augment(self, image):
return image.flip(1)
def batch_augment(self, images):
return images.flip(2)
def deaugment_boxes(self, boxes):
boxes[:, [1,3]] = self.image_size - boxes[:, [3,1]]
return boxes
# 垂直翻轉
class TTAVerticalFlip(BaseTTA):
def augment(self, image):
return image.flip(2)
def batch_augment(self, images):
return images.flip(3)
def deaugment_boxes(self, boxes):
boxes[:, [0,2]] = self.image_size - boxes[:, [2,0]]
return boxes
# 旋轉90°
class TTARotate90(BaseTTA):
def augment(self, image):
return torch.rot90(image, 1, (1, 2))
def batch_augment(self, images):
return torch.rot90(images, 1, (2, 3))
def deaugment_boxes(self, boxes):
res_boxes = boxes.copy()
res_boxes[:, [0,2]] = self.image_size - boxes[:, [1,3]]
res_boxes[:, [1,3]] = boxes[:, [2,0]]
return res_boxes
# 組合使用
class TTACompose(BaseTTA):
def __init__(self, transforms):
self.transforms = transforms
def augment(self, image):
for transform in self.transforms:
image = transform.augment(image)
return image
def batch_augment(self, images):
for transform in self.transforms:
images = transform.batch_augment(images)
return images
def prepare_boxes(self, boxes):
result_boxes = boxes.copy()
result_boxes[:,0] = np.min(boxes[:, [0,2]], axis=1)
result_boxes[:,2] = np.max(boxes[:, [0,2]], axis=1)
result_boxes[:,1] = np.min(boxes[:, [1,3]], axis=1)
result_boxes[:,3] = np.max(boxes[:, [1,3]], axis=1)
return result_boxes
def deaugment_boxes(self, boxes):
for transform in self.transforms[::-1]:
boxes = transform.deaugment_boxes(boxes)
return self.prepare_boxes(boxes)
須知少時凌雲志,曾許人間第一流!
相關文章
- 增強自動化測試的8大技巧
- 測試隨筆(test)
- 模糊測試 FUZZING test
- 調研.AI 增強 PlayWright 案例及工具 ( AI Native Test)AI
- Akka.net 效能測試兼使用小技巧
- 如何學習效能測試?LoadRunner小技巧集錦
- Ghost Push —— Monkey Test & Time Service病毒分析報告
- go test 測試用例那些事(二) mockGoMock
- vue單元測試vue test utils使用初探Vue
- ABAP和Java的單元測試Unit TestJava
- TorchVision Faster R-CNN 微調,實戰 Kaggle 小麥檢測ASTCNN
- 9 個強大的 JavaScript 小技巧JavaScript
- 六級考試小技巧
- YLazy Web Page Test , 網頁效能測試平臺Web網頁
- AV-TEST:2018年4月份殺軟測試報告 小紅傘第一測試報告
- JMeter做效能測試(1)-效能壓測指令碼的生成以及完善和增強JMeter指令碼
- 不定時更新-工具類小技巧
- 什麼是軟體測試領域的 Flaky test?
- 用 Cloud Performance Test 怎麼錄製測試指令碼CloudORM指令碼
- 用 Cloud Performance Test怎麼錄製測試指令碼CloudORM指令碼
- SAP CDS view單元測試框架Test Double介紹View框架
- 【TEST】Oracle19c使用benchmarksql進行效能測試OracleSQL
- [20200304]測試網路狀態TIME_WAIT.txtAI
- [20201113]測試CURSOR_SPACE_FOR_TIME(10g).txt
- [20220228]測試Max_idle_blocker_time 引數.txtBloC
- 金字塔測試原理:寫好單元測試的8個小技巧,一文總結
- Kaggle入門之房價預測
- 下載kaggle資料集的小妙招
- 智慧小車開發篇 - 低時延直播測試
- FastDFS 自帶的測試程式 fdfs_test 使用指南AST
- 四種ABAP單元測試隔離(test isolation)技術
- 一文掌握開源單元測試框架Google Test框架Go
- Jmeter系列(6)- test plan測試計劃詳細講解JMeter
- Jmeter 實用技巧--redis 測試JMeterRedis
- 滲透測試技巧總結
- 翻譯:iOS Swift單元測試 從入門到精通 Unit Test和UI測試 UITestiOSSwiftUI
- [20200310]測試網路狀態TIME_WAIT(windows).txtAIWindows
- [20201116]測試CURSOR_SPACE_FOR_TIME=false(11g).txtFalse