# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="DFsFRdf9iHT6"
# ## BackGround
#
# Fast R-CNN : ROI Pooling을 사용하여 Bbox Regression과 Classification 수행
#
# Faster R-CNN : 각 Feature map을 가지고 RPN(Region Proposal Network)를 수행하고 나온 추출 데이터와 각 Feature map을 ROI Pooling에 넣어서 Bbox Regression과 Classification을 수행한다.
#
#

# + [markdown] id="EJeeUXg0rxew"
# ### Instance Segmentation
#
# <img src = 'https://i2.wp.com/robocademy.com/wp-content/uploads/2020/04/instance_seg.png?resize=600%2C450&ssl=1'>
#
#
# Object Detection = 여러 물체에 대해 어떤 물체인지 분류하는 Classification 문제와 Bounding box 위치 정보를 나타내는 Localization 문제를 둘다 해결해야 하는 분야
#
# Segmentation (분할) = 모든 픽셀의 레이블을 예측하는 방법
#
# 여기서 Segmentation은 두가지로 분류가 됩니다.
#
# 1. Semantic segmantation
# 2. instance segmantation
#
# 밑의 사진에서 보시면 두 개의 차이점이 분명하게 드러납니다.
#
# 오른쪽 semantic segmentation은 어떤 class로 분류해야 하는가에만 초점이 맞춰져 있습니다.
#
# 왼쪽의 instance segmentation은 어떤 class인지 분류를 하고 그 다음에 instance도 같이 분류합니다.
#
# <img src = 'https://miro.medium.com/max/700/1*jHv5C23SLtL3UFeR8VnohQ.png'>
#
# 왼쪽 : instance segmentation, 오른쪽 : semanticc segmentation
#

# + [markdown] id="MJ4CsOAEp1KU"
# ### Mask R-CNN
#
# Mask R-CNN은 instance segmentation 으로 분류하기 위한 모델로 Faster R-CNN 에서 나오는 RPN(Region Proposal Network)와 ROI align과 mask를 사용하여 모델을 예측하는 방식입니다.
#
# COCO 2016 챌린지 우승작에는 전부 Mask R-CNN 계열을 사용할 정도로 성능이 좋다는 것을 알 수 있습니다.
#

# + [markdown] id="V-upjmmO4vzd"
# ### Faster RCNN
#
# Faster RCNN 에서는 추출된 feature map을 RPN 방법을 사용한 부분과 나온 feature map을 ROI Pooling을 사용하여 class와 bounding box regression을 사용합니다.
#
# <img src = 'https://miro.medium.com/max/2000/1*SkQF8jcGgFO9nVOiprhUEw.jpeg'>
#
# ### Mask RCNN
#
# 논문에서 주장하는 Mask RCNN은 FPN방법을 사용하여 feature map을 추출하고 RPN 방식을 사용하여 ROI를 구하고 ROI align방법을 사용하여 feature map에 추가시킨 이후 mask, box class, bbox regression을 구하게 됩니다.
#
# <img src = 'https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0pdEg%2FbtqBL8vzmxg%2F1zkQAmbSKShCvdqXx8jXkk%2Fimg.png'>
#
# <img src ='https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx1zeb%2FbtqWX5EbBpp%2FSDi2o1RDnpCCs2ckVpA8d0%2Fimg.png'>

# + [markdown] id="FX0r6AnNIGd_"
# ### ROI align
#
# 기존의 Faster RCNN에서 사용하는 ROI Pooling에서는 RPN을 사용하면 각 pixel에 제대로 적용이 안되는 부분을 보완하고자 Mask RCNN에서 도입하는 방식입니다.
#
# Faster RCNN은 bounding box만을 검출하기 때문에 ROI Pooling을 사용해도 무방했으나 Mask RCNN은 Instance segmentation을 진행하기 때문에 pixel의 정확한 구분이 필요했고 ROI에서 나오는 소숫점을 처리하기 어려웠습니다.
#
# 이 부분을 bilinear interpolation을 사용하여 소숫점을 정수화 시킨 이후에 maxpooling을 사용했고 논문에서는 성능이 향상되었다고 얘기하고 있습니다.
#
# <img src = 'https://mblogthumb-phinf.pstatic.net/MjAxNzA1MjRfNzUg/MDAxNDk1NTg2NjQ5NjQ2.XCBp1otbf-_baAXyvsThf_qhjU2oltZVkYAlPQd2bl8g.eE0qGNkhynB87CshsSSw-TezoMZzhZQe0bmsjMG-PGQg.JPEG.sogangori/roiAlign.jpeg?type=w2'>
#
# 설명 : https://darkpgmr.tistory.com/117
#
# <img src = 'https://i1.wp.com/thebinarynotes.com/wp-content/uploads/2020/05/RoI-Align-1.png?w=321&ssl=1'>

# + [markdown] id="qU8T_TPBEzql"
# channel이 80이 되는 이유는 COCO 데이터 셋의 target이 80개가 있기 때문입니다.
#
# 그러면 왜? target이 80개인거랑 channel이 80개인 거랑 어떠한 연관이 있을까?
#
# <img src = 'http://i.imgur.com/OBXTpkJ.png'>
#
# ### Mask branch
#
# Mask branch에서 사용하는 방법은 FCN(Fully Convolution Network) 입니다.
#
# Mask RCNN은 instance segmentation이 가능한 이유는 이 mask network 때문입니다.
#
# 80개의 target이 있다면 각 class별로 channel을 만드는 방식입니다
#
# 밑의 사진을 보시면 기린과 기린의 배경이 있다고 하면 기린의 사진의 경우 기린이 있는 pixel은 1 배경은 0으로 지정을 하여 하나를 만들어 줍니다.
#
# 또한 배경이 있는 pixel은 1 기린이 있는 pixel은 0으로 하나를 만들어 2채널로 그림을 segmentation하는 방식입니다.
# <img src = 'https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaIK6t%2FbtqXb2NcBYr%2FR6vyWUUA9esdvRVzPnZimk%2Fimg.jpg'>

StarcoderdataJupyterScriptsDedupFiltered