기초가 전혀 없어도 컨볼루션 신경망의 원리를 이해할 수 있습니다! 매우 상세합니다!
저자처럼 기술을 사랑하고 AI에 큰 관심을 갖고 있는 친구들은 컨볼루션 신경망에 대해 잘 알고 있을 것이고, 이런 '고급' 이름에 오랫동안 헷갈려 했을 거라 믿습니다. 저자는 오늘 처음부터 컨볼루셔널 신경망의 세계로 들어가겠습니다~ 모두와 공유해보세요!
컨벌루션 신경망에 대해 알아보기 전에 먼저 이미지의 원리를 살펴보겠습니다.
이미지 원리
이미지는 컴퓨터에서 숫자(0-255)로 표시됩니다. 각 숫자는 이미지에 있는 픽셀의 밝기 또는 색상 정보를 나타냅니다. 그중에는:
- 흑백 이미지: 각 픽셀에는 하나의 값만 있으며 이 값은 0(검은색)에서 255(흰색) 사이입니다.
- 색상 이미지: 각 픽셀에는 세 가지 값이 포함되어 있으며 가장 일반적인 것은 RGB(Red-Green-Blue) 모델입니다. 즉, 빨간색, 녹색 및 파란색 빛이 서로 다른 강도로 결합되어 다양한 색상을 생성합니다. 각 색상 채널에는 0부터 255까지 256개의 밝기 레벨이 있으므로 각 색상은 8비트 이진수로 표현될 수 있습니다. 예를 들어 (255,0,0)은 빨간색을 나타내고, (0,255,0)은 녹색을 나타내고, (0) ,0,255)는 파란색을 나타내며, 그 외의 조합은 다양한 색상에 해당됩니다. 컴퓨터에서 컬러 이미지의 데이터 구조는 일반적으로 (너비, 높이, 깊이) 모양의 3차원 배열 또는 텐서입니다. 여기서 깊이는 채널 수입니다. RGB 이미지의 경우 깊이는 3입니다. 즉, 각 픽셀 위치에는 빨간색, 녹색, 파란색 세 채널의 밝기를 나타내는 세 가지 값이 있습니다. 예를 들어, 100*100픽셀 RGB 이미지는 100x100x3바이트의 메모리를 차지합니다.
"여기서 "8비트 이진수"를 어떻게 이해합니까?"
RGB 색상 모델에서 각 색상 채널(빨간색, 녹색, 파란색)은 256개의 서로 다른 밝기 레벨을 가질 수 있습니다. 8비트 이진수 표현을 나타냅니다. 8비트 이진수의 최대값은 11111111이며, 10진수로 변환하면 최소값은 00000000입니다.
컨벌루션 신경망 CNN이란 무엇인가요?
CNN이 이력서에 잘 알려진 지원 시나리오를 보도했습니다. 아래 그림과 같이 원래 이미지 크기를 10x10으로 하면 왼쪽 절반은 더 큰 픽셀 값을 가지며 밝은 영역이고 오른쪽 절반은 더 작은 픽셀 값을 가지며 깊이 영역입니다. 중앙의 구분선이 감지할 에지입니다.
"그럼 가장자리를 어떻게 감지하나요?" 이때 아래 그림과 같이 필터(커널이라고도 함)가 나타나는데 커널 크기는 3x3입니다.
필터는 입력 이미지 위로 슬라이드되어 각 영역에서 잠시 멈추고 해당 요소를 곱하고 추가한 다음 원본 이미지의 마지막 영역으로 슬라이드할 때까지 다른 영역으로 슬라이드하여 계산을 계속합니다. 이 과정을 "컨볼루션"이라고 합니다.
위 그림에서 볼 수 있듯이 출력 결과는 가운데 부분이 밝은 색, 양쪽 부분이 어두운 색으로 나타나 원본 이미지의 경계가 무너졌음을 나타냅니다. 반영. "그러므로 입력 이미지와 해당 필터의 컨볼루션 연산을 통해 가장자리 감지가 인식된다는 결론을 내릴 수 있습니다." 스트라이드가 1이라는 것은 한 프레임을 슬라이드할 때마다 총 8x8 영역에 머무르게 되므로 최종 출력 결과는 8x8 매트릭스가 된다는 의미입니다.
"그렇다면 컨볼루션 신경망이란 정확히 무엇일까요?"
위에서 에지 검출의 특정 타겟 검출 시나리오를 분석한 후에 CNN(Convolutional Neural Network)이 다양한 필터를 지속적으로 사용한다는 것을 이해하는 것은 어렵지 않습니다. 로컬에서 전체까지 이미지 특징을 추출한 다음 대상을 식별합니다.
신경망에서 이러한 필터의 각 숫자는 매개변수이며, 이는 대량의 데이터로 훈련(즉, 딥러닝 과정)을 통해 얻을 수 있습니다.
CNN의 기본 개념
1. 컨볼루션(Convolution)
(1) 컨볼루션 계산컨볼루션은 수학적 분석에서 통합 변환 방법으로, 이미지 처리에 사용되는 컨볼루션의 이산형입니다. 컨벌루션 신경망 CNN에서 컨벌루션 계층의 구현은 본질적으로 수학에서 정의하는 상호상관 계산(cross-correlation)이다. 구체적인 계산 과정은 아래 그림과 같습니다.
그 중:
그림 (a): 왼쪽 그림의 크기는 3×3으로, 입력 데이터가 3×3 차원의 2차원 배열임을 나타냅니다. 가운데 그림의 크기는 2×2로, 2차원 배열임을 나타냅니다. - "컨볼루션 커널"이라고도 알려진 2×2 차원의 배열입니다. 컨볼루션 커널의 좌측 상단을 입력 데이터의 좌측 상단(0,0)에 정렬하고, 두 개의 해당 위치 데이터를 곱한 후 더하여 컨볼루션 출력(25)의 첫 번째 결과를 얻는다.
유추하자면, 그림 (b), (c), (d)는 각각 컨볼루션 출력의 두 번째, 세 번째, 네 번째 출력 결과입니다.
(2) 이미지 컨볼루션 연산
그렇다면 이미지 컨볼루션 연산이란 정확히 무엇일까요? 아래 그림과 같이 컬러 이미지 컨볼루션 과정이 표시됩니다.
컬러 이미지의 채널 1(빨간색), 채널 2(녹색), 채널 3(파란색)에는 각각 Kernel1, Kernel2 및 Kernel3을 사용합니다. 각 컨볼루션 커널은 해당 단색 이미지를 슬라이드하고, 각 위치의 작은 영역(커널 크기) 내의 픽셀 값과 컨볼루션 커널의 해당 요소에 대해 점별 곱셈 연산을 수행한 후 이러한 결과를 추가합니다. 값. 그런 다음 각 채널에서 얻은 값을 추가하고 전체 편향을 추가하여 해당 기능 맵에서 값을 얻습니다.
3차원 효과는 아래 그림과 같습니다.
2.Padding
위에서 언급한 가장자리 감지의 예를 보면 원본 이미지 크기가 10x10이고 필터링한 후에는 8x8. 또 다른 컨볼루션 작업을 수행하면 6x6이 됩니다... 이 경우 두 가지 단점이 있습니다.
- 컨볼루션 작업을 수행할 때마다 출력 이미지 크기가 줄어듭니다.
- 모서리의 픽셀이 줄어듭니다. 또는 가장자리 영역은 출력에서 덜 사용됩니다. 따라서 이미지의 가장자리 위치에 대한 많은 정보를 잃기 쉽습니다.
아래 그림과 같이 왼쪽 상단 모서리에 있는 빨간색 그림자는 하나의 출력에만 닿는 반면, 중간 픽셀(보라색 상자로 표시)에는 겹치는 3x3 영역이 많이 있습니다. 따라서 모서리나 가장자리 영역의 픽셀은 출력에서 덜 사용되며 이미지의 가장자리 위치에 대한 많은 정보를 잃기 쉽습니다.
이 문제를 해결하기 위해 일반적으로 컨볼루션 작업 전에 원본 이미지의 가장자리를 픽셀 레이어로 채웁니다. 크기는 12x12이고 볼륨 곱셈 후의 이미지 크기는 원본 이미지와 동일한 크기인 8x8입니다. 이를 통해 원본 이미지의 가장자리 영역에 있는 픽셀을 여러 번 사용할 수 있습니다.
채울 픽셀 수를 선택하세요. 일반적으로 두 가지 옵션이 있습니다.
- 동일 컨볼루션: 위에서 언급한 것처럼 채우기 및 컨볼루션 후의 이미지 크기는 원본 이미지와 동일합니다.
- 유효한 컨볼루션: 채우기 작업 없음, 직접 컨볼루션.
3.stride
스트라이드 개념은 서문에서 언급했는데, 원본 이미지에서 필터 필터의 각 슬라이드의 가로, 세로 방향 길이를 나타내는 것으로, 스텝 길이라고도 합니다.
s는 보폭 길이, p는 패딩 길이, 원본 이미지 크기는 nxn, 필터 크기는 fxf라고 가정하면 컨볼루션된 이미지 크기는 다음과 같습니다.
4풀링의 본질. 풀링 차원 축소입니다.
컨벌루션 네트워크에서 풀링 계층의 역할: 특징 맵의 매개변수 양을 줄이고, 계산 속도를 높이고, 수용 필드를 늘리는 것, 즉 다운샘플링 작업입니다.
객체 감지에 일반적으로 사용되는 풀링: 최대 풀링 및 평균 풀링.
(1) Max pooling은 컨볼루션 연산 없이 필터 슬라이딩 영역 내에서 최대값을 취하는 것을 의미합니다. 숫자가 크다는 것은 특정 기능이 감지되고 다른 값은 무시되어 노이즈의 영향을 줄이고 모델 견고성을 향상시킬 수 있음을 의미합니다. "게다가 Max pooling에 필요한 하이퍼파라미터는 필터 크기 f와 보폭 s뿐입니다. 다른 매개변수를 학습할 필요도 없고 계산량이 적습니다.
즉, 필터에서 필터 슬라이딩 영역 내의 평균값을 계산합니다.
5.Shape
다차원 데이터, 특히 이미지 데이터를 다룰 때 Tensorflow와 Pytorch 데이터 Shape에는 차이가 있습니다.
TensorFlow:(batch_size, height, width, in_channels)- Pytorch:(batch_size, in_channels, height, width)
- 여기서:
- batch_size: 일괄 처리되는 샘플 수입니다.
- in_channels: 입력 이미지의 채널 수, 컬러 이미지의 경우 일반적으로 3(빨간색, 녹색, 파란색)입니다.
- 높이와 너비는 각각 이미지의 높이와 너비입니다.
위 그림과 같이:
- 입력 이미지 모양: [높이, 너비, 채널], 즉 [8,8,3], 3채널(R, 지, 비).
- 컨볼루션 커널 모양: [kernel_height, kernel_width, in_channels, out_channels], 즉 [3,3,3,5], 3개 채널(R, G, B), 출력 채널이 있는 3x3 컨볼루션 커널을 나타냅니다. 숫자는 다음과 같습니다. 5.
- 출력 이미지 모양: [height, width, out_channels], 즉 [6,6,5], 5개 채널(R, G, B)이 있는 6x6 출력 이미지를 나타냅니다.
out_height = (height - kernel_height + 1) / strideout_width = (width - kernel_width + 1) / stride
8x8 이미지와 3x3 컨볼루션 커널의 경우 출력 크기는 (8 - 3 + 1) / 1 = 6이므로 출력 모양은 [6, 6, 5]이며, 이는 5개의 출력 채널이 있는 6x6 기능 맵을 나타냅니다. .
컨볼루션 커널의 입력 채널 수(in_channels)는 입력 이미지의 채널 수에 따라 결정됩니다. 예를 들어 RGB 형식 이미지의 입력 채널 수는 3입니다.
출력 매트릭스의 채널 수(out_channels)는 컨볼루션 커널의 출력 채널 수, 즉 컨볼루션 커널에 포함된 필터 수에 따라 결정됩니다. 이 예에서 컨벌루션 커널에는 5개의 필터가 있으므로 출력에는 5개의 채널이 있습니다.
6. 활성화 기능
모든 매핑 관계가 선형 관계로 정확하게 표현될 수 있는 것은 아닙니다. 따라서 비선형 매핑을 표현하려면 활성화 함수가 필요합니다.
활성화 함수도 비선형 매핑입니다. 신경망이 선형 연산으로만 쌓이면 복잡한 표현 공간을 형성할 수 없고, 높은 의미 정보를 추출하기 어렵기 때문에 비선형 매핑 관계를 추가할 필요가 있습니다.
(1) 시그모이드 함수
시그모이드 함수는 특성을 (0,1) 간격으로 압축합니다. 0 끝은 금지 상태이고 1 끝은 활성화 상태입니다. 중간 부분의 그라데이션이 가장 큽니다.
(2) Relu 함수
ReLU(Rectified Linear Unit). 일반적으로 Vanishing Gradient 현상을 완화하는 데 사용됩니다.
0보다 작은 부분에서는 값과 기울기가 0이고, 0보다 큰 도함수는 1이므로 시그모이드 함수에서 기울기가 0에 가까워서 발생하는 기울기 소멸 문제를 방지할 수 있습니다.
(3) Softmax 함수
여러 객체 범주에 더 일반적으로 사용되는 분류자는 Softmax 함수입니다.
특정 분류 작업에서 Softmax 함수의 입력은 종종 여러 범주의 점수이고 출력은 각 범주에 해당하는 확률이며 모든 범주의 확률 값은 0에서 1 사이입니다. 합계는 1입니다.
Softmax 함수 공식은 다음과 같습니다.
여기서 Vi는 i번째 범주의 점수를 나타내고 C는 분류된 전체 범주 수를 나타내며 출력 Si는 i번째 범주의 확률입니다.
CNN 전체 구조
컨볼루션 신경망 CNN은 입력 계층, 컨볼루션 계층, Relu, 풀링 계층, 완전 연결 계층 및 출력 계층으로 구성됩니다.
아래 그림에 표시된 것처럼 컨벌루션 네트워크의 예는 컨벌루션 네트워크의 첫 번째 계층이고 그 다음에는 다른 컨벌루션 계층 또는 풀링 계층이 있으며 마지막 계층은 완전 연결 계층입니다. 이후 레이어는 이미지의 더 큰 부분을 식별하고 이전 레이어는 일반적으로 간단한 기능(예: 색상 및 가장자리)에 중점을 둡니다. 이미지 데이터가 CNN의 레이어를 통해 진행되면서 결국 의도한 객체를 식별할 때까지 객체의 더 큰 요소나 모양을 식별하기 시작합니다.
그 중:
- 입력 레이어: 원본 이미지 데이터를 네트워크에 대한 입력으로 받습니다.
- 컨볼루션 레이어: 필터와 활성화 기능으로 구성됩니다. CNN의 주요 기능은 샘플 특징을 추출하는 것입니다. 입력 데이터, 필터(또는 컨볼루션 커널) 및 기능 맵으로 구성됩니다. 입력 데이터가 RGB 이미지인 경우 입력이 높이, 너비, 깊이의 3차원을 갖는다는 의미입니다. 필터의 본질은 2차원 가중치 매트릭스로, 이미지의 수용 필드에서 이동하여 특징이 존재하는지 확인합니다. 컨볼루션 연산 과정은 위에서 설명한 바와 같다. 컨벌루션 레이어에 일반적으로 설정되는 하이퍼파라미터에는 필터 수, 스트라이드, 패딩 방식(유효 또는 동일), 활성화 함수 등이 포함됩니다.
- 풀링 레이어: 본질은 이미지의 로컬 상관 원리를 사용하여 유용한 정보를 유지하면서 데이터 처리량을 줄입니다. 모델 과적합을 방지하는 데 특정 효과가 있습니다.
- 완전 연결 레이어: 이 레이어의 각 노드는 이전 레이어의 모든 노드에 연결되며, 이전에 추출된 특징을 합성하는 데 사용됩니다. 일반적으로 완전 연결 계층에는 가장 많은 매개변수가 있습니다.
- 출력 레이어: 완전 연결 레이어의 정보를 기반으로 가장 높은 확률로 결과를 얻습니다.
CNN의 장점
기존 신경망과 비교하여 CNN은 로컬 연결, 가중치 공유 등의 장점이 있어 학습하는 매개변수의 양이 크게 줄어들고 네트워크가 더 빠르게 수렴됩니다.
- 부분 연결: 특징 맵의 각 출력 값은 입력 이미지의 모든 픽셀 값에 연결될 필요가 없고 적용된 필터의 수용 필드에만 연결하면 되므로 컨벌루션 레이어를 종종 "부분적으로 연결된 레이어"”, 이 특성을 로컬 연결이라고도 합니다.
- 가중치 공유: 컨볼루션 커널이 이미지에서 이동할 때 가중치는 변경되지 않습니다. 그것이 바로 체중분배입니다.
위 내용은 기초가 전혀 없어도 컨볼루션 신경망의 원리를 이해할 수 있습니다! 매우 상세합니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

C의 DMA는 직접 메모리 액세스 기술인 DirectMemoryAccess를 말하며 하드웨어 장치는 CPU 개입없이 데이터를 메모리로 직접 전송할 수 있습니다. 1) DMA 운영은 하드웨어 장치 및 드라이버에 크게 의존하며 구현 방법은 시스템마다 다릅니다. 2) 메모리에 직접 액세스하면 보안 위험이 발생할 수 있으며 코드의 정확성과 보안이 보장되어야합니다. 3) DMA는 성능을 향상시킬 수 있지만 부적절하게 사용하면 시스템 성능이 저하 될 수 있습니다. 실습과 학습을 통해 우리는 DMA 사용 기술을 습득하고 고속 데이터 전송 및 실시간 신호 처리와 같은 시나리오에서 효과를 극대화 할 수 있습니다.

C에서 Chrono 라이브러리를 사용하면 시간과 시간 간격을보다 정확하게 제어 할 수 있습니다. 이 도서관의 매력을 탐구합시다. C의 크로노 라이브러리는 표준 라이브러리의 일부로 시간과 시간 간격을 다루는 현대적인 방법을 제공합니다. 시간과 C 시간으로 고통받는 프로그래머에게는 Chrono가 의심 할 여지없이 혜택입니다. 코드의 가독성과 유지 가능성을 향상시킬뿐만 아니라 더 높은 정확도와 유연성을 제공합니다. 기본부터 시작합시다. Chrono 라이브러리에는 주로 다음 주요 구성 요소가 포함됩니다. std :: Chrono :: System_Clock : 현재 시간을 얻는 데 사용되는 시스템 클럭을 나타냅니다. STD :: 크론

C에서 높은 DPI 디스플레이를 처리 할 수 있습니다. 1) DPI 및 스케일링을 이해하고 운영 체제 API를 사용하여 DPI 정보를 얻고 그래픽 출력을 조정하십시오. 2) 크로스 플랫폼 호환성을 처리하고 SDL 또는 QT와 같은 크로스 플랫폼 그래픽 라이브러리를 사용하십시오. 3) 성능 최적화를 수행하고 캐시, 하드웨어 가속 및 세부 사항 수준의 동적 조정을 통해 성능 향상; 4) 흐릿한 텍스트 및 인터페이스 요소와 같은 일반적인 문제를 해결하고 DPI 스케일링을 올바르게 적용하여 해결합니다.

C는 실시간 운영 체제 (RTO) 프로그래밍에서 잘 수행하여 효율적인 실행 효율성과 정확한 시간 관리를 제공합니다. 1) c 하드웨어 리소스의 직접 작동 및 효율적인 메모리 관리를 통해 RTO의 요구를 충족시킵니다. 2) 객체 지향 기능을 사용하여 C는 유연한 작업 스케줄링 시스템을 설계 할 수 있습니다. 3) C는 효율적인 인터럽트 처리를 지원하지만 실시간을 보장하려면 동적 메모리 할당 및 예외 처리를 피해야합니다. 4) 템플릿 프로그래밍 및 인라인 함수는 성능 최적화에 도움이됩니다. 5) 실제 응용 분야에서 C는 효율적인 로깅 시스템을 구현하는 데 사용될 수 있습니다.

교환의 내장 양자화 도구에는 다음이 포함됩니다. 1. Binance : Binance 선물 정량 모듈, 낮은 취급 수수료 및 AI 지원 거래를 지원합니다. 2. OKX (OUYI) : 다중 계정 관리 및 지능형 주문 라우팅을 지원하고 기관 수준의 위험 관리를 제공합니다. 독립적 인 정량적 전략 플랫폼에는 다음이 포함됩니다. 4. Quadency : 맞춤형 위험 임계 값을 지원하는 전문 수준 알고리즘 전략 라이브러리. 5. Pionex : 내장 16 사전 설정 전략, 낮은 거래 수수료. 수직 도메인 도구에는 다음이 포함됩니다. 6. Cryptohopper : 클라우드 기반 정량 플랫폼, 150 개의 기술 지표를 지원합니다. 7. BITSGAP :

C에서 스레드 성능을 측정하면 표준 라이브러리에서 타이밍 도구, 성능 분석 도구 및 사용자 정의 타이머를 사용할 수 있습니다. 1. 라이브러리를 사용하여 실행 시간을 측정하십시오. 2. 성능 분석을 위해 GPROF를 사용하십시오. 단계에는 컴파일 중에 -pg 옵션 추가, GMON.out 파일을 생성하기 위해 프로그램을 실행하며 성능 보고서를 생성하는 것이 포함됩니다. 3. Valgrind의 Callgrind 모듈을 사용하여보다 자세한 분석을 수행하십시오. 단계에는 Callgrind.out 파일을 생성하고 Kcachegrind를 사용하여 결과를보기위한 프로그램 실행이 포함됩니다. 4. 사용자 정의 타이머는 특정 코드 세그먼트의 실행 시간을 유연하게 측정 할 수 있습니다. 이 방법은 스레드 성능을 완전히 이해하고 코드를 최적화하는 데 도움이됩니다.

C에서 문자열 스트림을 사용하기위한 주요 단계와 예방 조치는 다음과 같습니다. 1. 출력 문자열 스트림을 생성하고 정수를 문자열로 변환하는 것과 같은 데이터를 변환합니다. 2. 벡터를 문자열로 변환하는 것과 같은 복잡한 데이터 구조의 직렬화에 적용하십시오. 3. 성능 문제에주의를 기울이고 많은 양의 데이터를 처리 할 때 문자열 스트림을 자주 사용하지 마십시오. std :: string의 Append 메소드를 사용하는 것을 고려할 수 있습니다. 4. 메모리 관리에주의를 기울이고 스트림 스트림 객체의 자주 생성과 파괴를 피하십시오. std :: stringstream을 재사용하거나 사용할 수 있습니다.

MySQL에 데이터 삽입을위한 효율적인 방법은 다음과 같습니다. 1. InsertInto 사용 ... 값 구문 사용 ... 값 구문, 2. 트랜잭션 처리 사용, 3. 트랜잭션 처리 사용, 4. 배치 크기 조정, 5. 인덱스 비활성화, 6. Insertignore 또는 Insert ... ondupliceKeyUpdate를 사용하여 데이터베이스 작동 효율성을 크게 향상시킬 수 있습니다.
