CVPR 표절사건

서울대학교 표절 논문 CVPR 투고 사건 – 나무위키 (namu.wiki)

취업 후 조용히 지내고 있었는데 CVPR 표절사건이 뜬 걸 봤다. 공저자들의 해명들이 표절보다 더 웃기다. 공저자들이 그냥 문법 체크기정도 역할을 했다는건데… 면피를 하려고 이런 사과문을 남긴건지, 아니면 뭔가 기여를 했다는 증거가 없어서 저런 말을 하는건지는 모르겠지만 어쨌든 메일 같은 증거는 다 남겨놓고 저런 이야기를 하는 거겠지?
-아무것도 안했는데 이름이 들어갔다? 문제O
-정말로 문법 체크만 했는데 이름이 들어갔다? 문제O
-표절에 동참/묵인하거나 정말로 눈치를 못챘다? 문제O
이런 사람들이 모여서 논문을 냈다는 것이 참…

최근 머신러닝/딥러닝 학회들 논문들 보면 거의 논문들이 양산형으로 질 떨어지는 논문들이 많다 (진짜 새로운 아이디어들이 거의 없고, 어쩌다 한 획을 그을만한 아이디어가 나오면.. 우르르..). 그래서 골라 읽을 필요가 있지 않나 했는데 이왕 이렇게 된거 학회는 스스로 간판을 내려야 하지 않을지…

대학원생이 졸업하고 나서 자기자랑할 만한 결과물은 사실 CV에 넣을 논문 리스트 밖에 없다. (논문 그 자체가 아니라.. 논문 ‘리스트’) 그래서 저렇게 공저자들이 이름 품앗이 하는 경우를 많이 봤는데, 우리나라는 특이하게 대학원생뿐만 아니라 유명한 모 회사에서도 많이 저짓거리를 한다. 우리 연구실도 이런 품앗이가 학생들 졸업 후에 도움되지 않을까 했지만 우리 지도교수님은 절대 안된다고 해서 우리 연구실 publications보면 거의 대부분 저자가 둘 또는 셋. 진짜 정말로 많아야 어쩌다 한번! 넷 정도인데.. 이제 생각해보니…

아! 그런데 우리나라 제일 큰 국책연구소에서도 <자기들이 펀딩해서 나온 과제의 결과물>에 그 국책연구소 소속의 사람의 이름이 들어가지 않으면 실적으로 인정안하고 있어서 이름 ‘반강제’로 넣어서 연구소 실적을 높이고 있지 않은가?

이왕 이렇게 된거, 모두 다 털어봐야..

취업 준비하면서…

대학원 생활 마치고 취업 준비하면서 느낀 점을 정리해본다. 졸업요건도 채우고, 취업 결과는 가장 원하는 회사로 가게 됐지만, 결과 기다리는데 너무 오래 걸렸다. 대학원 생활동안 이뤄냈던 것 중에 가장 자랑하고 싶은 결과는 아직 저널 제출만 된 상태..라서 이걸 가지고 취업 준비를 했다면 좀 더 수월하지 않았을까하는 생각이 계속해서 든다. (논문은 앞으로 몇개월 더 기다려야 하는건지;) 그럼 본격적으로 느낌을 정리해본다.

전체적인 후기는 ‘박사학위를 따고 졸업하면 뚫고 나갈 취업문이 오히려 좁아진다. 그러나, 오히려 길이 맞았기 때문에 경쟁력이 있다.’이다. (잉? 박사학위면 다 그렇지.. 크흠..) 그래서 좀 더 준비한 아래 회사별 느낌이다. 키워드 검색으로 관련된 분들이 링크 타고 들어올까봐 회사 일부이름은 가려놓는다. (읽어보면 어디구나 알 수 있도록 한건 의도적인거임.)

1. 삼성전자 **사업부
고맙게도 졸업이 확정되기도 전에 관심있다고 메일을 보내주셨다. 처음으로 받아본 메일에 너무 고마웠고 소개하신 연구분야도 내 분야라 진지하게 고민했지만, 이 때 당시에는 <다른 것들을 해보자>라는 생각이 컸었다. 그 뒤로 더 한 게 없어서 이 회사는 여기까지…

2. LG A* **원
‘삼성이 아니라 여기를 알아봤다고?’ 하는 사람도 있었는데, 최근에 만들어진 곳이라 이때는 LG에서 힘줘서 발족시켰다는 기사나 글들이 많았다. 직원들을 보면 거의 LG 계열사에서 오신 분들이던데;; 뭐가 얼마나 달라질런지는? 아직까진 딱히 연구분야나 기술적으로 눈에 띄는 성과는 없는 듯 하다. 면접을 거치면서 상당히 부정적인 이미지를 가지게 된 회사다.

소개페이지에 있는 것들을 참조로 이미 있는 사람들이 어느학교 어느전공인지, 내가 어느정도 수준을 가지고 면접에 임하면 되겠다 라고 다 알아봤는데… 많은 회사를 지원하고 경험해본 건 아니지만, 면접관으로 들어오신 분들이 면접을 처음 보시는 게 아닌가 할 정도로 면접에 익숙하지 않은 것 같았다. 화상면접이 익숙하지 않은 것인지 원래 그런건지 모르겠다. 원래 이런 곳인가? 이미지가 굳으려고 했는데 다행이 여기만 그런 거란 걸 알게 됐다.

3. L*전자 *TO
인터넷에 채용 공고를 보고 접수했는데, 뒤 이어 채용 절차를 어떠한 추가 안내 없이 마음대로 고친 곳;; 처음에 없었던 평가 절차도 끼워넣는 등… 초반에는 좀 어이없었던 곳이다. 몇 개월 동안 무응답이라 잊어버리고 있었는데 어느날 갑자기 연락이 왔다. 다른 LG를 경험해봤기에 느낌이 안좋아서 그냥 참석 안하려다가, 아쉬운 사람이 우물 판다고 참석해 보았다.  1차 면접을 거치면서 체계가 잘 잡혀있다라는 느낌을 받았다. <자기가 어느부서 누구고, 지원자 연구중에 어떤 부분에 관심있어서 참석을 했다.> 이런 소개를 차례대로 돌아가면서 하는데, 내가 준비한 부분에서 어느 부분을 빼고, 어느 부분을 강조해야 하는지를 활용할 수 있었고, 또 굉장히 좋은 인상을 가지게 됐다. 면접에서도 보통은 지원자가 어느 부분을 잘 알고 있는지, 기초적인 부분이나 세세한 부분을 엿먹으라고 집중적으로 질문하기 마련이다. 하지만, 질문의 내용들은 거의 ‘우리 이런거 필요한데. 해봄?’ 스타일이었다. 1차 면접은 무난하게 통과…

2차 면접은 임원 면접이었다. 임원면접이기 때문에 대면이 아닐까 했지만, 이것도 화상면접. 종합 면접은 대부분 인성 문제일텐데, 여기선 기술적인 내용을 준비하라고 해서 준비했다. 임원이라 기술적인 면은 잘 이해하지 못할 거라고 생각했는데, 발표 내용을 한번에 잘 이해하고 날카로운 질문까지 하신 걸 보고 놀란 면이 있다. (어디랑 다르네;) 다만, 컨디션이 좋지 않아 인성부분에서 조리있게 말하지 못했고, 임원분이 오히려 내 말을 깔끔하게 정리해주는 상황이 자주 연출되어버렸다;; 게다가, 답변 도중에 <응~ 여기 아니어도 갈 곳 있어~>라는 식으로 분위기가 흘러가버려서 탈락을 직감했다. 그렇게 개같이 멸망. 인터넷보면 글로벌 중소기업이라고 LG전자 많이 놀리는데, 면접 한방에 이미지가 좋은 곳으로 바뀌긴 했다.

그러나 놀랍게도.. 최근에 면접을 <3차>까지 본다더라… (개똘I들인가; 3차에선 면접관이 사장님인가요?)

4. xx전자 디스플레이
채용과정부터 면접까지 가장 정석을 보여준 회사가 아닐까 싶다. 연봉이 생각보다 낮아서 안갔을 뿐.. 최종 합격을 준 회사이기도 하고, 별로 나쁜 곳이 아니라서 코멘트는 없다.

5. 다른 회사
한번에 많은 회사를 지원한 게 아니라, 어슬렁어슬렁 다니면서.. 한 곳 결과나오면 다른 곳도 해보고 해본 식으로 취업준비를 했다. 위에 설명을 쓴 곳 말고도 목표로 했던 2곳 더 있는데, 해당 회사에 대해서는 자세한 이야기는 남기지 않겠다. (들키기 싫어!) <사실은 여기 기다리기 지쳐서 다른 곳 지원해봄;>

6. 나의 자기소개서
자기소개서나 자기 연구분야 역량등에 대해 써야하는 부분에서 1000자 쓰는 부분에 150자 써 내고 그랬다. 이래도 서류는 다 합격하드라. 내 연구분야에 자신을 가지고, 내 연구분야가 무엇인지 궁금해 하는 사람이.. 필요 없는 미사여구로 글 읽는 수고로움을 거치지 않는데 집중했을 뿐… 사실 어디에 합격했다고 하는 자기소개서를 찾아보지 않을 순 없기에… 그렇게 찾아봤다가 진짜 읽기 싫게 쓴 글들을 많이 봐서.. 나는 그렇게 힘들이지는 않았다.

7. 코딩테스트
그 외 몇몇 기업에서 코딩 테스트를 보는 것도 몇 번 해봤다. 이런 걸 풀어낸다고 해서 연구개발에 얼마나 도움이 될까하는 증말 개쓰레기 같은 문제들이 단순히 그냥 많은 게 아니라 ‘쓰레기들 뿐’이었다 할 정도로 말할 수 있겠다. 다른 회사 채용 절차에 이런거 있으니까 우리도 넣음인건지… 아니면 면접에 참고만 하려고 넣음인지… 정말 이런걸 풀면 도움이 된다 라고 생각해서 넣은건지..는 회사마다 사정이 있을 것이다. 하지만, 무슨 목적으로 넣었든지간 하등 도움 안되는 돈 낭비라고 생각한다. 오히려 취준생들 힘들게만 하는 건데, 그런 곳들은 부끄러운 줄 알았으면 좋겠다. 그런 건 연구&개발이 아닙니다. 프로그래밍을 통해 무엇을 만들었는지를 보여주는 것이 중요합니다. (게다가 파이썬을 프로그래밍이라고 하는 것은 좀…)

8. 면접
A와 B, 두 사람과 같이 생활해보면서 능력&성격 등 훨씬 괜찮은 A가 B가 들어간 보다 안 좋은 회사를 어쩔 수 없이 가게 된다든지, 취업이 잘 안된다든지.. 그런 경우를 지금 보고 있다. B를 뽑은 회사는 지금 후회하고 있겠지.

글을 잘 쓴다고, 발표나 말을 잘 한다고 해서 그게 그 사람의 전부가 아니다. 회사에서 연구개발 하는 사람을 뽑는다고 하면 같이 일하게 될 동료가 면접관으로 참석하게 되는 경우가 많다. 잠깐동안 말 못하는 걸로 평가하지 말고 그 사람이 이뤄낸 것을 보고 평가했으면 좋겠다.

내 면접 경험담은 여기서 끝이다.

IEEE Access 제출 후기…

얼마전?이라고 하기에는 애매하고.. ieee access에 논문을 냈던 게 있는데 느낌을 잊어버릴까 후기를 적어본다.

원래는 학회에 냈던 논문이었는데, 리뷰어가 여럿이나 붙었다 (4명이상.. 뭐 이런;;)… 아니 왜 이런 논문에 n명이나 붙냐구요. 추정이지만 이름만 대면 누구나 다 아는 회사의 연구자는 칭찬 리뷰 남겨준 거 같던데 어딜가나 안 맞는 리뷰어는 있고..  최종 리젝을 먹고, 아무튼, 조금 보강해서 제출하기로 했다.

IEEE Access는 리뷰가 빠르다고 광고해서 처음 제출해본 곳이었는데 다른 저널보다 더 느리게 답장이 온 거 같다. 결과는 accept 2명, reject 1명인데 accept을 준 리뷰어 2명은 무성의+무지성 리뷰였고 1명은 ‘인터레스팅’ 시전하면서 “실험 1개만 더 해줘”라는 식… (기다린 거에 비해..) 결국 에디터는 리젝을 줬다. (ieee access는  major, minor revision 같은 게 없다. 리젝 줄 때도 다시 제출하지마라.. 또는 잘 고쳐서 제출해 줘.. 2가지 경우가 있나봄.)

실험 좀 더 해서 다시 제출했고, 역시나 오래걸리는 리뷰.. 결과는 살짝 헛소리?하던 리뷰어는 어디론가 사라지고.. (이거지!) 억셉.

정리하자면, 생각보다 리뷰가 오래걸린다는 거고, 학회 논문이 더 쓰기 쉬운 것 같다.
어쨌든 추가 실험하면서 다른 방향의 아이디어가 떠올랐으니 다 잘 된건가..?

AMD에서 matlab 속도

i7 4770k(4코어 8스레드)를 쓰다가 라이젠9 3900x(12코어 24스레드)가 나오자마자 바꿔서 사용했는데… matlab이 더 느려진 것 같은 느낌이 자주 들었는데, 기분탓인가 계속 썼다.

그런데 우연히 검색하다가 matlab이 amd를 고려하지 않고 만들어졌다는 글을 보게 되었다. https://gigglehd.com/gg/hard/6047854

코딩할 때마다 어떻게 하면 loop 안쓰고 행렬 계산으로 할까.. for를 돌리더라도 parallel computing toolbox 쓰려고 안간힘을 쓰는 입장에서 힘빠지는 소리..
(아 그럼 24 스레드 필요 없잖아요;;;)

다행이도 해결법이..

방법

내 PC, 속성, 시스템 속성, 고급, 환경 변수, 시스템변수
MKL_DEBUG_CPU_TYPE
5

결과

tic
a=rand(10000,10000);
b=rand(10000,10000);
c=a*b;
toc
적용전 21초
적용후 7초

결과

오…

ps. openblas+numpy 조합은 더 빠르다고 한다.

자주 쓰는 명령어들

외우지는 못하겠고… 정말 필요한데 다시 찾기귀찮은 명령어들을 모아놓았다.

conda create -n [환경이름] python=3.8
conda install -n [환경이름] numpy matplotlib pandas pydotplus h5py scikit-learn
conda install -n [환경이름] scipy mkl-service libpython m2w64-toolchain
conda install -n [환경이름] git graphviz

pip install tensorflow-gpu==2.5
pip install librosa

conda info –envs
conda remove –name

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

Nvidia 드라이버 고장났을 때 ㅠ
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo ubuntu-drivers autoinstall
sudo reboot

Nvidia 드라이버 고장났을 때 ㅠ

sudo apt install nvidia-driver-460
sudo apt-get remove –purge nvidia*

signal approximation

대게 기본적인 신호처리 쪽 딥러닝들은 noisy signal $y$ 을 input으로 넣고 clean signal $x$을 output이 되도록 학습하면서 MAE나 MSE 이런걸 쓴다.

$\min \sum_{l,k} (x(l,k) – \widehat{x}(l,k))^2$

hat이붙은건 추정치.. l과 k는 각각 시간과 주파수를 나타내는데..

model = ...
loss_fn = tf.keras.losses.MeanSquaredError()
model = Model(inputs=input, outputs=output)
model.compile(loss=loss_fn, optimizer=opt)
model.summary()

뭐 대충 위 코드처럼 하면 된다. 또,

$\min\sum_{l,k} (m(l,k) – \widehat{m}(l,k))^2$

처럼 직접적으로 mask를 추정해서

$\widehat{x}(l,k)=\widehat{m}(l,k)y(l,k)$

하는 방법도 있다. 이 방법은 미리 mask를 계산해야 하는 귀찮음이 있고 이런 방법 대신에

$\min\sum_{l,k} (x(l,k) – \widehat{m}(l,k) y(l,k))^2$

하면서, $\widehat{m}(l,k)$를 원하는 사람이 있다.

물론, signal approximation 방식이 내 분야에서는 성능이 더 좋게 나온다. matlab이라면 그냥 직접 gradients 구해서 할텐데, 귀찮고 실행 속도가 너무 느려;;

python은 익숙하지 않아서 찾아보니 구현해놓은 게 없네… 스택오버플로우에서 알려주는 방법대로 했는데 gradient 전파가 안된다는 에러..

아래처럼 하면 되더라..

def SA_loss(y_true, y_pred, inputs):
    d = K.mean(K.square(y_true-y_pred*inputs))
    return d

def create_model(...):
    input1 = Input(shape=(length))
    input2 = Input(shape=(length))
    
    out = Dense(units=2048)(input1)
    out = PReLU()(out)
    out = BatchNormalization()(out)
    out = Dropout(0.2)(out)
        
    o = Model(inputs=[input1, input2], outputs=out)
    o.add_loss( SA_loss( input1, out, input2 ) )
    o.compile(loss=None, optimizer=opt)
    o.summary()
    return o

class Dataloader(Sequence):
    .... #잘 구현..
    return [input1, input2], input2 #input2는 target

model = create_model()
model.fit(dataloader, ...)

실제 테스트 단계에서는

model = load_model(...)
model = Model(model.input[0], model.output)
result = model.predict(...)

잘 돌아간다.

매번 느끼지만, python 만질 때마다 코딩하는 느낌은 안든다.
‘으으.. 어떻게 코드 섞어야 하지..’ 그렇지만 좀 고민하는 고통을 겪으면 결과 나오는 속도가 빨라서 쓴다..