영상 표현·처리·컴퓨터비전
한빛도서관은 반납된 책의 관리 라벨을 카메라로 읽어 사서의 확인을 돕고 싶다. 그러나 빛이 반사된 라벨, 기울어진 책, 여러 책이 겹친 사진에서는 글자와 경계가 달라진다. 사진의 가로·세로 크기를 늘리는 것만으로 촬영할 때 사라진 글자 정보를 되찾을 수는 없다.
사진을 선명하게 만들면 책을 정확히 구별할 수 있을까
한빛도서관은 반납된 책의 관리 라벨을 카메라로 읽어 사서의 확인을 돕고 싶다. 그러나 빛이 반사된 라벨, 기울어진 책, 여러 책이 겹친 사진에서는 글자와 경계가 달라진다. 사진의 가로·세로 크기를 늘리는 것만으로 촬영할 때 사라진 글자 정보를 되찾을 수는 없다.
필요한 것은 ‘이미지 AI 사용’이라는 한 문장이 아니다. 빛을 어떻게 숫자로 기록하고, 어떤 전처리를 거쳐 무엇을 찾고, 결과를 어떤 기준으로 확인할지 연결해야 한다. 라벨의 위치를 잘 찾는 것과 글자를 정확히 읽는 것, 올바른 도서 기록에 연결하는 것은 서로 다른 과제다.
이 절의 라벨·픽셀·상자·검출 결과는 자체 교육 자료다. 실제 이용자 촬영이나 책 판독 실험을 수행한 것이 아니다. 사람의 얼굴과 개인 대출이력은 사례 범위에서 제외한다. 학습과 추론, 자료·판본·평가 관리의 틀을 영상에 적용한다.
앞선 수학 표현과 연결
벡터·행렬은 여러 값을 같은 순서와 축으로 묶고 변환하는 표현을 제공했다. 영상도 픽셀·채널을 배열과 벡터로 표현하므로 축·단위·변환의 의미를 먼저 맞춘 뒤 처리한다.
1. 영상·그래픽 파이프라인의 정의
영상·그래픽 파이프라인은 촬영·입력 또는 모델링으로 얻은 시각 정보를 표현·변환·분석하거나 화면으로 생성하여, 사람이 보거나 시스템이 판단할 결과까지 연결하는 처리 흐름이다.
확장현실(XR)은 현실·가상 환경과 사용자의 공간적 상호작용을 다루는 VR·AR·MR 등의 관련 경험을 포괄하는 표현이다. 이 절은 주로 관찰한 영상의 표현·처리·인식을, 다음 절은 생성미디어와 3D·XR의 화면 생성·진위 판단을 담당한다.
영상처리는 밝기 조정·잡음 완화·크기 변환처럼 영상의 표현을 바꾸는 일에 초점을 둔다. 컴퓨터비전은 영상에서 물체·문자·영역·움직임 등 과제에 필요한 정보를 추론한다. 결과가 보기 좋아졌다는 사실과 판독·측정이 정확해졌다는 사실을 나누어 확인한다.
카메라 영상은 현실 자체가 아니라 촬영 위치·조명·노출·렌즈·센서와 처리 설정을 거친 관측이다. 같은 책도 조명이 바뀌면 다른 숫자가 되고, 다른 책도 가림이나 흐림 때문에 비슷하게 보일 수 있다. 모델 오류를 분석할 때 입력을 만든 조건까지 포함해야 한다.
2. 픽셀·채널·비트 깊이를 읽는다
픽셀은 디지털 영상의 격자 위치에 기록한 값의 단위다. 흑백의 밝기를 한 값으로 표현할 수 있고, 컬러는 여러 채널로 표현한다. RGB는 빨강·초록·파랑 성분을 뜻한다. 채널마다 8비트의 부호 없는 정수를 쓰면 가능한 값은 0부터 255까지 256개다. RGB 세 채널이면 픽셀당 24비트, 즉 3바이트다.
빛의 위치를 일정한 격자로 기록하는 것은 공간 표본화, 밝기나 색의 연속값을 제한된 단계로 표현하는 것은 양자화다. 픽셀 수는 공간 표현의 수, 비트 깊이는 채널별 표현 단계와 관련된다. 둘을 바꿔 쓰지 않는다. 센서가 포화되어 흰색으로 기록한 영역은 파일을 더 큰 자료형으로 바꾸어도 원래 밝기 차이를 자동으로 복원하지 못한다.
| 표현 정보 | 답하는 질문 | 잘못 읽으면 생기는 문제 |
|---|---|---|
| 가로·세로 | 몇 열·몇 행의 격자인가 | 좌표와 크기가 뒤바뀜 |
| 채널·순서 | RGB인가, BGR인가, 밝기 하나인가 | 같은 숫자로 다른 색을 해석 |
| 자료형·범위 | 8비트 정수인가, 실수인가 | 넘침·잘림·정규화 오류 |
| 색 표현·변환 | 어떤 색공간·전달 특성을 쓰는가 | 단순 평균을 실제 광량으로 오해 |
| 촬영·좌표 정보 | 방향·렌즈·크기·기준점은 무엇인가 | 화면 위치를 실제 치수로 잘못 계산 |
프로그램마다 배열의 축과 채널 순서가 다를 수 있다. OpenCV의 일반적인 컬러 입력 설명은 BGR 순서와 행·열 접근을 사용한다.1 파일이 컬러라는 이유로 첫 채널을 언제나 빨강이라고 가정하지 않는다. RGB를 요구하는 모델에 BGR을 그대로 넣으면 모양이 같아도 입력 의미가 달라진다.
가로 좌표 x와 세로 좌표 y를 쓴다면 배열 접근은 흔히 행 y, 열 x의 순서다. 다만 라이브러리와 연산의 실제 형식을 확인해야 한다. 그림의 좌표축과 메모리 저장 순서는 같은 개념이 아니다. 촬영 방향을 나타내는 메타데이터를 적용하지 않으면 정상 사진도 회전된 상태로 분석할 수 있다.
3. 따라 계산 IM-B1: 이미지 한 장과 동영상의 데이터량
IM-B1은 가로 1,920·세로 1,080픽셀, RGB, 채널당 8비트의 비압축 영상을 가정한다. 행 정렬용 여분, 파일 헤더·메타데이터·압축·전송 부가정보는 제외한다. MB는 1,000,000바이트, MiB는 1,048,576바이트로 구별한다.
픽셀 수는 1,920×1,080=2,073,600개다. 픽셀당 3바이트이므로 한 장은 6,220,800바이트다. 이는 6.2208 MB, 약 5.93 MiB다. 파일 탐색기에 표시된 JPEG 크기가 이와 다르다고 계산이 틀린 것은 아니다. 계산 대상은 디코딩한 픽셀 값이며 압축 파일 크기와 다르다.
초당 30장의 같은 비압축 프레임이면 6,220,800×30=186,624,000바이트/초다. 8비트를 곱하면 1,492,992,000비트/초, 약 1.493 Gbps다. 실제 압축 동영상의 비트율이나 필요한 네트워크 회선 계약을 이 숫자로 바로 확정하지 않는다. 인코딩·화면 변화·프로토콜 부가정보·버퍼·손실을 따로 봐야 한다.
색과 비트 깊이가 같고 가로·세로를 각각 절반으로 줄이면 픽셀 수는 4분의 1이다. 960×540×3=1,555,200바이트다. 크기를 줄여 부담을 낮출 수 있지만 작은 라벨 글자도 줄어들어 읽기 어려워질 수 있다. 데이터량 감소와 과제 성능을 같이 평가한다.
프레임률은 시간당 기록·표시되는 영상 수이며 해상도와 별개다. 초당 프레임이 많아도 긴 노출로 움직임이 흐려질 수 있고, 영상의 일부만 분석하는 경우 촬영률과 분석률도 다르다. 실제 사건이 몇 번 일어났는지를 프레임 수로 대신 세지 않는다.
4. 촬영에서 업무 판정까지 책임을 나눈다
바로 아래 「라벨 위치가 맞아도 반납을 확정할 수 없는 이유」 그림을 사용한다. 책·라벨·조명에서 촬영·디코딩을 거쳐 방향·색·좌표를 확인하고 관심영역·크기·잡음을 처리한다. 라벨 위치 → 문자 판독 → 도서 기록 대조 → 사서 확인/보류는 각각 별도 출력이다. 촬영조건·오류·정정은 해당 실패 원인을 따라 기록한다.
관심영역(ROI)은 현재 과제에 필요한 부분이다. 라벨 주변만 처리하면 배경 노출과 계산량을 줄일 수 있지만, 잘못 자르면 필요한 글자나 기준점을 잃는다. 원본과 잘라낸 영상의 좌표 변환을 기록해야 결과 상자를 원래 위치에 다시 표시할 수 있다. 예를 들어 원본 가로 1,920픽셀에서 x=960부터 오른쪽 부분만 잘랐고 크기는 바꾸지 않았다고 하자. 잘라낸 영상의 x=0은 원본의 x=960이고, 그 영상에서 찾은 x=10은 원본의 960+10=970이다. 잘라낸 위치를 더하지 않고 원본의 x=10에 결과를 표시하면 다른 위치를 가리킨다.
크기 변환은 새 격자에서 픽셀 값을 정하는 일이다. 보간으로 중간 값을 만들 수 있지만 없던 세부 사실이 관측된 것은 아니다. 축소할 때 반복 무늬가 다른 모양처럼 보이는 현상도 있어 적절한 필터·촬영 해상도·라벨 크기를 함께 검토한다. 과도한 선명화나 생성형 복원을 문자 인식 전에 쓰면 실제 없는 획을 만들 수 있다.
밝기·색 변환은 목적에 맞춰 선택한다. 색이 도서 분류의 근거라면 무조건 흑백으로 바꿀 수 없고, 글자의 경계만 필요하면 밝기 표현이 충분할 수 있다. 조명이 바뀌는 문제를 모델 규모 확대로만 해결하지 않고 조명·노출·라벨 배치라는 더 단순한 대안도 비교한다.
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
촬영 표현에서 위치·문자·원장으로 단계별 출력이 바뀐다. 한 단계가 성공해도 다음 단계의 정확성이 증명되지는 않는다. 좌표 변환과 오류는 촬영 조건·사서 정정으로 연결한다.
5. 필터의 값을 직접 계산한다
주변 픽셀을 어떤 비중으로 합할지 나타낸 작은 가중치 배열을 영상 필터의 커널이라고 한다. 각 위치에서 이 배열을 옮기며 주변 값에 곱하고 더한다. 경계 밖 값을 0으로 둘지, 가장자리 값을 반복할지 등에 따라 결과가 달라지므로 경계 처리도 연산 조건이다.
자체 IM-F1의 3×3 밝기 격자는 중앙만 90이고 나머지는 0이다.
0 0 0
0 90 0
0 0 0아홉 값의 평균을 중앙의 새 값으로 쓰면 90/9=10이다. 중앙의 큰 값을 주변과 섞어 완화했다. 같은 아홉 값의 중앙값은 0이다. 중앙의 90이 센서 잡음이었다면 제거가 도움이 될 수 있지만 실제 작은 인쇄점이었다면 정보 손실이다. 어떤 필터도 과제와 무관하게 항상 좋다고 할 수 없다.
상관 연산은 정한 방향의 가중치를 그대로 적용하고, 수학적 합성곱은 가중치 방향을 뒤집어 적용한다. OpenCV의 filter2D는 이름·설명에 convolution이 나와도 실제 계산은 커널을 뒤집지 않는 상관이라고 명시한다.2 대칭 평균 필터에서는 뒤집어도 같지만 비대칭 필터에서는 다르다.
일차원 예로 값 (1,2,4)에 가중치 (−1,0,1)를 그대로 곱하면 −1+0+4=3이다. 뒤집은 (1,0,−1)을 적용하면 1+0−4=−3이다. 둘 다 좌우의 변화와 관련되지만 부호가 다르다. 계산 결과의 의미를 읽을 때 라이브러리 이름보다 실제 연산과 방향을 확인한다.
음수나 255보다 큰 중간 결과를 8비트 영상에 그대로 넣으면 잘릴 수 있다. 차이를 계산할 때에는 적절한 자료형으로 중간 값을 보존하고 표시를 위한 변환과 분석값을 구별한다. 화면에 보기 좋게 바꾼 값을 원래 측정값으로 사용하지 않는다.
6. 고정 필터와 학습하는 특징 추출
합성곱 신경망(CNN)은 국소 영역의 계산을 위치에 걸쳐 공유하면서 특징 표현을 학습하는 신경망 구조다. 「머신러닝·딥러닝·생성형 AI의 층」에서 배운 가중합·활성화가 여러 위치와 채널에 적용된다. PyTorch Conv2d의 공식 식 역시 실제 계산을 상관 연산으로 정의하고 입력·출력 채널과 이동 간격·패딩을 명시한다.3
고정된 평균 필터는 사람이 가중치를 정하지만 학습 가능한 필터의 가중치는 자료와 목표에 따라 조정된다. 특징맵은 각 위치에서 얻은 계산 결과의 배열이다. 여러 층을 통과하며 더 넓은 범위의 관계를 사용할 수 있지만, 각 특징이 반드시 사람이 붙인 이름 하나에 대응하는 것은 아니다.
스트라이드는 필터 위치를 몇 칸씩 옮기는지, 패딩은 입력 가장자리에 계산용 값을 추가하는 방식이다. 이 절에서는 커널 내부 간격을 늘리지 않는 경우만 계산한다. 한 축 입력 길이 W, 커널 길이 K, 양쪽 패딩 각각 P, 스트라이드 S라면 출력 길이는 floor((W+2P−K)/S)+1이다. floor는 소수 부분을 버려 아래 정수로 내리는 연산이다.
출력 수를 작은 예로 세어 보자. 패딩 없는 길이 5에 길이 3의 커널을 한 칸씩 옮기면 1~3번째, 2~4번째, 3~5번째의 세 구간에서 계산한다. 이동할 수 있는 거리는 5−3=2칸이지만 맨 처음 위치도 한 번 계산하므로 2+1=3개다. 두 칸씩 옮기면 1~3번째와 3~5번째의 두 구간이어서 floor(2/2)+1=2개다. 식의 마지막 +1은 이 첫 계산을 포함한다.
W=32, K=3, P=1, S=2에서는 패딩 뒤 길이가 32+2×1=34이고 커널을 뺀 이동 가능 거리는 34−3=31이다. 31/2=15.5에서 완전한 두 칸 이동 15회만 세고 처음 한 번을 더하면 16개다. 따라서 floor(31/2)+1=16이다. 두 축 조건이 같으면 16×16의 위치가 된다. 출력 채널 수나 배치 수는 이 위치 수와 별도로 센다. stride를 크게 하면 계산 위치가 줄지만 작은 라벨과 정밀한 경계의 정보를 잃을 수 있다.
풀링은 작은 영역의 최댓값·평균 등으로 표현을 줄이는 연산이다. 국소 변화에 덜 민감한 표현에 도움이 될 수 있으나 정확한 위치가 필요한 과제에는 손실을 고려해야 한다. CNN 또는 attention 기반 모델을 사용했다는 구조 이름만으로 실제 라벨 검출 성능을 확정하지 않는다.
7. 분류·검출·분할·판독·추적의 출력은 다르다
| 과제 | 원하는 출력 | 도서관의 예 | 놓치기 쉬운 점 |
|---|---|---|---|
| 이미지 분류 | 영상의 범주 | 라벨이 보이는 사진인가 | 라벨 위치와 개수는 미제공 |
| 객체 검출 | 범주와 위치 상자 | 여러 라벨을 각각 찾음 | 겹친 물체·중복 상자·누락 |
| 의미 분할 | 픽셀별 종류 | 라벨 영역과 배경을 나눔 | 같은 종류의 서로 다른 라벨 구별은 별도 |
| 인스턴스 분할 | 개체별 픽셀 영역 | 겹친 라벨 각각의 영역 | 개체 연결과 경계 근거 필요 |
| 문자 판독(OCR) | 문자와 위치 | 관리번호 읽기 | 비슷한 문자·자릿수·훼손 |
| 추적 | 시간에 걸친 개체 연결 | 여러 프레임의 같은 책 연결 | 화면 재등장·가림을 새 사건으로 오인 |
검출 상자가 맞아도 그 안의 관리번호가 틀릴 수 있다. OCR 결과가 맞아도 다른 판본의 도서 기록에 연결하면 업무 오류다. 모델 점수를 곧바로 반납 완료로 바꾸지 않고 식별값·형식·원장과의 대응 및 사서 확인을 거친다.
같은 물체 주변에 여러 상자가 나올 수 있어 점수와 겹침을 이용한 중복 억제를 사용할 수 있다. 이때 가까운 두 개체를 하나로 지우는 오류도 가능하다. 상자 중복제거와 업무 사건의 중복제거는 대상과 기준이 다르므로 구별한다.
8. 따라 계산 IM-D1: 상자의 겹침과 검출 성능
IoU(Intersection over Union)는 두 영역의 교집합 면적을 합집합 면적으로 나눈 값이다. torchvision의 box_iou도 상자 쌍의 이 비율을 반환한다.4 아래는 연속 좌표의 직사각형이며 너비는 오른쪽x−왼쪽x로 계산한다. 정수 픽셀의 포함 구간을 세는 다른 관례를 섞어 1을 더하지 않는다.
정답 상자 A=(0,0,4,4), 예측 상자 B=(2,0,6,4)라 하자. 좌표 순서는 왼쪽 x·위 y·오른쪽 x·아래 y다. 각 면적은 16, 겹치는 면적은 가로 2×세로 4=8이다. 합집합은 16+16−8=24이므로 IoU=8/24=1/3이다.
B를 (1,0,5,4)로 바꾸면 겹침 12, 합집합 20, IoU=0.6이다. 이 예제의 대응 인정 기준이 같은 범주·IoU 0.5 이상이라면 첫 상자는 기준에 못 미치고 둘째는 만족한다. 0.5는 교육용으로 지정한 기준이지 모든 과제의 법정·공식 합격선이 아니다.
별도 IM-D2는 실제 라벨 20개와 예측상자 22개를 정한 규칙으로 일대일 대응시킨 결과 16개가 맞았다고 가정한다. 정답 하나에 여러 예측을 중복 정답으로 세지 않는다. 참양성 16, 잘못된 예측 6, 놓친 라벨 4다.
정밀도는 16/22≈72.73%, 재현율은 16/20=80%다. 분모가 예측수인지 실제 대상수인지 다르다. 이 수치로 전체 도서 업무 정확도나 OCR 문자 정확도를 알 수 없다. 여러 점수 경계의 정밀도·재현율을 종합하는 AP, 여러 범주의 평균인 mAP를 보고하려면 그 평가 정의와 충분한 결과가 별도로 필요하다.
9. 영상 수보다 독립적인 대상과 조건을 확인한다
같은 책을 연속 촬영한 100장을 학습 90장·시험 10장으로 무작위 분리하면 시험이 지나치게 쉬울 수 있다. 물리적 책·라벨, 촬영 장소·시간·기기와 실제 이용 조건을 고려해 분리한다. 이미지 증강 기법으로 회전·밝기를 바꿔도 원본 하나에서 나온 자료가 서로 독립적인 물체가 되지는 않는다.
촬영 조건별 실패를 구별한다. 반사·가림·작은 글자·색 바뀜·새 라벨·미등록 도서를 포함하고, 확인할 수 없는 경우에는 보류하도록 한다. 낯선 책을 자신 있게 기존 책으로 확정하는 오류와 아예 인식을 거절한 경우의 업무 비용은 다르다.
IM-G1은 라벨 위치와 문자 초안을 사서에게 제시하는 보조안이다. 촬영 담당은 조명·거리·해상도를, 데이터 담당은 정답 상자·문자·대상 분리를, 개발 담당은 전처리·모델·임계값·좌표를, 사서는 원장 대조·보류·정정을 맡는다. 불필요한 주변 인물과 개인정보를 촬영·기록하지 않는 범위를 먼저 정한다.
원천영상·처리영상·예측상자·문자·원장 대조 결과의 필요한 연결을 남기고 자료의 접근·보존을 제한한다. 실제 사용 전 정상·겹침·반사·회전·재시도·미등록·촬영실패를 평가한다. 작은 글자를 생성형 선명화로 꾸민 뒤 확정하는 안과 높은 검출률만으로 반납을 자동 완료하는 안은 기각한다.
10. 자체 10점 문제와 완성 답안
IM-B1의 데이터량과 IM-D1·D2의 검출 지표를 계산하고 영상처리 결과의 한계를 설명하시오.
RGB 8비트의 픽셀당 바이트와 제외 항목을 먼저 적는다. IoU에서는 연속좌표 관례로 면적을 계산하고 검출 지표에서는 실제 20·예측 22·일대일 정답 16을 분리한다.
10점 자체 연습의 구성과 완성 답안
목차: 표현·단위 → 원시 데이터량 → 위치 대응·분모 → 업무 판단의 한계.
원 가로 그림의 배율은 1단위 64 px, 위 모바일 그림은 1단위 32 px입니다.
넓은 화면에서는 두 겹침을 나란히, 좁은 화면에서는 같은 척도의 두 그림을 위아래로 비교합니다. 좌표·면적·IoU의 조건은 같습니다.
IM-D1의 연속좌표 직사각형이다. 모든 축에서 1단위는 같은 64화소이며 y는 아래로 증가한다. 교집합÷합집합을 비교하고 정수 픽셀 포함구간의 +1을 넣지 않는다.
| 계산·판단 단계 | 같은 조건에서 확인할 값 |
|---|---|
| 픽셀·채널·비트 → 데이터량 | IM-B1 원시 픽셀량; 압축·헤더·전송 부가정보 제외 |
| 전처리·검출 → 위치 대응 | IM-D1 연속좌표의 IoU, 일대일 대응 |
| 검출 지표 | IM-D2 정밀도 16/22≈72.73%, 재현율 16/20=80% |
| 업무 판단 | OCR·원장·사서 확인은 별도 검사 |
완성 답안
1,920×1,080의 RGB 8비트 영상은 픽셀당 3바이트이므로 한 장 6,220,800바이트, 6.2208 MB다. 초당 30장이면 186.624 MB/s, 약 1.493 Gbps의 원시 픽셀량이다. 압축 파일·헤더·전송 부가정보를 제외한 계산이므로 실제 회선의 소요량과 동일시하지 않는다.
A=(0,0,4,4), B=(2,0,6,4)는 면적 16씩, 겹침 8, 합집합 24로 IoU 1/3이다. B가 (1,0,5,4)이면 12/20=0.6으로 예제의 0.5 기준을 만족한다. IM-D2의 실제 20·예측 22·일대일 정답 16에서 정밀도 72.73%, 재현율 80%다.
상자 검출은 문자 판독·도서 식별·반납 완료와 다르다. 촬영·색 순서·좌표·필터에 따른 정보 손실과 새 대상의 오류를 확인하고 보류·사서 대조를 둔다. 보기 좋은 영상이나 높은 단일 지표가 전체 업무의 정확성을 보장하지 않는다.
11. 자체 25점 문제와 완성 설계 답안
반납 도서의 라벨 판독 보조 IM-G1을 표현·처리·모델·평가·운영 관점에서 설계하시오.
촬영과 채널·좌표의 의미부터 일치시킨 뒤 라벨 위치·문자·원장 대응의 실패를 각각 적는다. 보간이나 생성한 획을 실제 관측한 문자 근거로 삼지 않는다.
25점 자체 연습의 설계 과정과 완성 답안
구성 과정: 카메라와 모델을 바로 잇지 않는다. 실제 대상에서 숫자 표현을 거쳐 업무 결론에 이르는 단계와 각 단계의 실패를 설명한다.
책·라벨에서 촬영·전처리·검출·OCR·원장·사서 확인으로 이어지는 그림을 사용한다. 사서 확인·보류와 평가 결과는 촬영조건·오류·정정으로 되돌아가 다음 입력과 처리 조건을 바꾼다. 상자·문자·최종 업무의 성공을 각각 구분한다.
완성 설계 답안
IM-G1은 반납 도서의 관리 라벨 위치와 문자 초안을 사서에게 제공하며 개인 대출정보·얼굴 촬영과 자동 반납 확정은 제외한다. 조명·거리·반사를 먼저 정리하고 영상의 가로·세로·채널·비트 깊이·방향을 고정한다. 색과 좌표 형식을 모델 입력과 맞추고 촬영 실패를 빈 영상의 정상 처리로 바꾸지 않는다.
촬영·디코딩 이후 필요한 영역을 추출하고 크기·밝기·잡음 처리를 적용한다. 원본과 처리영상의 좌표 변환을 유지한다. 필터는 잡음 완화와 작은 문자 소실을 함께 비교하며 근거 없는 생성형 복원을 판독 증거로 사용하지 않는다. 영상 위치 검출, OCR, 관리번호 형식·원장 대조, 사서 확인을 별도 단계로 둔다.
데이터 담당자는 물리적 도서·라벨·촬영조건을 기준으로 학습과 평가를 분리한다. 개발 담당자는 전처리·모델·임계값과 일대일 대응 규칙을 고정한다. 평가에는 정상·겹침·반사·회전·작은 라벨·미등록 도서를 포함하고 IoU, 검출 정밀도·재현율, 문자 오류, 최종 식별과 보류의 부담을 구별한다.
IM-B1의 원시 입력량을 바탕으로 메모리·처리율·보관을 검토하되 실제 압축·전송·지원 비용을 별도로 측정하도록 계획한다. 축소가 비용을 줄여도 라벨의 판독 가능성을 유지하는지 확인한다. IM-D2의 정밀도 72.73%·재현율 80%는 제한된 검출 결과이며 전체 업무 승인값으로 확대하지 않는다.
운영자는 판본·촬영조건·오류·정정·미등록 상태를 관찰하고, 사서는 불명확한 결과를 직접 대조한다. 입력 품질 저하·좌표 불일치·과도한 오식별·불필요한 개인정보 촬영에서는 해당 자동 처리를 중단한다. 원천·예측·판정의 필요한 증거만 접근과 보존을 제한해 관리하고, 조건 변경 때 영향 있는 평가를 다시 수행한다.
12. 자기교정
| 오답 | 이유 | 수정 예 | 복습 |
|---|---|---|---|
| 컬러 첫 채널은 언제나 빨강이다 | RGB/BGR 순서가 다를 수 있음 | 입력·모델의 채널 순서 확인 | 표현 |
| JPEG 파일은 반드시 6.2208 MB다 | 원시 픽셀과 압축 파일 혼동 | 계산의 압축·헤더 제외 조건 명시 | 용량 |
| 가로·세로 절반이면 용량도 절반이다 | 면적은 두 축의 곱 | 같은 채널에서 4분의 1 | 용량 |
| 평균 필터는 실제 작은 글자도 보존한다 | 잡음과 유효한 점이 구별되지 않음 | IM-F1의 90→10과 과제 손실 확인 | 필터 |
| filter2D는 항상 뒤집힌 커널이다 | 공식 계산은 상관 | 비대칭 가중치의 3/−3 구별 | 필터 |
| 검출 성공은 문자·반납 성공이다 | 서로 다른 단계의 출력 | 위치·문자·원장·사서 확인 분리 | 과제 |
| 예측 22개 중 16개 정답이니 재현율72.73%다 | 실제 대상 20과 예측 22 혼동 | 정밀도 72.73%, 재현율 80% | 평가 |
| 연속 프레임을 나누면 독립 시험이다 | 같은 물체·환경의 중복 | 물리적 대상·조건 기준 분리 | 검증 |
조건 변경
해상도를 960×540으로 줄이면? 한 장 1,555,200바이트로 4분의 1이다. 문자 정보가 유지되는지 별도 확인하며 계산량 감소를 판독 개선으로 쓰지 않는다.
예측이 25개, 일대일 정답이 16개로 바뀌면? 실제 대상 20개가 같다면 정밀도 64%, 재현율 80%다. 잘못된 예측은 9개가 되어 확인 부담이 늘 수 있다.
같은 영상의 오른쪽 절반만 잘랐다면? 잘라낸 영상의 x=0은 원본 x=960에 대응한다. 단순 자르기이며 추가 크기 변환이 없다는 조건에서 x좌표에 960을 더해 되돌린다. 축소·회전까지 했다면 그 변환도 함께 적용한다.
독립 확인: 자른 영상을 다시 축소했을 때
원본에서 x=960부터 오른쪽 영역을 자른 뒤 가로·세로를 각각 1/2로 줄였다. 처리 영상에서 검출한 x=10을 원본의 x로 되돌린다. 추가 회전은 없고 같은 좌표 기준을 쓴다. 실제 20·예측 25·일대일 정답 16의 두 검출 지표도 계산한다.
변경 조건의 완전한 풀이와 오답 교정
처리 x=10은 축소 전 잘라낸 영역에서 10÷0.5=20이다. 원본은 자른 시작 960을 더한 980이다. 970은 크기 변환을 빠뜨린 답이고 20은 원본 시작 위치를 빠뜨린 답이다. 정밀도 16/25=64%, 재현율 16/20=80%다. 잘못된 예측 9개와 놓친 라벨 4개는 다른 오류다. 좌표를 바르게 되돌렸거나 상자를 대응시켰다는 사실로 OCR 문자·원장·반납까지 성공했다고 쓰지 않는다.
답안을 닫고 비압축 6.2208 MB와 JPEG 파일 크기, 평균 10과 중앙값 0, 상관 3과 합성곱 −3을 각각 다른 계산 조건으로 설명한다. 커널·CNN의 입력 범위·연산 순서·출력 크기가 바뀌면 같은 답을 쓸 수 없는 이유도 설명한다.
2026-10-05 Torchvision box_iou 공식 문서의 반환 의미와 기본 xyxy 형식을 대조했다. 열람 표제는 0.29이며 기존 2026-09-20 관찰이나 다른 라이브러리 설치 결과를 갱신한 것이 아니다.
근거와 범위
모든 표·도식·계산·문제·답안은 자체 교육용이다. 실제 촬영·영상처리·모델 시험·인식·시각 렌더·독립 검수를 수행하지 않았다.
회독의 핵심
픽셀의 수와 뜻을 알고 촬영·변환·인식·업무결론을 연결한다. 작은 필터 계산과 영역 겹침으로 원리를 확인하되 한 단계의 지표를 전체 정확도로 바꾸지 않는다. 원본 조건·판본·실패·보류·정정까지 있어야 쓸 수 있는 영상 시스템이다.
보강 연습 1: 픽셀량과 실제 행 저장 간격은 다를 수 있다
자체 입력은 가로 641·세로 480, BGR, 채널당 8비트다. 행 시작을 4바이트 배수에 맞추고, 각 행의 끝에 필요한 패딩 바이트를 둔다. 헤더·압축·추가 버퍼는 제외한다. 실제 데이터 픽셀 하나의 BGR 값은 (10,20,250)이다.
패딩 없는 픽셀량과 행 패딩을 포함한 버퍼량을 각각 구하라. 이 픽셀을 RGB 입력으로 바꾸는 값도 적어라. RGB의 빨강 값에 밝기 보정 20을 더한 뒤 0~255로 제한하려는데, 8비트에서 넘친 값을 그대로 사용하는 안을 판단하라.
행 간격·채널 순서·중간 자료형을 확인하는 완전한 풀이
한 행의 실제 픽셀 값은 641×3=1,923바이트다. 다음 4바이트 배수는 1,924이므로 행마다 패딩 1바이트를 둔다. 패딩 없는 값은 1,923×480=923,040바이트, 저장 버퍼는 1,924×480=923,520바이트다. 차이 480바이트는 480행의 패딩이다. 다음 행의 시작을 찾을 때에는 가로×채널 수만 더하지 않고 정해진 행 간격 1,924를 사용한다. 모든 라이브러리가 이 정렬 규칙을 쓰는 것은 아니다.
BGR (10,20,250)을 RGB로 해석할 때는 순서를 바꿔 (250,20,10)을 전달한다. 배열의 행·열과 채널 순서는 별도 조건이다. OpenCV의 기본 영상 연산 설명은 일반적인 BGR 입력을 다루며, 이 사례의 행 정렬을 정하는 규격은 아니다.
빨강 보정의 중간값은 250+20=270이고 정한 제한 결과는 255다. 넘침을 모듈로 256으로 처리해 14가 된 값을 사용하면 ‘더 밝게’라는 의도와 다른 숫자를 만든다. 충분한 범위의 중간 자료형에서 계산한 뒤 명시한 제한·변환을 적용한다. 실제 연산이 포화인지 순환인지 오류인지도 사용하는 함수별로 확인한다. Python 3의 다음 코드는 자체 저장 계약과 정수 산술을 확인하며 영상을 처리하지 않는다.
width, height, channels, alignment = 641, 480, 3, 4
row_bytes = width * channels
stride = ((row_bytes + alignment - 1) // alignment) * alignment
bgr = (10, 20, 250)
rgb = (bgr[2], bgr[1], bgr[0])
intermediate = rgb[0] + 20
clamped = min(255, max(0, intermediate))
print(f"픽셀량={row_bytes * height}, 버퍼량={stride * height}, 행간격={stride}")
print(f"RGB={rgb}, 제한값={clamped}, 순환값={intermediate % 256}")출력은 픽셀량=923040, 버퍼량=923520, 행간격=1924와 RGB=(250, 20, 10), 제한값=255, 순환값=14다. 실제 JPEG 파일 크기·모델 입력 버퍼의 별도 복사량은 이 산술에 포함하지 않았다.
보강 연습 2: 자르기·축소·여백을 모두 되돌린 상자를 구한다
원본 1,920×1,080에서 왼쪽 위 (480,270)을 시작으로 960×540 영역을 잘랐다. 이를 640×360으로 같은 비율로 축소하고, 위·아래에 각각 140의 여백을 붙여 640×640 입력을 만들었다. 회전은 없으며 모든 상자는 (왼쪽x, 위y, 오른쪽x, 아래y)의 연속 좌표다.
모델 입력에서 상자 (64,152,192,224)를 찾았다. 원본 좌표로 되돌려라. 상자 (64,120,192,130)가 나오면 같은 방식으로 업무에 사용해도 되는지 설명하라.
마지막 변환부터 역순으로 되돌리는 완전한 풀이
첫 상자에서 위 여백 140을 빼면 축소 영상의 (64,12,192,84)다. 축소 비율은 640/960=360/540=2/3이므로 각 좌표에 3/2를 곱해 잘라낸 영역의 (96,18,288,126)을 얻는다. 원본 시작 (480,270)을 더하면 (576,288,768,396)이다. 너비는 192, 높이는 108로 축소 상자의 128×72에 3/2를 곱한 값과도 맞는다.
여백을 빼기 전에 원본 시작점을 더하거나, y에 140을 두 번 적용하면 다른 영역을 가리킨다. 연속 좌표이므로 너비·높이에 +1을 더하지 않는다. Python 3의 아래 코드는 좌표 산술만 확인하며 검출·보간·라이브러리 변환을 실행하지 않는다.
box = (64, 152, 192, 224)
scale = 640 / 960
left, top, right, bottom = box
original = (
left / scale + 480,
(top - 140) / scale + 270,
right / scale + 480,
(bottom - 140) / scale + 270,
)
assert original == (576.0, 288.0, 768.0, 396.0)
print(f"원본상자={original}")둘째 상자의 y=120~130은 전부 위 여백 영역이다. 원본의 관측한 라벨 영역에 대응하지 않으므로 단순 역변환 값을 실제 라벨 위치로 사용하지 않는다. 실제 영상 영역은 입력 좌표의 y=140~500이다. 영상과 여백을 걸친 상자는 영상 영역과의 교집합을 구한 뒤 면적·과제 규칙을 확인하고, 교집합이 없거나 필요한 문자가 잘렸으면 보류한다. 상자가 잘렸다는 사실도 기록한다.
좌표가 맞아도 OCR·원장 연결·사서 확인이 자동으로 맞지는 않는다. 기존 촬영에서 업무 판단까지의 경계를 그대로 적용한다.
보강 연습 3: 중복 상자와 문자 오독이 같은 평가를 만드는가
실제 라벨 T1=(0,0,4,4)·관리번호 B001, T2=(5,0,9,4)·관리번호 B002가 있다. 세 예측은 모두 라벨 범주이며 점수 0.8 이상이다. 점수가 높은 순서로, IoU 0.5 이상인 아직 대응되지 않은 정답 하나와만 연결하는 자체 평가 규칙을 쓴다. 이 예에서는 대응 후보가 둘 이상인 경우가 없다.
| 예측 | 점수 | 상자 | OCR 초안 | 원장 확인 |
|---|---|---|---|---|
| P1 | 0.95 | (0,0,4,4) | B007 | 문자는 형식에 맞지만 실제 T1과 다름 |
| P2 | 0.90 | (1,0,5,4) | B001 | T1 주변의 중복 예측 |
| P3 | 0.85 | (5,0,9,4) | B002 | 같은 번호의 기록이 둘이라 식별 미확인 |
검출의 참양성·잘못된 예측·놓친 라벨, 정밀도·재현율을 구하라. 검출 대응에 사용된 예측만 대상으로 관리번호 전체가 정확한 OCR의 비율을 구하고, 자동 반납 완료를 정할 수 있는지 설명하라.
일대일 위치 대응과 후속 문자·원장 검사를 나누는 완전한 풀이
P1은 T1과 IoU 1로 먼저 대응한다. P2는 T1과 IoU 0.6이지만 T1이 이미 대응됐으므로 또 정답으로 세지 않는다. T2와는 경계 x=5에서만 닿아 교집합 면적이 0이다. P3은 T2와 IoU 1로 대응한다. 따라서 참양성 2, 잘못된 예측 1, 놓친 라벨 0이고 정밀도는 2/3≈66.67%, 재현율은 2/2=100%다.
검출 대응 예측 P1·P3의 OCR 전체번호 정확성은 P1 오독·P3 정확으로 1/2=50%다. P2의 B001을 끼워 넣어 2/2라고 쓰면 지정한 OCR 평가 대상을 바꾼다. 중복 후보를 활용하는 다른 OCR 보완안을 평가하려면 별도의 후보 선택·문자 평가 규칙으로 검증한다. 한 점수 경계의 2/3과 100%만으로 AP·mAP도 확정할 수 없다.
P1은 위치가 맞지만 잘못된 번호이고, P3은 번호가 맞지만 원장 연결이 미확인이다. 둘 다 현재 증거로 자동 반납 완료를 확정하지 않는다. 원장 식별 충돌의 원인과 실제 대상 기록을 사서가 확인하고 정정·보류해야 한다. 같은 실제 라벨의 여러 예측을 중복 정답으로 세지 않는 기준은 검출 평가의 조건이고, 반납 사건을 한 번만 처리하는 기준은 업무 상태의 별도 조건이다.
Torchvision의 box_iou 설명은 상자 쌍의 IoU 값을 다룬다. 위의 점수순 일대일 대응, 0.5 기준, OCR 평가 집합, 반납 보류는 이 연습이 정한 규칙이다. 라이브러리 함수가 업무 승인까지 수행한다고 해석하지 않는다.
Footnotes
-
OpenCV, Basic Operations on Images, 4.10.0판의 행·열 접근과 BGR·관심영역 설명. https://docs.opencv.org/4.10.0/d3/df2/tutorial_py_basic_ops.html . 2026-09-20 공식 검색에 노출된 해당 정의를 확인했다. 전체 페이지 직접 열기는 403으로 제한됐으며 원문의 사진·코드 예제를 복제하지 않았다. ↩
-
OpenCV, Image Filtering, 4.5.3판 filter2D의 상관·커널 방향·경계 설명. https://docs.opencv.org/4.5.3/d4/d86/group__imgproc__filter.html . 해당 정의를 공식 검색 결과에서 대조했다. 이 판본을 최신 릴리스라고 표시하지 않으며 IM-F1은 별도 자체 수치다. ↩
-
PyTorch, Conv2d, 공식 연산 정의·Shape·stride/padding. https://docs.pytorch.org/docs/stable/generated/torch.nn.Conv2d.html . 2026-09-20 연결된 2.13 문서의 필요한 식을 확인했다. API 실행이나 해당 버전 설치 결과가 아니다. ↩
-
Torchvision, box_iou, 공식 IoU·상자 좌표 설명. https://docs.pytorch.org/vision/stable/generated/torchvision.ops.box_iou.html . 2026-09-20 확인. IM-D1/D2의 기준·정수·답안은 자체 작성이며 공식 벤치마크 결과가 아니다. ↩