작성
·
347
1
안녕하세요 강의 너무나 잘 듣고 있습니다.
정말 감사드립니다.
mask를 학습하는 부분에서 궁금한 점이 있어 질문드립니다.
1. RPN에서 예측해준 바운딩 박스를 align한 최종 14x14x80 feature를 대상으로 mask 를 각 그리드별로 클래스가 positive냐 negative인가만 분류하는 것으로 이해했는데요, 이를 학습하려면 실제 이미지의 각 ground truth box를 14x14로 맞추고 각 그리드의 80개 채널들에 정답을 넣어준 후에 두 14x14x80의 cross entrophy 로 back prop하면 되는 것으로 이해했는데 맞나요?
2. 1번에 대한 이해가 맞다면, 이렇게 해서 나온 3개의 예측값,
a.클래스 예측값
b.바운딩 박스 좌표 예측값
c.14x14크기의 마스크 예측
들을 이용해서
14x14크기의 마스크를 예측된 바운딩 박스 좌표 크기에 맞게 resize하고 거기에맞게 마스크값도 할당하고 이를 실제 이미지에 덮어씌운다.
이렇게 하면 바운딩 박스를 그리는 것과 함께 바운딩 박스안에 해당하는 클래스부분 픽셀만 다른 컬러로 구분할 수 있다.
이런식으로 이해했는데, 잘못 이해한 부분이 있다면 지적 부탁드립니다.
감사합니다.
답변 5
0
0
답변 감사합니다! 좀 후련해진거 같습니다.
퇴근하고 너무 재밌어서 정주행했는데 어디새 거의 완강이네요
좋은 강의 너무 감사드리고 처음부터 복습하면서 질문 또 드리겠습니다:)
0
올바른 학습 방향을 가지고 계시는 군요
1번만 수정 드리면 될 것 같습니다. 2, 3번은 맞습니다.
정답라벨은 ground truth가 맞습니다. 그런데 그 정답 라벨에 가장 근사한 anchor box(예를 들어 IOU > 0.7 이상) 에 가장 가깝게 도달하기 위한 학습을 할 뿐입니다.
감사합니다.
0
친절한 답변 늘 진심으로 감사드립니다.
Fully conv 레이어를 의식안하고 이해를 해서 이해도가 심하게 떨어졌네요..
정정해주셔서 감사합니다.
Fully conv 레이어에서 나온 맵을 upsampling을 해서 원본이미지에 맞추고 이를 마스크한 정답 라벨과 손실계산해서 학습하는 것이 군요.
추가로 이해가 확실하지 않은 부분을 질문 드리고 싶습니다.
1. RPN관련
새로운 알고리즘을 공부할때 먼저 입력과 정답 라벨이 뭔지 파악하려고 합니다. 그러면 내부가 블랙박스여도 대충 이해가 빨리 되는 느낌이 들어서인데요, 하기에 제가 이해한 내용을 작성해봤는데요, 확인 부탁드립니다.
좌표의 경우, 정답라벨이 앵커박스 자체의 x,y,h,w이고(ground truth 좌표가 아니라) 학습하는 내용은 RPN이 예측한 x,y,h,w와 앵커박스 자체의 x,y,h,w의 차이를 줄이는 방향으로 진행한다.
결국 학습하고 나면 RPN의 출력값은 ground truth박스와 iou가 0.7이상 되는 앵커박스의 좌표값에 근접한 값이 나오기를 기대한다.
정확한 ground truth박스 좌표와의 offset을 줄이거나 클래스 자체에 대한 세밀한 학습은 후반부에 맡긴다.
2. Faster RCNN 후반부 관련
RPN에서 나온 좌표값을 RPN에 들어가기 전 feature map에 대입하여 그 영역의 feature map을 추출하고 이를 사이즈 조정을 위해 풀링하고 FC에 넣어 학습하는데 이때 정답라벨은 실제 원본이미지의 ground truth의 좌표와 클래스 id이다.
3. mask RCNN의 mask예측 부분 관련
RPN에서 나온 좌표값을 이용하여 feature map을 추출하고 ROI align과 upsampling을 겨처 원본이미지 사이즈로 복원하고 이때 정답 라벨은 원본이미지에서 해당 클래스만 1로 activate된 mask이다.
확인 부탁드리겠습니다.
감사드립니다.
0
안녕하십니까,
일단 bounding box 기반의 클래스 예측과 bounding box 는 Masking과 상관없이 Faster-RCNN기반으로 동작합니다.
그리고,
1. pixel prediction/masking에 대해서 말씀드리면, 14 x 14 는 최종 feature map을 한번 upsampling을 한 것입니다. 이를 위해 원본 이미지ground truth box를 14x14로 맞출 필요가 없습니다(맞출 수도 없을 것 같습니다 ^^)
각 그리드의 80개 채널들에 정답을 넣어줄 필요도 없습니다. 학습은 FCN(fully convolutional layer)에서 진행합니다. 학습을 진행하면서 80개 채널 각각이 특정 클래스에 속하는지 아닌지의 확률을 계산해서 학습을 하고, 이에 기반해서 14x14 masking 값을 만들어 줍니다. 학습은 masking의 경우 80개 개별에 대한 binary cross entropy를 적용합니다.
prediction시에 이렇게 만들어진 masking값을 점점 더 upsampling하면서 원본 이미지 크기 만큼 확장해서 전체 masking값을 구합니다. 80개 채널 각각이 특정 클래스에 속하는지 아닌지를 가지게 되고, 이를 원본사이즈 만큼 증가 시키면서 원본 이미지의 masking을 적용하게 됩니다.