IRIS-AUDIO / SELD

7 stars 8 forks source link

Sampler 생성 예시 #101

Closed daniel03c1 closed 3 years ago

daniel03c1 commented 3 years ago

랜덤으로 생성하는 예시를 만들어보았습니다. 다른 아이디어 언제든지 제시해주는대로 반영해 보겠습니다. 일단 완벽하게 에러를 잡으려면 modules.py를 몇가지 더 변형해야할 것 같은데, 이는 의견들 반영하면서 추후 잡아나가보겠습니다.

이를 위해 몇가지 수정을 하였습니다.

  1. xception의 경우 원래 1D로 강제 reshape한 상태로 output을 냈는데, 따로 그런 작업을 떼어버렸습니다.
  2. sed, doa에서 n_classes를 제외하였습니다.

추가로 몇가지 의논이 필요합니다.

  1. Sepformer_block의 경우 frequency가 conv에서 channel처럼 이용되는데, 많은 경우 feature map size가 계속 작아지기 때문에 frequency도 마찬가지로 작아집니다. 이때 후반부 가면 frequency가 너무 적어질 수도 있을 것 같은데 이를 위해 별도로 linear layer를 넣어줘야하는지 아니면 그대로 둘지 여부입니다.
  2. transformer module의 경우 h_dim을 따로 입력받지 않고, 자동으로 대응하도록 현재 짜여있습니다. 왜냐하면 기존 구조에서는 h_dim과 input의 마지막 dim과 크기가 동일하지 않으면 돌아가지 않기 때문에 그런거 고려 없이 자동으로 대응하도록 짰습니다. 근데 문제가 n_head가 더 커지지 않는지 여부 등을 찾아야 합니다. 물론 제일 쉬운 방법은 search space에서 최대 n_head이 최소 channel 보다 같거나 작도록 세팅하는 방법들도 있는데, 이런 search space에 대한 논의가 필요합니다.
lsg1213 commented 3 years ago
  1. Sepformer_block의 경우 frequency가 conv에서 channel처럼 이용되는데, 많은 경우 feature map size가 계속 작아지기 때문에 frequency도 마찬가지로 작아집니다. 이때 후반부 가면 frequency가 너무 적어질 수도 있을 것 같은데 이를 위해 별도로 linear layer를 넣어줘야하는지 아니면 그대로 둘지 여부입니다. 계속 stride나 풀링이 있으면 그렇긴 하죠.. 그런 의미에서 kernel 1 conv로 뻥튀기하는 방법도 있을 것 같긴한데 전 모델 사이즈 조절을 위해서 freq 1이 되는 순간 high feature를 종료하는 식으로 sampler를 설정하면 어떨까 합니다

  2. 이건 제가 사실 transformer 구조는 아직 잘 몰라서 어떻게 이야기 하기가 힘드네요

daniel03c1 commented 3 years ago
  • Sepformer_block의 경우 frequency가 conv에서 channel처럼 이용되는데, 많은 경우 feature map size가 계속 작아지기 때문에 frequency도 마찬가지로 작아집니다. 이때 후반부 가면 frequency가 너무 적어질 수도 있을 것 같은데 이를 위해 별도로 linear layer를 넣어줘야하는지 아니면 그대로 둘지 여부입니다. 계속 stride나 풀링이 있으면 그렇긴 하죠.. 그런 의미에서 kernel 1 conv로 뻥튀기하는 방법도 있을 것 같긴한데 전 모델 사이즈 조절을 위해서 freq 1이 되는 순간 high feature를 종료하는 식으로 sampler를 설정하면 어떨까 합니다
  • 이건 제가 사실 transformer 구조는 아직 잘 몰라서 어떻게 이야기 하기가 힘드네요
  1. 아 그러면 일단 모델 구조를 바꾸기 보단 애초에 구조적으로 freq가 1 이하로 내려가는 일이 발생하도록 세팅하면 어느정도 해결되지 않을까 하는 말씀이신거죠?
lsg1213 commented 3 years ago
  • Sepformer_block의 경우 frequency가 conv에서 channel처럼 이용되는데, 많은 경우 feature map size가 계속 작아지기 때문에 frequency도 마찬가지로 작아집니다. 이때 후반부 가면 frequency가 너무 적어질 수도 있을 것 같은데 이를 위해 별도로 linear layer를 넣어줘야하는지 아니면 그대로 둘지 여부입니다. 계속 stride나 풀링이 있으면 그렇긴 하죠.. 그런 의미에서 kernel 1 conv로 뻥튀기하는 방법도 있을 것 같긴한데 전 모델 사이즈 조절을 위해서 freq 1이 되는 순간 high feature를 종료하는 식으로 sampler를 설정하면 어떨까 합니다
  • 이건 제가 사실 transformer 구조는 아직 잘 몰라서 어떻게 이야기 하기가 힘드네요
  1. 아 그러면 일단 모델 구조를 바꾸기 보단 애초에 구조적으로 freq가 1 이하로 내려가는 일이 발생하도록 세팅하면 어느정도 해결되지 않을까 하는 말씀이신거죠?

발생하지 않도록 세팅하는 걸 말씀하신거죠? 제가 이야기 한 것이 그게 맞아요! design space design 기법에서도 보면 이렇게 shape을 끝까지 신경써준 건 없는 것 같긴 한데 이건 분야가 다르니 freq 부분을 신경을 써주어야 할 것 같다는 생각이 듭니다

ParkJinHyeock commented 3 years ago

그리고 linear 레이어로 다시 늘려줄 경우 약간 U-net같은 구조가 될 수도 있을 것 같은데요 (좁아졌다가 넓어지는 경우) search space를 넓히고 싶으면 상관없을 것 같은데 너무 커지지 않을까도 염려돼서 우선은 나둬도 괜찮지 않을까 생각합니다. 그리고 n_head는 랜덤으로 찾으실거라면, n_channel에 약수중에서 고르게끔 하는 방법은 어떨까요?

daniel03c1 commented 3 years ago
  • Sepformer_block의 경우 frequency가 conv에서 channel처럼 이용되는데, 많은 경우 feature map size가 계속 작아지기 때문에 frequency도 마찬가지로 작아집니다. 이때 후반부 가면 frequency가 너무 적어질 수도 있을 것 같은데 이를 위해 별도로 linear layer를 넣어줘야하는지 아니면 그대로 둘지 여부입니다. 계속 stride나 풀링이 있으면 그렇긴 하죠.. 그런 의미에서 kernel 1 conv로 뻥튀기하는 방법도 있을 것 같긴한데 전 모델 사이즈 조절을 위해서 freq 1이 되는 순간 high feature를 종료하는 식으로 sampler를 설정하면 어떨까 합니다
  • 이건 제가 사실 transformer 구조는 아직 잘 몰라서 어떻게 이야기 하기가 힘드네요
  1. 아 그러면 일단 모델 구조를 바꾸기 보단 애초에 구조적으로 freq가 1 이하로 내려가는 일이 발생하도록 세팅하면 어느정도 해결되지 않을까 하는 말씀이신거죠?

발생하지 않도록 세팅하는 걸 말씀하신거죠? 제가 이야기 한 것이 그게 맞아요! design space design 기법에서도 보면 이렇게 shape을 끝까지 신경써준 건 없는 것 같긴 한데 이건 분야가 다르니 freq 부분을 신경을 써주어야 할 것 같다는 생각이 듭니다

풀리퀘 올리고, sampler 또는 constraint쪽에서 input_shape만 넣어줘도 도움이 많이 되겠다고 생각을 했거든요. constraint 쪽에서 input_shape에 따라서 frequency가 너무 작아지는 일이 발생하지 않도록 확인하는 방향은 어떤가요?

daniel03c1 commented 3 years ago

그리고 linear 레이어로 다시 늘려줄 경우 약간 U-net같은 구조가 될 수도 있을 것 같은데요 (좁아졌다가 넓어지는 경우) search space를 넓히고 싶으면 상관없을 것 같은데 너무 커지지 않을까도 염려돼서 우선은 나둬도 괜찮지 않을까 생각합니다. 그리고 n_head는 랜덤으로 찾으실거라면, n_channel에 약수중에서 고르게끔 하는 방법은 어떨까요?

n_head를 샘플링할 때 미리 정해진 샘플이 아니라 동적으로 n_channel에서 뽑자는 말씀이시죠? 블럭들의 구현에 영향을 최대한 영향을 받지 않도록 sampler를 구현하려고 이렇게 진행했는데, 아이디어는 좋은데 블럭들의 구현에 영향을 받는 그런 코드가 되지 않을까 싶어서요. 지금 search space를 임의로 잡아놨는데, n_head의 범위를 더 많이 넓혀볼까요? 그리고 지금은 정해진 수치들 가운데서 sampling 하도록 되어 있는데, 최대 최소값을 정하고, exponential하게 커지는 space에서 sampling할 것인지, linear한 space에서 샘플링하도록 할지만 정해서 그 space 안에서 임의로 뽑는 것도 생각을 해봤는데, 일단 너무 복잡해질 것 같아서 놔뒀습니다. 혹시 지금처럼 정해진 인자들 중에서 고르는 경우와 다르게 범위 내에 랜덤한 수를 뽑아서 진행하는게 더 좋을까요?

lsg1213 commented 3 years ago

리퀘 올리고, sampler 또는 constraint쪽에서 input_shape만 넣

저도 그 부분에 동의하는데 그러면 어떤 식이 좋을까요? freq 1이 되는 경우만 방지하는 쪽이 괜찮을까요? 지금 제가 쓰고 있는 모델들 보면 거의 freq는 2에서 끝나더라고요

daniel03c1 commented 3 years ago

리퀘 올리고, sampler 또는 constraint쪽에서 input_shape만 넣

저도 그 부분에 동의하는데 그러면 어떤 식이 좋을까요? freq 1이 되는 경우만 방지하는 쪽이 괜찮을까요? 지금 제가 쓰고 있는 모델들 보면 거의 freq는 2에서 끝나더라고요

음 추후에 돌려봐야 알겠지만, 지금으로써는 불가능한 freq 1 이하로 내려가는 것만 막으면 어떨까요?