From 2ec6c95de00c2041f28b467acea1e8875a1833c3 Mon Sep 17 00:00:00 2001
From: Dokyoon Yoon <32949939+Yoondokyoon@users.noreply.github.com>
Date: Thu, 25 Oct 2018 11:22:37 +0900
Subject: [PATCH] Update Fraud detection Kernel as Korean about 90% (#44)
translating
---
Korean/Carvana_3rd_place_solution.ipynb | 226 ++++++++++++++++++++++++
1 file changed, 226 insertions(+)
create mode 100644 Korean/Carvana_3rd_place_solution.ipynb
diff --git a/Korean/Carvana_3rd_place_solution.ipynb b/Korean/Carvana_3rd_place_solution.ipynb
new file mode 100644
index 0000000..e4b1add
--- /dev/null
+++ b/Korean/Carvana_3rd_place_solution.ipynb
@@ -0,0 +1,226 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Carvana-3rd place solution.ipynb",
+ "version": "0.3.2",
+ "provenance": []
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ }
+ },
+ "cells": [
+ {
+ "metadata": {
+ "id": "dHxeclomxAef",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "이렇게 흥미로운 컴페티션을 개최해 주셔서 감사합니다! 이번 컴페티션에 정말 재밌게 시간을 쏟을 수 있었습니다.\n",
+ "\n",
+ "그리고 @Peter의 유용한 코드와 @HengCher Keng의 훌륭한 아이디어에 감사드립니다.\n",
+ "\n",
+ "덕분에 많이 배웠습니다.\n",
+ "\n",
+ "컴페티션 저장소입니다. 여기에 두 개의 스크립트(network script, loss fucntion script)를 저장했습니다.\n",
+ "\n",
+ "[https://github.com/lyakaap/Kaggle-Carvana-3rd-place-solution](https://github.com/lyakaap/Kaggle-Carvana-3rd-place-solution)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "V4CebvOuxwTD",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Thanks for hosting such an exciting competition! I was really enthusiastic for spending my time for this competition! And thanks for helpful code by @Peter and excellent ideas by @HengCher Keng. I learned a lot from them.\n",
+ "\n",
+ "The competition repository is here. I put two scripts (My network script & loss functions script) in it. https://github.com/lyakaap/Kaggle-Carvana-3rd-place-solution\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "tLHe2dpmxzzy",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Solution 개요\n",
+ "\n",
+ "\n",
+ "* 1536x1024 & 1920x1280 해상도를 사용했다.\n",
+ "* U-net을 수정했습니다. bottleneck block에 몇개의 팽창한dilated convolution layer가 있다. (feature map의 resolution이 가장 낮은 곳)\n",
+ "\n",
+ "제 네트워크 아키텍처의 세부 사항이 여기에 있습니다\n",
+ "\n",
+ "My solution overview\n",
+ "\n",
+ " I used 1536x1024 & 1920x1280 resolution.\n",
+ "\n",
+ " I used modified U-Net. It has several dilated convolution layers in bottleneck block. (i.e. where the resolution of feature maps are lowest)\n",
+ "\n",
+ "Detailed figure of my network architecture is here.\n",
+ "\n",
+ "![alt text](https://kaggle2.blob.core.windows.net/forum-message-attachments/225523/7428/network.png)\n",
+ "\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ZZaWkBDyyqmf",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "이 모델의 최고 점수는 0.997193이며 파라미터는 약 850만개에 불과합니다.\n",
+ "\n",
+ "(6 fold 중 하나 학습, TTA나 ensemble을 사용안함, input 해상도: 1920x1280) 0.997193모델의 두 가지 예측 값(TTA, 원본 영상&플립flipped영상)을 평균시키면 0.997223까지 도달할 수 있습니다.\n",
+ "\n",
+ "각각 LB에서 6위와 5위를 차지합니다."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SUqg8sEHyrcB",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The best score of this model is 0.997193 only around 8.5 million parameters. (trained one of 6 folds, no TTA & no ensemble, input resolution: 1920x1280) Averaging two predictions(TTA, original image & flipped image) by 0.997193 model reached 0.997222. They are ranked 6th place and 5th place on LB respectively!"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "MuS2KtZF0C8a",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "저는 bottleneck 블록에서 팽창dilated된 convolution layer 대신에 일반적인 convolution layer를 시도했습니다.\n",
+ "\n",
+ "그리고 그 점수는 팽창dilated된 convolution을 사용하는 것보다 매우 낮습니다. (normal: 0.9905, 팽창된 conv: 0.9918, @256*256)\n",
+ "\n",
+ "저는 또한 층을 쌓는stacking 대신 평행하게 팽창dilated된 convolution layer를 사용하였습니다. \n",
+ "\n",
+ "그러나 이는 stacked architecture보다 낮은 점수가 나옵니다."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "n6dE5EWv0bLW",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "I tried normal convolution layers instead of dilated convolution layers in bottleneck block, and its score is significantly lower than using dilated convolution. (normal: 0.9905, using dilated conv: 0.9918 @256x256)\n",
+ "\n",
+ "I also tried parallelized dilated convolution layers instead of stacking them, but it gave me lower score than stacked architecture."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "yRjk8-J21jFV",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Optimizer: RMSprop lr=0.0002, ReduceLROnPlateau()를 사용하여 학습 속도를 줄입니다. Reducing factor는 0.2 & 0.5입니다.\n",
+ "\n",
+ "Data Augmentation: 수평 플립flip만 사용. 스케일링, 시프트shifting, 그리고 HSV 시프트는 overfitting 되어 나왔다.\n",
+ "\n",
+ "batchsize: 1, 그리고 BN 없음\n",
+ "\n",
+ "single 모델을 Training하는데 2일 정도 시간이 걸림.\n",
+ "\n",
+ "Pseudo Labeling: 동시에 학습하거나 pretraining phase에만 사용합니다.\n",
+ "\n",
+ "Loss function: bce + dice loss(weighing boundary pixel loss도 써봤지만, 비슷한 결과를 주었습니다. overfitting이 두려워 결국 사용하지는 않았습니다.)\n",
+ "\n",
+ "Ensemble : 5 fold ensemble @1536x1024 + 6 fold ensemble @1920x1280, 가중 평균, submission에서 LB 순위에 따라 가중치를 부여했다. \n",
+ "\n",
+ "TTA: 수평 플립만\n",
+ "\n",
+ "임계값 조정: validation set에서 최고 점수를 임계값으로 정했습니다(0.508). LB에서는 겨우 0.000001밖에 점수가 오르지 않았습니다.\n",
+ "\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "C9kjXupa1meN",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "\n",
+ "\n",
+ " Optimizer: RMSprop lr = 0.0002, reducing learning rate by using ReduceLROnPlateau() that is Keras callback function. Reducing factor is 0.2 & 0.5\n",
+ "\n",
+ " Data Augmentation: only horizontal flip. Scaling, Shifting, and Shifting HSV were results of overfitting for me.\n",
+ "\n",
+ " Batchsize: 1, and no BN.\n",
+ "\n",
+ " Training whole time on single model takes around 2 days.\n",
+ "\n",
+ " Pseudo Labeling: learning simultaneously or only using pretraining phase.\n",
+ "\n",
+ " Loss function: bce + dice loss (I also tried weighing boundary pixel loss, it gave similar result. Fear of overfitting, I finally decided not to use it.)\n",
+ "\n",
+ " Ensemble: 5 fold ensemble @1536x1024 + 6 fold ensemble @1920x1280, weighted average. I weighted by LB ranking in my submissions.\n",
+ "\n",
+ " TTA: only horizontal flip.\n",
+ "\n",
+ " Adjusting threshold: I decided threshold which gives best score on validation set. I set the threshold to 0.508. In LB, it makes score improving only 0.000001.\n",
+ "\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "qU3cw_Kt4QPx",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Other\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DfVVddSA4S_-",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "점수의 개선의 가장 큰 요인은 pseudo labeling data에서의 훈련이다.\n",
+ "\n",
+ "pseudo labelling data가 좋은 이유는 test data의 양 때문이라고 생각합니다. \n",
+ "\n",
+ "우리는 ground truth에 가까운 예측을 할 수 있습니다.\n",
+ "\n",
+ "자동차 이미지를 가리기mask 어려운 경우에만 pydensecrf를 사용하여 전처리하였다. \n",
+ "\n",
+ "하지만 그것은 아무런 성능 향상도 주지 못했습니다.\n",
+ "\n",
+ "\"어려운 이미지difficult images\"를 선택하는 방법으로 여러가지 예측에 대한 multi class version of dice coefficient로 계산했습니다. \n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dDnDQ94v5swP",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Other\n",
+ "\n",
+ "One of the best contributer of improving score is training on pseudo labeling data. I think why pseudo labeling contribute so much is the amount of test data, and we can get predictions close ground truth.\n",
+ "\n",
+ "I tried post processing by using pydensecrf for only difficult to mask car images. But it gave me no improvement. As for how to choose \"difficult images\", I calculated multi class version of dice coeficient (I'm afraid that I shouldn't say so) of predictions by several models."
+ ]
+ }
+ ]
+}
\ No newline at end of file