역수와 역행렬

수학 이야기 2017.08.12 15:48

3의 역수는? 1/3


그럼 '역수'란? ...


역수를 구하는 방법은 알아도 역수가 무엇인지는 모르는 경우가 많다.


마찬가지로 역행렬이 무엇인지 물어보면,


학생 1) 1/(ad-bc) * [d -b; -c a]


학생 2) 곱해서 항등행렬(I)이 나오는 행렬


물론 두번째 대답이 정확한 대답이다. 만일, 이와 같이 바로 답할 수 있다면 이 학생의 수학실력이나 앞으로의 공부에 대해서는 걱정할 필요가 없을 듯 하다.


그런데, 학생 2와 같이 대답한 경우에도 사실은 한번 더 확인할 필요가 있다. 그걸 그냥 지식처럼 알고 있는 것인지, 아니면 정말 이해한 것인지


만일 대학생에게 두 행렬의 곱 AB의 역행렬이 무엇이냐고 물어보면 아마도 대부분 B-1A-1라고 자신있게 대답할 것이다 (물론, A-1B-1인가? 하는 학생도 분명 있다). 하지만, B-1A-1가 역행렬인 이유를 증명해봐라 하면 대부분 당황해 한다.


'증명'이라는 말만 들어도 사고기능이 정지하는 경우도 있고 역행렬의 의미를 제대로 이해하고 못한 경우도 있을 것이다. 하지만 그 증명은 정말 간단하다.


증명: AB에 B-1A-1를 곱하면 AB * B-1A-1 = I이다. 따라서, AB의 역행렬은 B-1A-1이다. 끝.


역행렬의 정의를 정확히 이해하고 있다면 당연히 풀수 있는 문제이다. 또한 역행렬의 정의를 안다면 AB의 역행렬이 A-1B-1인지 B-1A-1인지 혼동할 이유도 암기할 이유도 없다. 그리고, 정의로부터 kA의 역행렬은 1/kA-1, ABC의 역행렬은 C-1B-1A-1, PAP-1의 역행렬은 PA-1P-1, 대각행렬 diag{c1, c2, ..., cn}의 역행렬은 diag{1/c1, ..., 1/cn}임도 손쉽게 알 수 있다.


☞ 어떤 수의 역수는 자신과 곱해서 (곱셈에 대한 항등원인) 1이 나오는 수이다


by 다크 프로그래머


'수학 이야기' 카테고리의 다른 글

아이와 수학 공부하기  (3) 2017.11.15
역수와 역행렬  (4) 2017.08.12
Gram–Schmidt(그람-슈미트) 직교화  (6) 2017.05.17
곱셈과 덧셈  (2) 2017.04.26
  • 질문 2017.08.15 09:35 신고 ADDR 수정/삭제 답글

    안녕하세요. 오랜만에 수학 보면서 블로그 방문 자주 하고 있습니다. 먼저 감사드립니다.
    mahalanobis distance를 보다 역행렬 올려주셔서 두개 묶어서 질문 드리려고 합니다.
    1차원의 MD는 이해가 되었는데, 2차원의 MD에서의 식이 잘 이해가 되지 않아 혹시 아실까 해서 여쭤봅니다. transpose와 공분산의 역행렬은 왜 들어가는지..모르겠습니다..ㅠㅠ

    • BlogIcon 다크pgmr 2017.08.15 21:26 신고 수정/삭제

      안녕하세요. 질문하신 내용에 대한 정확한 설명은 다소 긴 수학적 설명과 배경설명을 필요로 합니다. 간단히 댓글로 설명하기에는 어려움이 있습니다. 일단 직관적으로만 설명해보면 열벡터 x가 있을 때 x^T*x는 x의 길이(norm)의 제곱이 됩니다. 따라서, 평균이 벡터 m이라고 하면 (x-m)^T*(x-m)은 데이터 x와 평균까지의 거리^2(Euclidean distance)입니다. 그런데, MD는 데이터와 평균까지의 거리를 그 방향으로의 표준편차로 나눈 값입니다. 공분산행렬의 역행렬을 곱하는 것은 나누기의 의미를 갖습니다. 즉, 공분산 행렬 Σ에 대해, (x-m)^T * Σ^-1 * (x-m)은 x와 평균관의 거리의 제곱을 분산으로 나누는 의미가 됩니다. 따라서 여기에 sqrt(제곱근)를 씌우면 MD가 됩니다.

  • 질문2 2017.08.15 15:47 신고 ADDR 수정/삭제 답글

    안녕하세요, 저도 요즘 아주 블로그 잘 보고 있습니다. 데이터 분석을 하던중 MLE(최대가능도)에 대한 이론이 많이 나오더라구요..... MLE,,,이해할 듯 말듯 합니다... 이론적으로 이해를 하려니 와닿지가 않고,, 예를 들어 어떻게 이해해야할까요?

    • BlogIcon 다크pgmr 2017.08.15 21:27 신고 수정/삭제

      MLE에 대해서는 http://darkpgmr.tistory.com/119 글을 보시면 좋을 것 같습니다.

DarkLabel1.3 - 이미지/비디오 객체 레이블링 툴 (Image Labeling and Annotation Tool)

개발한 것들 2017.07.18 11:21

동영상(avi, mpg) 또는 이미지목록에서 물체의 사각형 경계(bounding box)를 따서 labeling 및 다양한 포맷으로 저장할 수 있는 유틸러티 프로그램입니다.


이 프로그램은 물체인식이나 영상추적 목적의 DB 생성에 활용될 수 있습니다. 빠른 반응속도, 편리한 인터페이스, 작업부담을 줄여주는 편의기능(자동추적, interpolation을 이용한 라벨링, 자동 ID 라벨링)이 가장 큰 특징입니다.


비상업적 목적이라면 누구나 사용할 수 있으며 사용상 문제점, 건의사항 등이 있으면 댓글로 알려주시기 바랍니다. 원래는 제가 쓸 목적으로 만들었으나 최근에 시간을 들여서 프로그램을 개선했습니다 (ver1.3). 눈에는 잘 드러나지 않지만 프로그램의 품질을 좌우하는 미묘한 부분들, 그리고 실행의 안정성, 그리고 뭔지 모를 것들을 개선했습니다..


데모영상1(초창기 버전): https://www.youtube.com/watch?v=zFpX2bORz5E

데모영상2(darklabel1.2): https://www.youtube.com/watch?v=vbydG78Al8s

데모영상3(darklabel1.3): 조만간 잘 찍어서 올릴 예정...


DarkLabel1.3 인터페이스 화면



프로그램 다운로드 (Download)


DarkLabel1.3_part1.zip

DarkLabel1.3_part2.zip


- 무설치(실행파일 1개) / windows에서 동작 (xp 이상)

- part1과 part2를 모두 다운로드 (첨부파일 용량제한으로 나누어 올림)

- part2의 opencv_ffmpeg320.dll을 DarkLabel.exe와 같은 폴더에 놓고 프로그램 실행


[주요 기능 및 특징]

- 다양한 포맷의 비디오(avi, mpg, ...) 및 이미지 목록(jpg, bmp, png, ...) 지원

- 복수 개의 박스(box) 설정 및 label 설정 지원

- 물체인식 및 영상추적 분야에서 사용되는 다양한 데이터 포맷 지원

- 영상추적기를 이용한 자동 labeling 지원 (labeling by tracking)

- 인터폴레이션(interpolation) 기능을 이용한 구간 labeling 지원

- 각 개체에 클래스별 고유 ID를 자동으로 부여하는 auto labeling 기능 지원


[프로그램 사용법]


마우스/키보드 인터페이스 (Shift/Ctrl = Shift 또는 Ctrl)

- 마우스 드레그(drag): 박스 생성

- Shift/Ctrl + 드레그: 박스 편집

- 마우스 더블클릭: 동일 ID 객체 trajectory 일괄선택/해제 (구간 선택)

- 마우스 우클릭: 일괄선택한 객체 trajectory 전체 삭제 (구간 삭제)

- 마우스 우클릭: 가장 최근에 생성한 박스 삭제 (선택된 trajectory 없을 경우)

- Shift/Ctrl + 우클릭(특정박스): 선택한 박스만 삭제

- Shift/Ctrl + 우클릭(빈공간): 현재 화면의 모든 박스 삭제

- Shift/Ctrl + 더블클릭(특정박스): 선택한 박스의 label 수정

- Shift/Ctrl + 더블클릭(trajectory): 선택한 trajectory 상의 label 일괄 변경

- 화살표키/PgUp/PgDn/Home/End: 비디오프레임(이미지) 이동

- Enter키: 영상추적 기능을 이용한 자동 박스 생성 (labeling by tracking)


레이블 및 ID 지정

- no label: 레이블 없는 박스 생성

- box label: 사용자가 지정한 레이블 부여 (ex. human)

- box label + auto id: 사용자 지정 레이블에 id 자동 부여 (ex. human0, human1, ...)

- id가 지정될 경우 trajectory 단위 객체 선택/편집이 가능

- popup labeleditor: 미리 등록한 레이블 목록창 팝업 (labels.txt 파일에 등록)

- popup시 단축키(1~9) 누르면 해당 label 자동 입력 (여러 클래스 동시 작업에 유용)

- 화면에는 label+id 형태로 표시되지만 내부적으로는 label과 id를 구분

- gt 데이터로 저장시, label만 있는 포맷을 선택하면 화면 보이는 레이블(label+id) 저장

- gt 데이터로 저장시, label, id 구분 포맷을 선택하면 label, id가 분리되어 저장됨


Tracking 기능

- 영상추적 기능을 이용해서 다음 프레임의 박스 설정 (동일 id/label 부여)

- 최대 100개까지 동시 추적

- tracker1(robust) 알고리즘: 대상을 오래 추적 (정확도는 떨어짐)

- tracker2(accurate) 알고리즘: 대상을 정확하게 추적 (자동차 등에 유리)

- Enter키 / Next&Predict 버튼

- 주의!! 추적기능을 이용하면 다음 프레임에 원래 있던 박스는 사라짐


Interpolation 기능

- 추적 기능은 편리하지만 정확도가 떨어지는 문제점이 있음

- 비디오 구간에 걸쳐서 객체 단위로 레이블링 필요시 이용

- 1. begin interpolation 버튼: interpolation 기능 시작

- 2. 대상 객체의 궤적을 따라서 박스를 중간 중간 그려줌 (일종의 way point)

- 3. way point 박스는 자주색, 보간된(interpolated) 박스는 검은색으로 표시됨

- 4. 보간이 잘못된 부분은 수정(Shift/Ctrl+drag), way point는 얼마든지 추가(순서 무관)/삭제

- 5. end interpolation 버튼: 작업 종료 & 작업한 trajectory가 데이터로 등록됨


비디오/영상 불러오기 및 프레임간 이동

- Open Video File: 비디오 파일을 불러온다 (avi, mpg, mp4, wmv, mov, ...)

- Open Image Directory: 폴더 안의 모든 이미지를 불러온다 (jpg, bmp, png, ...)

- 영상 프레임간 이동: 키보드 →, ←, PgUp, PgDn, Home, End, 슬라이더 컨트롤


작업 데이터 저장 및 불러오기

- Load GT: ground truth 파일을 선택한 포맷으로 불러온다.

- Save GT: 선택한 데이터 포맷으로 현재까지 작업한 결과를 저장한다.

- 데이터를 불러올 때에는 실제 데이터 파일과 일치하는 포맷을 선택해야 하나 데이터를 저장할 때에는 자신이 원하는 임의의 포맷으로 저장할 수 있음

- 이미지 목록에서 작업할 경우 프레임 번호(frame#) 포맷을 사용하면 파일명 순으로 정렬했을 때의 이미지 순서가 프레임 번호가 됨 (00001.jpg, 00002.jpg, ... 와 같은 목록에 유용)

- Save Settings: 현재 선택한 데이터 포맷 및 옵션을 저장 (프로그램 실행시 자동 복원)


데이터 포맷 (Syntax)

- |: 줄바꿈

- []: 반복되는 구문

- frame#: 프레임 번호 (동영상의 프레임 번호, 이미지 목록에서는 이미지 순서)

- iname: 이미지 파일 이름 (이미지 목록에서 작업할 경우에만 유효)

- label: 레이블

- id: 객체 고유의 id

- n: 이미지에 설정된 경계사각형 개수

- x,y: 경계사각형의 left, top 위치

- w,h: 경계사각형의 폭, 높이

- cx,cy: 경계사각형의 중심(center) 좌표

- x1,y1,x2,y2: 경계사각형의 left, top, right, bottom 위치


[버전 히스토리]


* DarkLabel 1.3 (2018.03.31)

- 프로그램의 완성도를 높임 (ui, 반응속도, 안정성, 에러체크, 미세한 기능들, ...)

- trajectory 단위로 박스 선택/삭제/label수정 가능

- label(class)과 id를 분리해서 저장/로드할 수 있는 데이터 포맷 추가


* DarkLabel 1.2 (2018.02.19)

- 심각한 버그 수정: 숫자를 label로 사용할 경우 gt 데이터 로드시 오류 현상 수정

- interpolation을 이용한 labeling 기능 추가 (본문의 프로그램 사용법 참조)

- 개체 ID 자동부여 및 auto labeling 기능 추가 (본문의 프로그램 사용법 참조)

- 비디오내 프레임 이동시(navigation) GUI 반응성 개선


* DarkLabel 1.1 (2017.09.06)

- 작업결과를 동영상/이미지로 저장할 수 있는 기능 추가


* DarkLabel 1.0 (2017.07.18)

- labeling 기능 추가, tracker의 성능 및 UI 반응성 개선, 최신 비디오코덱 지원

- 프로그램 이름을 GT_Extractor에서 DarkLabel로 변경


* GT_Extractor 2.3 (2016.09.29)

- 버그 수정 (이미지 리스트에서 GT 파일 저장/불러올 때 오류 현상)


* GT_Extractor 2.2 (2016.08.26)

- 지원 비디오 포맷 추가 (avi, mpg, mp4, wmv, ...)


* GT_Extractor 2.1 (2013.08.12)

- 비디오 뿐만 아니라 이미지 목록에 대해서도 편집 가능


* GT_Extractor 2.0 (2013.01.15)

- 복수개의 대상 설정 및 추적 기능


* GT_Extractor 1.0 (2013.01.08)

- 이미지 당 하나의 대상만 설정할 수 있음


by 다크 프로그래머

  • 이전 댓글 더보기
  • 김공자 2016.09.28 17:59 신고 ADDR 수정/삭제 답글

    안녕하세요. 저도 영상처리초짜님과 같은현상을 겪고있습니다.
    이미지GT를 save하고 다시 Load GT를하면 runtime error이 발생합니다.

    • BlogIcon 다크pgmr 2016.09.29 11:59 신고 수정/삭제

      제보 감사합니다. 찾아보니 실행경로 설정과 관련된 버그가 있었습니다. 수정하여 다시 올렸습니다.

  • 나비 2016.10.11 22:22 신고 ADDR 수정/삭제 답글

    안녕하세요 다름이 아니라 http://darkpgmr.tistory.com/70 에서 positive image를 추출하려고 이프로그램을 실행시켰습니다. 메모장에
    1857,1
    618,578,264,176 다음과 같이 출력이 됩니다. 그런데 createSamples을 하려면 동영상파일이 아닌 이미지파일이 필요하지 않나요? 그러면 어떤식으로 해야하나요 ㅠㅠ
    아니면 제가 프로그램 만들어서 메모장에 있는 것을 파일 입력으로 받아서 영상에서 이미지를 추출해야 하나요?

    • BlogIcon 다크pgmr 2016.10.13 04:06 신고 수정/삭제

      네, 구현된 Cascade Training 프로그램은 동영상에서는 샘플을 생성할 수 없기 때문에 이미지를 사용해야 합니다. 동영상을 이미지로 바꾸어 주는 프로그램을 이용하시면 좋을 것 같습니다 (VirtualDub 등)

  • cv초심자 2017.07.27 20:21 신고 ADDR 수정/삭제 답글

    테스트를 해보니, 지원하는 영상 해상도 크기의 한계가 있는 것 같습니다만,
    혹시 지원하는 비디오 영상 해상도 크기 좀 늘려주실 수 있나요? HD급정도(1280 x 720)로만 해주셔도 감사하겠습니다만^^
    그리고 동영상에서 그린 바운딩 박스는 이미지로 저장을 하지 못하나요? 어떻게 저장을 하는지 궁금합니다.

    • BlogIcon 다크pgmr 2017.07.27 23:10 신고 수정/삭제

      딱히 영상 해상도에 제한은 없습니다. 만일 어떤 비디오 영상이 열리지 않는다면 그것은 비디오 코덱 문제일 것입니다 (영상 해상도와는 무관합니다). 그리고 바운딩 박스는 텍스트 파일로만 저장되며 Save GT로 저장하고 Load GT로 불러올 수 있습니다.

    • cv초심자 2017.07.28 09:39 신고 수정/삭제

      비디오 파일 확장자는 avi인데, 720x480의 SD급에서는 열리고, 1280x720의 HD급에서는 비디오 파일이 오픈된 후에 프로그램이 죽어버리는 버그(같은 현상)을 발견해서 문의 드렸습니다. 해당 비디오 파일은 코덱 문제가 아닐 수도 있다는 판단이 드는 건,제가 이미 OpenCV 비디오 플레이어를 만들어서 제 환경에서는 잘 사용을 하고 있기 때문입니다. 신경 써주셔서 감사합니다.^^

    • BlogIcon 다크pgmr 2017.07.28 11:22 신고 수정/삭제

      같이 포함되어 있는 opencv_ffmpeg320.dll이 실행파일과 같은 경로에 없으면 일부 동영상이 정상적으로 동작하지 않거나 프로그램이 죽을 수 있습니다. 만일 ffmpeg 파일이 같이 있는데도 그러한 에러가 났다면 원인은 저도 잘 모르겠습니다. 혹시 해상도 외에 추측되는 원인이 있다면 알려주시면 감사하겠습니다. 비디오 해상도는 아시겠지만 opencv에서 비디오 해상도가 크다고 해서 영상을 읽지 못하지는 않습니다.. HD, full HD, 2560 x 2048 비디오까지 테스트는 했는데 큰 문제는 없는것 같습니다.

    • cv초심자 2017.07.28 17:33 신고 수정/삭제

      원인을 발견하였습니다. 제 실수인데, 비디오 파일의 인코딩이 제대로 완료되지 않은 파일을 재생했네요. 다음 플레이어로 보니까 신기하게도 정상적으로 동작을 하길래, 정상 파일인지 알았습니다. 그런데 동일한 주기로 녹화된 다른 파일들과 용량을 비교해보니까, 해당파일의 용량이 훨씬 적더군요. 정상적으로 동작을 합니다. 착오를 드려서 죄송합니다.^^

    • BlogIcon 다크pgmr 2017.07.31 09:24 신고 수정/삭제

      문제가 해결되었다니 다행입니다 ^^

  • 주냄 2017.08.02 16:59 신고 ADDR 수정/삭제 답글

    안녕하세요. computer vision을 연구하고 있는 대학원생입니다.
    예전부터 다크pgmr님께서 CV에 쓰이는 많은 알고리즘이나 방법론들을 알기쉽게 설명하고 구현해 놓으셔서 공부하는데 많은 도움이 되었습니다.
    최근에 딥러닝으로 detection 및 tracking 연구함에 있어 위와 같은 DB 제작 프로그램이 필요하여 개인적으로 만들어 사용하고 있었는데, 이 프로그램은 정말 최고네요!! 만들어 주신 프로그램으로 열심히 연구하여 보도록 하겠습니다. 감사합니다!!

    • BlogIcon 다크pgmr 2017.08.03 15:08 신고 수정/삭제

      도움이 된다니 보람이 느껴집니다. 감사합니다.

  • 카킴 2017.08.07 16:08 신고 ADDR 수정/삭제 답글

    요즘 이 툴로 labeling 중입니다 너무 좋네요 다른 tool 사용하다가요!
    이 tool은 전체화면 안되나요?

    • BlogIcon 다크pgmr 2017.08.07 16:43 신고 수정/삭제

      창 크기조절도 되고 전체화면도 가능합니다. 하지만 전체화면으로 하면 좌측의 컨트롤 창에 영상 창이 일부 가려지게 됩니다. 사용해 보시고 불편한 사항이 이나 개선 의견이 있으면 댓글 남겨주세요.

  • lynx80 2017.08.07 17:31 신고 ADDR 수정/삭제 답글

    안녕하세요?
    avi 동영상을 해당 프로그램으로 불러와서 박스 설정을 완료하고 Save GT로 저장해서
    텍스트 파일을 저장하는 것 까지 완료했는데 박스 설정을 동영상에 덧씌우기 해서
    한번에 같이 보려면 어떻게 해야하나요? ^^;

    • BlogIcon 다크pgmr 2017.08.07 21:57 신고 수정/삭제

      그러려면 먼저 비디오 파일을 불어온 후 저장된 텍스트 파일을 Load GT로 불어오면 됩니다

  • 카킴 2017.08.08 09:02 신고 ADDR 수정/삭제 답글

    아 저는 이미지 때문에 그런데요! 전체화면으로 하면요 다음 사진으로 넘길때 이미지 사이즈가 원본으로 돌아가요 ㅜㅜ 비율 유지안된 상태로 커저선지 labeling 할때 눈이 아프네요 ㅋㅋ

    • BlogIcon 다크pgmr 2017.08.08 10:23 신고 수정/삭제

      네, 어떤 문제인지 이해했습니다. 원래 구현하기를, 이미지 사이를 이동할 때 이미지 원본의 크기에 변화가 없으면 과거의 창의 크기를 유지하고, 이미지 크기에 변화가 발생하면 새로 불러오는 이미지의 크기에 맞게 (1x) 창의 크기를 조절하도록 구현되어 있습니다. 이미지 크기가 제각각이면서 전체화면으로 작업하는 경우는 고려를 못했었는데요, 원하시는 기능은 이미지의 가로, 세로 비율이 유지되면서 화면 최대 크기로 자동 표출되는 것으로 이해했습니다. 좋은 의견 감사드리며 다음 버전업에 반영토록 노력해 보겠습니다.

    • 카킴 2017.08.08 12:53 신고 수정/삭제

      ㅎㅎ 메카니즘이 그렇게 되는거였네요! 간혹가다 사이즈가 같으면 그대로 출력될때도 있어서 여러시도해보고있었는데 미구현된 기능이었네요 :) 툴 잘쓰고있습니다 감사합니다

  • 초보자 2017.08.08 13:42 신고 ADDR 수정/삭제 답글

    안녕하세요, 처음 연구를 시작했던 때부터 본 블로그에서 많은 정보를 접했던 사람입니다. 먼저 감사의 말씀 드립니다.

    현재 딥러닝 detection을 위한 dataset을 준비 중에 있는데, 마침 DB 구축 프로그램을 개발해주셔서 사용해보려고 합니다.
    혹시 이 프로그램을 통해 구축한 labeling 결과를 바로 VOC 형태로 저장하고 VOC 형태 기반 소스코드(예시: tensorflow 기반 faster-rcnn)에 input이 가능할까요?

    항상 감사드립니다.

    • BlogIcon 다크pgmr 2017.08.08 16:41 신고 수정/삭제

      네, 그런 기능이 있으면 유용하겠네요. 다음 버전에 고려해 보겠습니다. 그런데, VOC나 ImageNet 포맷으로 저장하려면 이미지 하나마다 xml 파일을 하나씩 만들어야 하네요.. 냠냠..

    • 초보자 2017.08.14 09:49 신고 수정/삭제

      그렇군요! 답변 감사 드립니다.
      좋은 하루 되세요~

  • whiteforest 2017.08.09 09:41 신고 ADDR 수정/삭제 답글

    안녕하세요. labeling을 완료하고 Save GT까지 했습니다.
    녹화프로그램을 사용하지 않고 동영상에 씌워서, 동영상을 재생했을때 label 프레임이 같이 나오게 하는 방법은 없을까요?

    좋은 프로그램 감사합니다.

    • BlogIcon 다크pgmr 2017.08.09 13:40 신고 수정/삭제

      구현은 가능합니다만 실제 그러한 기능을 추가할지는 조금 고민해 봐야 할 것 같습니다. 기능이 많다고 좋은건 아니라서요.. 혹시 어떤 경우에 그런 기능이 필요할까요?

  • ㅁㄴㅇ 2017.08.09 15:08 신고 ADDR 수정/삭제 답글

    http://carlvondrick.com/vatic/
    이게 생각나는 프로그램이네요.

    • BlogIcon 다크pgmr 2017.08.09 16:29 신고 수정/삭제

      네, 잘 만들어진 프로그램이네요. 특히 interpolation 기능이 인상적입니다. 저는 tracking 기능을 사용했는데 아무래도 tracking은 성능적 한계가 있을 수 있으니 상황에 따라서는 interpolation 기능이 좀더 유용할 것 같다는 생각이 듭니다. 그리고, object별로 자동으로 id를 부여하고 색상도 다르게 표현한 것도 좋은 것 같습니다. 다음에 버전업을 할 때에 이런 좋은 특징들도 고려해 봐야겠습니다. 그런데, 원래 개인적으로 사용할 목적으로 만든 프로그램을 공개한 것이라서 또 언제 마음이 동할지는 모르겠습니다.. ^^

  • 즐겨라! 2017.08.22 14:04 신고 ADDR 수정/삭제 답글

    안녕하세요 다크님!

    좋은 툴 공개 해 주셔서 감사합니다

    마침 필요할 시점이와서 어떻게 만들어 볼까 생각 하던차에 새로운 포스팅이 떠서 보니 마침 제가

    딱 필요한 프로그램을 만들어 주시다니 ㅜㅜ

    감사합니다~!

    • BlogIcon 다크pgmr 2017.08.22 14:07 신고 수정/삭제

      네, 도움이 된다니 다행입니다 ^^. 사용해 보시다 혹 불편한 점이 있으면 알려주세요.

  • 필명1 2017.09.05 20:51 신고 ADDR 수정/삭제 답글

    이미지 bounding box처리한 이미지를 그대로 저장하는 기능은 없을까요?

    • BlogIcon 다크pgmr 2017.09.06 00:12 신고 수정/삭제

      네, 가능합니다. 간단한 기능이니 시간 되는데로 추가해서 올려놓겠습니다.

  • 2017.09.20 16:04 ADDR 수정/삭제 답글

    비밀댓글입니다

  • 안녕하세요 2017.10.23 09:37 신고 ADDR 수정/삭제 답글

    사용하다보니 오류(?) 비슷한것을 찾았습니다.
    처음에 좌표설정을 해서 저장할떈 제대로 되는데 그 좌표를 불러오면 박스가 이동해있는 경우가 많더군요;;
    혹시 이문제도 해결이 가능하신가요??

    • BlogIcon 다크pgmr 2017.10.23 22:31 신고 수정/삭제

      안녕하세요. 문제점을 알려주셔서 감사합니다. 그런 현상은 없다고 생각했는데 좀더 테스트해 봐야겠네요.. 혹시 그러한 현상이 항상 나타나는지 (모든 비디오에 대해서) 혹은 특정한 경우에 나타나는지 등의 특징이 있을까요? 지금은 직접 테스트할 여건이 안되어서 나중에 시간이 될때 좀더 테스트해 보도록 하겠습니다.

    • 안녕하세요 2017.10.30 09:04 신고 수정/삭제

      제가 테스트 했던 환경은 한폴더에 이미지만 100장정도를 넣고 레이블링 한 뒤 레이블링 완료된 파일을 다시 불러보니 발생했습니다... 파일 format은 iname, n,[x1,y1,x2,y2]였습니다.

    • BlogIcon 다크pgmr 2017.11.01 11:32 신고 수정/삭제

      안녕하세요. 자세한 정보 감사합니다. 저도 일단 동일한 설정으로 테스트를 해 보았는데 저는 그러한 현상이 나타나지는 않았습니다. 현상이 반복되지 않으면 원인을 알기 어려운 것이 이러한 경우의 어려움인것 같습니다. 혹시 한 가지 의심되는 경우는 저장 format과 읽기 format이 다른 경우입니다. 예를 들어, 저장 format은 iname, n, [x, y, w, h]로 했는데 읽기를 iname, n, [x1, y1, x2, y2]로 했다면 박스의 크기가 달라질 것입니다. 저장/읽기에 동일한 포맷을 사용했는지 한번 확인을 부탁드립니다.

    • 안녕하세요 2017.11.03 17:02 신고 수정/삭제

      피드백 감사합니다. 확인 해보겠습니다~~!!

  • 호야링 2017.11.16 10:16 신고 ADDR 수정/삭제 답글

    안녕하세요. 자세한 정보 감사합니다.정보를 보다가 글을 남겨놓습니다.
    저는 삼성SDI에서 근무하고 있는 직원입니다.
    image를 깔끔하게 처리하기 위해 고민하고 있는데 혹시 상담 가능할까요??
    연락처를 남겨주시면 제가 확인 후 연락 드리도록 하겠습니다.
    감사합니다.

    • BlogIcon 다크pgmr 2017.11.16 11:30 신고 수정/삭제

      죄송합니다. 오프라인 상담이나 개인적 상담은 따로 갖기 어렵습니다. 본 블로그는 개인적인 지식의 정리 및 공유를 목적으로 하는 블로그로서 본 블로그와 연관하여 업무적 제안이나 의뢰는 받지 않습니다. 영상인식, 기계학습, 수학 등 관련 주제에 대한 궁금하신 사항은 댓글로 남겨주시면 제가 아는 한 답변을 드리도록 하겠습니다.

  • BlogIcon Vikas 2017.11.27 15:50 신고 ADDR 수정/삭제 답글

    멋진 프로그램에 감사드립니다. 그러나 "Load GT"버튼을 사용하여 저장된 GT 파일을 다시로드 할 수 없습니다. 드롭 다운 상자에서 올바른 GT 형식을 선택합니다. 그러나 항상 "잘못된 GT 형식"이라고합니다. 나는 3 개의 다른 컴퓨터에서 시험했다. 모두 동일한 오류를 표시합니다. 그게 버그 야? 이것에 대한 해결책이 있습니까? 감사.

    • BlogIcon 다크pgmr 2017.11.27 16:03 신고 수정/삭제

      어떤 포맷으로 저장했고 어떤 포맷으로 로드했는지, 그러한 정보가 없다면 저로서도 문제의 원인을 알긴 힘듭니다. 그리고 특정 포맷에서만 그러한 현상이 나타나는지 아니면 모든 포맷에서 비슷한 현상이 일어나는지 등의 정보가 있다면 문제 파악에 좀더 도움이 될 것입니다.

    • Vikas 2017.11.27 16:07 신고 수정/삭제

      내가 사용한 형식은 iname, n, [cx, cy, w, h, label]입니다. 매우 빠른 답장을 보내 주셔서 감사합니다. 동일한 형식으로 저장하고로드했습니다.

    • BlogIcon 다크pgmr 2017.11.28 08:17 신고 수정/삭제

      제 컴퓨터에서 동일한 설정으로 테스트를 했으나 문제점을 찾지 못했습니다. 미안합니다만 저로서는 방법이 없는 것 같습니다.

  • yium31 2018.02.01 15:07 신고 ADDR 수정/삭제 답글

    제가 레이블링 툴을 찾고 있었는데, 이 프로그램만큼 좋은 툴이 없네요.
    감사히 쓰겠습니다!

    • BlogIcon 다크pgmr 2018.02.02 10:14 신고 수정/삭제

      감사합니다. 최근 DarkLabel의 기능을 좀더 개선했는데 아직 시간이 없어서 올리지 못하고 있습니다 (한 2주후 업로드 예상). 개선 버전이 올라가면 그것도 한번 써보시기 바랍니다. ^^

  • kkid 2018.03.13 09:03 신고 ADDR 수정/삭제 답글

    포스팅 정말 잘 봤습니다.
    한가지 궁금한것이 있습니다.
    만약 빅 데이터 같은경우 수동으로 일일히 레이블링 하기는 무리가 있는데
    이 경우 혹시 자동으로 레이블링 할수있습니까?

    • BlogIcon 다크pgmr 2018.03.13 17:49 신고 수정/삭제

      데이터가 많은 경우에는 인적 리소스를 이용하는게 어떠신지요. 돈을 조금 지불하면 레이블링을 해주는 곳들이 있다고 들었습니다.

  • 김동현 2018.04.06 10:38 신고 ADDR 수정/삭제 답글

    안녕하세요 졸업프로젝트로 영상처리를 처음으로 공부하고있는 대학생입니다. 다크프로그래머님의 포스팅글들 읽으면서 큰 도움을 받고있습니다. 프로젝트 진행중에 GUI를 만들어야해서 MFC를 공부중에 다크프로그래머님의 레이블링툴을 보게되었습니다. 제가 생각했던 기능들이 많이 포함된 이상적인 툴이라 코드를 참고하고 싶은데 혹시 가능할까요??

    • BlogIcon 다크pgmr 2018.04.06 16:31 신고 수정/삭제

      코드는 공개하지 않습니다. 양해바랍니다.

  • 김현정 2018.04.09 17:14 신고 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님. 항상 도움주셔서 감사합니다.

    혹시 bounding box/labeling 한 결과만을 저장할 수 잇는 기능이 추가된 버전이 있는지 궁금합니다.

    • BlogIcon 다크pgmr 2018.04.09 17:36 신고 수정/삭제

      네 지금은 지원하지 않는 포맷입니다. 딱히 필요한 경우가 없다고 생각되어서 포함하지 않았는데요, 혹시 어떤 경우에 필요하신가요? 말씀하신 포맷이 x, y, w, h, label 형태이지요?

인터뷰

잡기장 2017.07.13 17:11

얼마 전 한 친구와 인텨뷰를 가졌다. 이력서와 자기소개서는 훌륭했다. 하지만 이력서와 자기소개서는 참고일 뿐 그것만으로는 판단이 힘들다. 그래서 자신이 그동안 한 것에 대해서 발표를 부탁했다.


발표는 나쁘지 않았고 딥러닝을 이용해서 실제 문제에 적용한 결과도 나쁘지 않았다. 그리고 사용한 알고리즘이나 발표하면서 사용한 기술적인 용어들로 봤을 때 이 정도면 컴퓨터 비전에 필요한 기본적인 소양은 갖추었다고 판단됐다.


하지만 그것은 성급한 판단이었다. 발표만으로는 확실한 판단이 어렵기 때문에 발표 후 간단한 구술 테스트를 진행했다. 이른바 인터뷰이다. 그런데 인터뷰에서는 전혀 다른 결과가 나왔다.


테스트는 수학, 기계학습, 프로그래밍, 영상처리에 대한 질의응답 형식으로 진행했다. 예를 들어, 그 친구가 발표 도중에 SVM을 사용했다는 내용이 나왔으면 SVM이 무엇인지 간략하게 설명할 수 있느냐? 학습에서 Stochastic gradient 방법을 썼다고 했는데 그게 무슨 방법이냐? gradient가 무엇이냐? 등등 본인이 발표한 내용 중에서 관련된 개념 등을 물어보는 것이다. 그리고 프로그래밍 관련해서는 C에서 포인터가 무엇이냐? C++을 사용할 수 있다고 했는데 virtual 함수가 무엇이냐? 등 기초적이지만 수준을 체크할 수 있는 질문들이다.


그런데, 이 친구가 거의 답변을 못한다.. 막연한 지식 또는 주변적인 답변만 할 뿐 정작 질문 자체에 대해서는 답변을 하지 못한다. 그냥 가져다 쎴다. 잘 모르겠다... 어느 것 하나도 깔끔한 답변이 없다. 딱 자신이 발표한 내용, 말한 내용까지만 알고 있는 것이다.


물론 그럴 수 있다. 바쁜 세상에 모든 것을 다 알 수는 없다. 그게 뭔지는 잘 몰라도 결과가 좋다면 가져다 쓰는 것이 현실이다. 요즘 DNN을 사용하는 것이 그렇다. 그냥 가져다 쓰면 잘 된다. 이른 바 black-box implementer가 되는 것이다. 하지만, 아무리 그래도 최소한 자신이 사용하는 것에 대해서는 기본적인 개념 정도는 알고 있어야 한다.


그 친구는 조금 안타깝다.. 태도나 성실성, 경험 측면에서는 모두 통과다. 하지만 자신이 하고 있는 것에 대해서 의문을 갖지 않는 것은 받아들이기 어렵다. 그것은 잠재력과 같은 것이다..


by 다크 프로그래머

'잡기장' 카테고리의 다른 글

논문제목(영어) 대소문자 표기  (2) 2018.04.30
인터뷰  (3) 2017.07.13
책읽기의 즐거움  (3) 2017.05.24
말말말  (0) 2016.11.29
  • 1992cjm 2017.07.14 14:10 신고 ADDR 수정/삭제 답글

    저랑은 정확히 반대되는 상황이네요.
    요번에 취업을 하면서 '내가 왜 뽑혔지?' 이런 의문이 들었었거든요.
    시험, 발표, 면접을 보면서 경쟁자 분들의 스펙을 대강 들어보면 제 경력, 경험, 학벌, 영어점수은 모두 보잘것없는 고스펙의 지원자들이더군요.
    저는 제가 아는 한도 내에서만 성실히 답변을 드렸는데 아는 한도내에서
    질문사항들에 대해 해당 개념이 갖는 의의, 무엇을 위한 개념인지, 실제 사용예는 어떠한지, 내가 생각하는 장단점은 무엇인지등
    평소에 생각해오던 제 철학(?)을 이야기드렸던 것 같습니다.
    블로거님이 PM 으로서 필요한 연구인력을 판별하시는것처럼 그 친구분도 겉보기 스펙이 아니라 공학자가 추구해야하는 시스템의 이해, 분석등 대상을 단순화하고 이해하고 응용하는, 학문적인 가치에 집중하였다면하는 아쉬움이 있네요.

    • BlogIcon 다크pgmr 2017.07.14 14:38 신고 수정/삭제

      축하합니다. 현재와 가능성을 인정받은 것이네요. 사람을 뽑을 때, 현재는 최소한의 기준으로서 의미가 있지만 이 기준만 넘는다면 태도와 가능성이 훨씬 중요하다고 생각합니다.

  • 결국 2017.09.15 20:13 신고 ADDR 수정/삭제 답글

    그 지원자분 어떻게 됬나요? 뽑혔나요 나가리됬나요? 궁금하네요