ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 딥러닝 셔플 Shuffle 연산으로 채널 차원을 섞어주세요.
    딥러닝/기본 연산들 2022. 6. 3. 13:54

    채널 방향으로 엘리먼트들을 섞을 수 있는 셔플이란 연산에 대해 알아보도록 하겠습니다. (H, W, C) 차원 부분이 원래는 (C,  H, W) 차원으로 표기되었어야 하는데 감안하고 읽어주세요.

     

    모델을 설계하다 보면 채널 방향으로 뉴런 값들을 섞고 싶은 지점이 있을 것입니다. 예를 들어  ResBlock 1, 2, 3를 배치하려고 해 봅시다. 

     

    ResBlock 1 끝나는 지점에서 블록 사이에 원본 이미지 (배치, 224, 224, 3) 를 2번 주입하고 싶습니다. 단순히 행렬 합보다 이어 붙이는 것이 더 나을 것 같아 CAT (Concatination) 을 2번 했습니다. 

     

     

    평면 차원 해상도 차원이 (224, 224)가 아니라면 이미지 축소를 한 후에 CAT 하면 됩니다.

     

     

    문제는 CAT 후에 채널 방향으로 보았을 때 섞여 있지 않다는 느낌이 드는 것이었습니다. 

    3 채널, 3 채널이 채널 방향으로 끝 부분에 차곡차곡 CAT 된 것을 놓고 마음에 들지 않았습니다. DNN 모델은 글로벌 적으로 섞여야 좋다고 생각했기 때문입니다. 그래서 갑자기 추가된 3채널 2개 (RGB, RGB) 를 해당 레이어 전체적으로 섞어서 배치하고 싶었습니다. 셔플이란 방법으로 생각보다 간단히 해결되었습니다. 

     

    채널 차원은 1개입니다. 레이어 하나당 차원 수 구성은 (배치, X, Y, 채널) 이렇게 구성되어 있고 채널은 한 개의 인덱스로 구성되어 있지요. 그냥 우연히 어쩌다가 임시로 채널 인덱스를 2개로 구성해 보았습니다. 코딩으로 reshape연산을 통해 구성이 가능하지요. 그리고 인덱스를 맞바꾸어 다시 reshape를 했습니다. 여기까진 채널을 뜻하는 인덱스 개수가 2개입니다.

    (배치사이즈, X, Y, G, C/G)

    (배치사이즈, X, Y, C/G, G)

     

    그리고 다시 채널 차원 수를 원래 크기로 1개 차원으로 줄였습니다. 그렇게 해보니 채널 방향으로 뉴런 값들이 잘 섞이면서 셔플이 되는 것이었습니다. 단 그림에서도 보듯이 XY 평면을 구성하는 뉴런들 자체는 그대로입니다. X평면 방향으로는 값들이 섞이지 않습니다. 채널 별로 섞입니다.

    '딥러닝 > 기본 연산들' 카테고리의 다른 글

    CNN 파라미터 수 계산 방법  (0) 2022.06.04
    컨볼루션의 패딩 적용  (0) 2022.06.03
    셔플 연산과 Conv 1x1의 공통점  (0) 2022.06.03
    Group Conv 그룹 컨볼루션  (0) 2022.06.03
    딥러닝 컨볼루션 conv 이란?  (0) 2022.06.03

    댓글

Designed by Tistory.