RA meeting

금일 은호선배님과 수빈선배님께서 행동실험의 process를 설명해 주셨다. 실험의 목적을 한 줄로 설명하자면, reward를 아에 주지 않았을 때와 negative한 outcome을 주었을 때 무엇이 학습이 더 빠르게 될까? 가 실험의 목적이다. 즉 원하는 행동을 하지 않았을 때에 보상을 아에 주지 않는 것 vs 벌을 주는 것 2경우 중 학습이 빠르게 되는 부류는 어디일까 이다. 벌을 주는 경우는 퀴닌이라는 엄청 쓴 약물을 사용하며, 쥐들에게는 퀴닌을 먹는 것이 벌을 받는 것이다. T자 형식의 미로에 쥐들을 두고 스크린에 A 와 B 영상을 틀어놓고 갈림길에서 갈라지게끔 실험 환경을 세팅한다. 미로를 풀게되는 공간에는 suger water가 나오게 설정하고 반대 부분에는 퀴닌이 나오게 설정한다.

위 그림은 24년도 인턴 과정을 진행한 분의 보고서에서 가져온 그래프이다. 주황색이 no reward를 나타내며 파란색이 quinine을 나타낸다. 그래프를 보면 quinine을 사용한 쥐가 no reward 쥐보다 학습이 빠른 것을 볼 수 있다. 추가적으로 약 75%가 학습이 완료되었다고 보는 단계인데, 75%로 설정한 이유는 선배들의 실험 경험을 토대로 도출한 수치라고 하셨다. 선배님들이 예상하는 결과로는 negative한 outcome을 주었을때가 더 빨리 학습할 것이라고 예상하셨다. 추가적으로 금일 쥐들이 reward로 먹을 suger water을 만들었다.

suger water의 농도는 32%로 백설탕을 사용하여 만들었다. 32%비율의 백설탕을 만들기 위해 물 1000mL에 설탕 320g을 사용했다.

  1. 먼저 suger water에 들어갈 suger을 320g 개량해준다.

  2. 물 1000mL를 담아 전자레인지에 돌려준다. (뜨겁게 만들어 설탕을 빠르게 녹이기 위해)

  3. 물을 500mL만 비이커에 담고 설탕 320g을 넣어준다.

  4. 녹을 때까지 잘 저어준다.

  5. 설탕이 모두 녹았다면, 추가로 눈금실린더에 옮겨 물 1000mL를 맞춰준다.

  6. 보관 통에 옮겨담고 103B 밖에 잇는 냉장고 왼쪽편에 넣어 보관한다.

위 방법으로 reward에 사용할 suger water을 만들었다. suger water은 sucrose라고 불리기도 하는데, sucrose는 suger와 다르게 이당류이다. sucrose와 suger는 다르지만 현재 실험에서는 suger을 사용하여 suger water라고 불리는게 정확하다고 하셨다.

추가로 동물 행동실험을 진행하면서 주의해야 할 부분을 알려주셨다. 실험의 정확한 결과를 위해 매일 동일한 패턴으로 실험자가 임하는 것이 좋다고 하셨다. 예를들어 동물실험을 진행하기 전에 향이 나지 않는 핸드워시로 손을 먼저 씻고, 실험복을 입은 뒤 , 케이지를 옮긴다. 이런식으로 준비과정 순서를 똑같이 하는 것이 좋다고 하셨다. 아직까지는 필자의 루틴이 확실해 지지 않았지만, 지금까지의 루틴을 생각해 본다면

  1. 핸드워시로 손을 씻는다.

  2. 알코올로 저울을 닦는다. 영점까지 맞춰준다. (영점을 맞출때는 뚜껑까지 꼭 맞출 것)

  3. 케이지를 저울 옆으로 옮긴다. (*옮길때는 물병을 거꾸로 돌려 옮길 것 <- 필자가 항상 놓치는 부분)

  4. 쥐를 저울에 넣는다. (이때 링도 같이 넣어준다. - 저울을 좋은 공간이라고 인식시켜 주기 위해서다.)

  5. 케이지로 옮기고 원래 위치로 옮겨준다.

  6. 다음 쥐를 위해 알콜로 저울을 닦아준다.

일단은 이번주는 몸무게만 체크하기 때문에 최대한 이 루틴을 지켜 쥐들의 몸무게를 측정해보려고 한다. 추가적으로 설명을 다 듣고 필자는 궁금한 점이 한가지 생겼었다. “동물은 후각이 뛰어나니 suger water와 quinine을 냄새를 맡고 길을 알게되면 어떡하지?” 라는 궁금증이였다. 답은 간단했다. suger water 와 quinine은 무색 무취로 만들어져 쥐들이 냄새와 시각으로는 구분하지 못한다고 설명해 주셨다. 아직까지 행동실험을 들어간 것은 아니지만, 루틴을 최대한 지키는 노력을 하여 실험에 영향을 끼치지 않게 노력해 보겠다.

Medical check

LE49

금일 49번은 어제 준 설탕물과 밥을 모두 섭취했다. 먹이와 설탕물을 다 먹어서인지 몸무게가 473g으로 증가했다. 추가적으로 저울에 옮길 때 사람에 대한 저항이 많이 줄었다. 많이 온순해졌다. 저울에도 후르츠 링 3개를 넣어줬다. 저울에 대한 반감을 없애기 위해서 넣어줬지만, 아직까지 후르츠 링은 먹지 않는다. 지금까지 후르츠 링을 주었지만 한 번도 먹은 적이 없다. 금일 설탕물을 다시 15mL를 몸무게 측정 후 넣어주었다. 49번은 넣자마자 빠른 속도로 설탕물을 흡입했다. 몇 분이 안되서 설탕물을 모두 섭취했는데, 부족했는지 설탕물이 나오는 입구를 계속 핥는 모습을 보여줬다.(오랜 시간 동안 핥았다.) 이 행동은 나중에 실험에 들어가면 reward에 대한 욕구가 강할 것 이라는 해석이 된다. 아마도 49번은 적응력도 빠록 reward에 대한 욕심도 있어 실험에서도 잘 적응할 것으로 생각든다. 추가적으로 금일 먹이는 30g을 배부했다.

LE50

어제 배딩을 한 곳으로 몰아놓은 50번은 오늘 아침에 확인해 보니 배딩을 다시 평평하게 만들어 놓았다. 아마도 케이지와 103B호에 대한 적응이 이제서야 된 것 같다. 어제 준 설탕물 15mL와 먹이 30g을 모두 섭취했다. 몸무게 측정 과정에서 원래 핸들링을 하게되면 케이지를 이리저리 움직였지만, 금일은 케이지에서 움직이는 것 없이 바로 잡혔고, 저항도 크게 줄었다. 추가적으로 50번은 케이지에 필자의 손을 내밀면, 궁금한지 다가와서 냄새를 맡는다. 필자에 대한 거부감이 많이 사라진 것 같다. 몸무게를 측정할 때 저울에 링 3개를 함께 넣어주었다. 아직까지 50번도 링을 먹지는 않는다. 링에 대한 거부감을 제거해 주기 위해 케이지에 링을 3개정도 넣어주었다. 금일 몸무게는 454g으로 50번도 49번과 비슷하게 몸무게가 늘었다. 추가적으로 설탕물 15mL도 넣어주었다. 넣어 주자마자 기다렸다는 듯이 설탕물을 핥았고, 몇분이 지나 설탕물을 다 먹었다. 50번도 reward에 대한 욕심이 강한 것 같다. 추가적으로 금일 먹이는 30g을 배부했다.

DLC project

Process

어제 0100 파일은 .sec에서 .mp4로 확장자가 변환되었지만, 0200파일은 변환되지 않는 문제가 있었다. 금일 그 문제를 해결하기 위해 직접 vr simulation system을 보러 갔다.

0100파일과 0200파일의 차이점을 알아내기 위해 CCTV 저장매체에서 설정창을 열어 확인했다. 확인 결과 의심되는 정황을 포착할 수 있었다.

바로 영상신호 즉 프로토콜이 다르다는 것이다. 확장자 변환이 되는 파일은 AHD로 저장이 되어 있었고,확장자 변환이 되지 않는 파일은 CVBS로 프로토콜이 되어있었다. AHD는 Advanced High Density의 약자로 비교적 최근에 나온 프로토콜이다. CVBS는 Composite Video Blanking and Sync의 약자로 CCTV 시스템에서 오랫동안 사용되어 온 기본적인 비디오 신호 전송 방식이다. 그도 그럴것이 ffmpeg으로 변환이 되지 않는 파일은 화질이 많이 떨어졌고, 용량이 적었다. CVBS로 프로토콜이 되어 있기 때문에 화질이 AHD에 비해 떨어졌고, 용량이 적은 것이었다. 그렇다면 ffmpeg으로 변환이 되지 않는 이유가 과연 CVBS 때문인 걸까?

그것만은 또 아니였다.

ffmpeg은 H.264 코덱으로 이루어진 영상의 확장자를 변경할 수 있다. CCTV system을 보니 코덱이 H.264로 저장이 되는 것을 확인했다. 위 사항을 확인했을 때 필자는 이러한 결론을 얻을 수 있었다.

“H.264로 저장이 되고, 어제 HxD를 뜯어보았을 때 0100과 0200의 차이를 볼 수 없었으니, ffmpeg을 사용하여 확장자명 변환이 가능하겠다. 강제 변경하는 명령어를 찾아보자.”

Solution

CVBS 프로토콜을 ffmpeg으로 확장자를 변경하는 명령어를 찾아냈다. cmd 창에

ffmpeg -f h264 -i input.sec -c copy output.mp4

를 입력한다. 여기서 input.sec는 사용자가 원하는 .sec 파일 명을 입력하면 된다. output 도 원하는 이름을 입력하면 된다.

위 명령어를 입력하니 CVBS 프로토콜도 .mp4로 확장자명이 변경이 가능해졌다. 하지만 영상 초반만 제대로 작동하고 후반으로 갈 수록 영상이 빠르게 흐르는 문제점이 발생했다. 이 문제를 해결하기 위해 프레임 레이트를 명시해 주었고, 타임스탬프를 재설정 해주었다. 또한 정확한 프레임 수를 확인 후 .mp4 파일로 변환하도록 명령어를 추가했다.

다시 cmd 창에

ffmpeg -f h264 -fflags +genpts -framerate 30 -i input.sec -c:v libx264 -preset medium -crf 23 output.mp4

를 입력한다.

위 명령어는

  1. -r (프레임 레이트) - raw 스트림에는 fps 정보가 없으므로, 수동으로 fps를 지정하는 명령어

  2. —fflags +genpts (타임스탬프 설정) - ffmpeg이 자체적으로 PTS를 생성하도록 강제하는 명령어

가 핵심적으로 추가되었다.

위 명령어를 입력하니 CVBS프로토콜 영상도 확장자명이 .mp4로 변경되어 재생이 가능해 졌다.

이제 모든 영상 파일을 mp4로 재생이 가능해졌으니 어제 만들어놓은 GUI를 업데이트 해 놓으면 된다.

명령어가 2개이기 때문에 먼저 AHS 변환 명령어를 실행하고 오류가 발생하면, CVBS 변환 명령어를 실행하도록 설계했다. 추가적으로 어제는 하위 폴더를 선택하고 저장 경로 폴더를 직접 만들어 저장했지만, 한번에 모든 폴더에 파일을 확장자 변환하고 저장 파일을 자동으로 _mp4폴더를 추가하여 _mp4 폴더에 .mp4 영상을 추가하게 만들었다.

필자가 개발한 .mp4 변환기의 GUI이다. CVBS는 AHD 명령어로 먼저 받아 오류가 생기는지 확인 하고 오류가 생긴다면 CVBS의 명령어를 실행하도록 만들었다.

추가적으로 상위폴더를 선택하면 아래 하위폴더에 존재하는 .sec 파일들을 모두 .mp4 파일로 변환하고 변환된 파일을 _mp4 폴더를 새로 만들어 .sec 원본 파일과 .mp4 파일 모두 볼 수 있게 만들었다. 위 사진이 _ㅡmp4 폴더가 추가된 모습이다. 폴더를 들어가게 되면,

1번 채널부터 6번채널 영상이 .mp4로 저장되어 있는 모습을 볼 수 있다. 어제 .mp4로 변환이 되지 않는 영상을 실행시켜 보면

실행이 잘 되는 모습을 볼 수 있다.

이제는 영상 파일 확장자 변환이 끝났으니, 본격적으로 DeepLabCut project를 진행할 수 있게 되었다. 그 전에 확인해야 할 것이 한가지 있다. sampling late이다. 원본 파일과 .mp4 파일의 sampling late가 맞지 않으면 분석에 문제가 발생할 수 있다. 금일 확인한 바로는 CVBS의 sampling late 즉 프레임 속도는 30 프레임이고 AHD 파일의 .mp4 프레임은 25 프레임이었다. DVR의 원본 프레임을 알면

-framerate 30

의 명령어에 원하는 숫자를 추가하여 프레임으로 고칠 수 있다. 명일 DVR 시스템의 원본 sampling late를 알고 위 명령어를 사용하여 프레임 속도를 맞추면 project를 시작할 준비가 완료 될 것 같다.