IT
-
[비디오 코덱] FFmpeg Error Resilience 코드 뜯어보기IT 2022. 8. 28. 13:00
지난 글에서 비디오 코덱 (특히 H.264)의 error resilience에 대해 알아보았다. 이번엔 가장 널리 쓰이는 상용 코덱 소프트웨어인 FFmpeg에서 error resilience를 어떻게 구현해놨는지 뜯어보았다. FFmpeg은 소스코드들에 주석도 별로 안 달려있고 변수명들도 매우 불친절해서 무슨 뜻인지 파악하기가 매우 힘들다... 그래서 이것저것 바꿔보고 돌려보면서 파악해야 했다. 소스코드는 여기에서 확인할 수 있다. https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/error_resilience.c Error concealment 적용하기 일단 앞선 글에서 언급했듯이 FFmpeg은 여러 error resilience 기법들 중 FMO, Da..
-
[비디오 코덱] Error resilienceIT 2022. 7. 31. 14:37
비디오 코덱에서의 error resilience는 비디오 전송 중 일부 정보가 손실되었을때 이를 예방/처리하기 위한 여러 테크닉들을 통칭하는 말이다. 코덱마다 다르지만 결국 컨셉들은 비슷하다. 중요한 정보들을 한 곳에 담지 않고 여러 곳에 분산해서 담아서 일부 손실되어도 영향이 적도록 만든다든가, 주변 정보를 활용하여 손실된 정보를 복구한다든가 등의 방법들이 주로 쓰인다. 본 글에서는 (내가 공부한) H.264 코덱을 기준으로 작성하였다. 1. Slice coding 프레임을 여러 개의 '슬라이스'로 쪼개서 코딩하는 방식이다. Intra prediction을 같은 슬라이스 내의 macroblock끼리만 함으로써 슬라이스 간에 디펜던시를 없앤다. 즉 한 슬라이스가 망가졌을때 다른 슬라이스에 영향을 주지 않..
-
General optimization의 끝?IT 2022. 1. 30. 02:42
요즘 컴퓨터의 각 분야들 추세를 보면 general한 최적화는 이미 할 만큼 해서 이제는 domain-specific한 최적화로 넘어가는 것 같다. 예를 들어 컴퓨터 아키텍쳐 쪽을 보면, 이제는 general-purpose 아키텍쳐보다는 domain specific 아키텍쳐 (DSA)들이 많이 주목받고 있다. 즉, CPU보다는 xPU의 최적화가 활발히 연구되고 있다. "Cambrian explosion of novel computer architectures"라는 말도 나온다. 특히, 당연히 딥러닝을 위한 아키텍쳐들이 가장 주목받고 있다. 컴파일러 등도 마찬가지다. 요즘 네트워크 관련 연구를 시작해서 공부 중인데, 이쪽도 마찬가지다. 기존에 TCP 기반으로 모든 통신을 처리했다면 지금은 UDP 기반의 커..
-
[웹] 홈페이지 SSL 인증서 오류 고치기 대소동IT 2021. 11. 23. 12:42
연구실 홈페이지 관리를 맡고 있는데 얼마 전부터 ssl 인증서에 문제가 생겨서 이걸 해결해보려는 과정에서 SSL에 대해 공부를 하게 되었다... 결국은 해결 못했지만.... SSL이란? SSL 인증이란? SSL은 클라이언트와 서버 간에 데이터를 안전하게 주고 받기 위한 암호화 통신 프로토콜이다. SSL 인증 과정은 다음과 같다. 먼저, 서버는 Certificate Authority (CA)에게서 발급받은 (CA의 private key로 암호화된) SSL 인증서를 갖고 있다. 이는 CA의 오로지 public key로만 복호화될 수 있고, 복호화가 잘 되는지 확인함으로써 '이 서버는 CA에게 인증받은 신뢰가능한 서버구나!'라는 것을 알 수 있다. 이러한 상황에서 클라이언트가 서버와 통신하기 전 아래와 같은 ..
-
HCI design study에 대한 단상IT 2021. 10. 10. 22:55
저번 글에서 시스템 연구에 대해서 다루었으니, 이번 글에서는 HCI 연구에 대해서 다뤄보고자 한다. 그 중에서도 특히 design study 계열의 연구에 대해서 생각을 정리해보았다. 연구의 구성 일반적인 구성은 다음과 같다. Design goal 설정: 최종 목적함수가 무엇인지 정한다. Design space 제시: 연구의 scope 내에 있는 여러가지 design alternative 혹은 새로운 design을 제시한다. 각 디자인을 설명하고, 구현 및 실험을 통해 비교 분석한다. 연구를 통해 얻은 findings (design implications)를 제시한다. 시스템을 디자인한다는 측면에서 시스템 연구와 비슷한 점이 있긴 하지만, 시스템 연구와 HCI 연구는 논문을 통해 얻고자 하는 바가 대개 ..
-
시스템 연구에 대한 단상IT 2021. 9. 16. 00:36
시스템 연구...? 이 연구실에 와서 "시스템 연구"라는 것을 처음으로 들어봤다. 일반적으로 "알고리즘 연구"와 대비되는 의미로 사용하는데, 그렇다고 아주 명확한 경계가 있는 것은 아닌듯 하다. 시스템 연구가 굉장히 생소하게 느껴졌던 이유는, (일단 '시스템'이라는 말 자체가 너무 포괄적이어서 처음 보면 이게 도대체 뭔지 감이 안 올 뿐더러) 그 동안 컴퓨터공학에서 배웠던 것들이 알고리즘 위주이기 때문이다. 보통 처음에 프로그래밍 언어를 하나 배우고, 그거로 각종 알고리즘 문제를 푼다거나 자료구조를 배우기 시작한다. 여기서부터 "컴퓨터=알고리즘"이라는 사고가 고착화되어버린다. 그 후 컴퓨터구조, 운영체제 등 컴퓨터가 어떻게 동작하는지 로우레벨 단도 배우고 데이터베이스, 네트워크 등의 거대한 시스템들을 배..
-
[알고리즘] BFS 최단경로IT 2021. 8. 29. 02:24
논문 때문에 한동안 알고리즘 문제 풀던걸 중단했다가 오랜만에 다시 조금씩 풀어보고 있는데, 역시 오랜만에 하니까 꽤나 재밌다. BFS 관련 간단한 예제들을 풀다가 파이썬의 조심해야 할 부분도 하나 발견하고, 문제 풀이도 재밌어서 글을 남긴다. 기본 BFS 아래는 백준 2178번 미로탐색 문제이다. 가장 기본적인 BFS 예제이다. BFS는 기본적으로 큐에 이동할 노드들을 계속 넣고, 노드를 하나씩 꺼내면서 진행된다. 여기서는 상하좌우로 이동가능하므로, 이동하면서 상하좌우 중 이동 가능한 곳들을 큐에 계속 넣게 된다. 계산 시간을 줄이는 핵심은 "방문 노드 리스트", visited를 만들고, 한 번 방문한 곳은 큐에 새로 넣지 않고 (다시 방문하지 않고) 스킵하는 것이다. 이렇게 해도 되는 이유는, 이전에 ..
-
[딥러닝] YOLO 모델 안드로이드에서 사용하기IT 2021. 6. 14. 01:55
사실 YOLO는 워낙 많이 쓰이는 모델이다보니 소스가 많아서 사용하기 그렇게 어렵진 않다. 다만, TFLite로 변환해서 안드로이드에서 사용하기까지 중간중간 삽질한 부분들이 있어서, 그 부분들만 기록한다. Darknet https://github.com/AlexeyAB/darknet TF gpu docker image 사용해야 편하다! 특히, TF 버전 높은거 써야 더 다양한 operation들이 구현되어 있어서 좋다. 웬만하면 버전 높은 거 쓰자! Errors & Solutions "cudnn not found" apt-get으로 설치하기 sudo apt-get install --no-install-recommends \ libcudnn8={cudnn_version}-1+cuda{cuda_version..