한 편의 기사로 TorchVision의 MobileNetV3 구현 세부 사항을 마스터하세요

TorchVision v0.9에서는 모바일 친화적인 모델 시리즈가 추가되었습니다.이는 분류, 타겟 탐지, 의미 분할과 같은 작업을 처리하는 데 사용될 수 있습니다.
이 글에서는 이러한 모델의 코드를 심층적으로 살펴보고, 주목할 만한 구현 세부 사항을 공유하고, 이러한 모델의 구성 및 교육 원칙을 설명하고, 모델 최적화 과정에서 권한이 부여된 중요한 상충 관계를 해석합니다.
이 글의 목적은 원래 논문과 저장소에 기록되지 않은 모델의 기술적 세부 사항을 제시하는 것입니다.
네트워크 아키텍처
MobileNetV3 아키텍처의 구현은 원래 논문의 설정을 엄격히 따릅니다.사용자 정의를 지원하고 건물 분류, 타겟 감지, 의미 분할 백본을 위한 다양한 구성을 제공합니다.구조적 설계는 MobileNetV2와 유사하며, 둘 다 동일한 구성 요소를 공유합니다.
상자에서 꺼내 바로 사용할 수 있습니다.공식적으로는 대형과 소형의 두 가지 버전이 있습니다. 둘 다 동일한 코드로 작성되었으며, 유일한 차이점은 구성(모듈 수, 크기, 활성화 함수 등)입니다.
구성 매개변수
사용자는 InvertedResidual 설정을 사용자 정의하고 이를 MobileNetV3 클래스에 직접 전달할 수 있지만 대부분의 애플리케이션의 경우개발자는 모델 구축 방법에 매개변수를 전달하여 기존 구성을 조정할 수 있습니다.일부 주요 구성 매개변수는 다음과 같습니다.
* 너비_배수 매개변수는 모델 파이프라인의 수를 결정하는 배수입니다. 기본값은 1입니다. 기본값을 조정하면 첫 번째 레이어와 마지막 레이어를 포함한 합성 필터의 개수를 변경할 수 있습니다. 구현 시 필터의 개수가 8의 배수인지 확인하세요. 이는 연산의 벡터화 과정을 가속화하는 하드웨어 최적화 기법입니다.
* 줄어든 꼬리 이 매개변수는 주로 실행 속도 최적화에 사용되며, 이를 통해 네트워크의 마지막 모듈에서 파이프라인 수를 절반으로 줄일 수 있습니다. 이 버전은 객체 감지 및 의미 분할 모델에 자주 사용됩니다. MobileNetV3 관련 논문에 따르면, reduce_tail 매개변수를 사용하면 정확도에 영향을 주지 않고 15%의 지연 시간을 줄일 수 있습니다.
* 확장된 매개변수는 주로 모델의 마지막 3개 InvertedResidual 모듈에 영향을 미칩니다. 이러한 모듈의 깊이별 합성곱은 Atrous 합성곱으로 변환될 수 있으며, 이는 모듈의 출력 단계 크기를 제어하고 의미 분할 모델의 정확도를 개선하는 데 사용됩니다.
구현 세부 사항
MobileNetV3 클래스는 제공된 구성에서 네트워크를 구축하는 역할을 합니다. 구현 세부 사항은 다음과 같습니다.
* 마지막 합성 모듈은 마지막 InvertedResidual 모듈의 출력을 6배로 확장합니다. 이 구현은 다양한 승수 매개변수에 적응할 수 있습니다.
* MobileNetV2 모델과 유사하게 분류기의 마지막 선형 레이어 앞에 Dropout 레이어가 있습니다.
InvertedResidual 클래스는 네트워크의 주요 구성 요소입니다. 주목해야 할 구현 세부 사항은 다음과 같습니다.
* 입력 파이프라인과 확장 파이프라인이 동일한 경우 확장 단계는 필요하지 않습니다. 이 작업은 네트워크의 첫 번째 합성 모듈에서 발생합니다.
* 확장된 파이프라인이 출력 채널과 동일하더라도 투영 단계는 항상 필요합니다.
* Depthwise 모듈의 활성화는 Squeeze-and-Excite 레이어보다 우선하므로 어느 정도 정확도를 향상시킬 수 있습니다.

분류
사전 훈련된 모델의 벤치마크와 구성, 훈련, 양자화 세부 사항은 여기에서 설명합니다.
벤치마크
사전 학습된 모델을 초기화합니다.
large = torchvision.models.mobilenet_v3_large(pretrained=True, width_mult=1.0, reduced_tail=False, dilated=False)
small = torchvision.models.mobilenet_v3_small(pretrained=True)
quantized = torchvision.models.quantization.mobilenet_v3_large(pretrained=True)

그림에서 보듯이 사용자가 약 6배의 속도 증가를 위해 약간의 정확도를 희생할 의향이 있다면,그러면 MobileNetV3-Large는 ResNet50을 대체할 수 있습니다.
여기서 추론 시간은 CPU에서 측정된다는 점에 유의하세요.
훈련 과정
모든 사전 학습된 모델은 폭 배수 1과 전체 꼬리를 갖춘 비확장 모델로 구성되었으며, ImageNet에 맞춰졌습니다. 대형 및 소형 변형 모두 동일한 하이퍼파라미터와 스크립트로 학습됩니다.
빠르고 안정적인 모델 학습
RMSProp을 올바르게 구성하는 것은 학습 과정의 속도를 높이고 수치적 안정성을 보장하는 데 매우 중요합니다. 저자는 실험에 TensorFlow를 사용했으며 훨씬 더 높은 rmsprop_epsilon .
일반적으로 이 하이퍼파라미터는 분모가 0이 되는 것을 피하기 위해 사용되므로 값이 작지만 이 특정 모델에서는손실의 수치적 불안정성을 피하기 위해서는 올바른 값을 선택하는 것이 중요합니다.
또 다른 중요한 세부 사항은 PyTorch와 TensorFlow의 RMSProp 구현이 일반적으로 비슷하게 동작하는 반면, 이 설정에서는 두 프레임워크가 epsilon 하이퍼파라미터를 처리하는 방식의 차이점을 주목하는 것이 중요하다는 것입니다.
구체적으로, PyTorch는 제곱근 계산 외부에 엡실론을 추가하는 반면, TensorFlow는 제곱근 계산 내부에 엡실론을 추가합니다.이는 사용자가 이 문서의 하이퍼 매개변수를 이식할 때 엡실론 값을 조정해야 한다는 것을 의미하며 이는 다음과 같이 표현될 수 있습니다. PyTorch_eps = sqrt(TF_eps) 합리적인 근사치를 계산합니다.
하이퍼파라미터를 조정하고 학습 프로세스를 개선하여 모델 정확도를 향상시킵니다.
빠르고 안정적인 학습을 달성하기 위해 최적화 프로그램을 구성한 후 모델의 정확도를 최적화할 수 있습니다. 사용자가 이러한 목표를 달성하는 데 도움이 되는 몇 가지 기술이 있습니다.
첫째, 과적합을 피하기 위해,AutoAugment와 RandomErasing을 사용하여 데이터를 늘릴 수 있습니다.또한, 교차 검증을 사용하여 가중치 감소와 같은 매개변수를 조정하고 학습 후 다양한 에포크 체크포인트의 가중치를 평균화하는 것도 매우 중요합니다. 마지막으로 레이블 평활화, 랜덤 깊이, LR 노이즈 주입과 같은 방법을 사용하면 전체 정확도를 최소 1.5%만큼 향상시킬 수 있습니다.


설정된 정확도에 도달하면 모델 성능이 검증 세트에서 검증됩니다.이 과정은 과잉적합을 감지하는 데 도움이 됩니다.
부량
MobileNetV3-Large 변형의 QNNPACK 백엔드에 양자화된 가중치를 제공하여 실행 속도를 2.5배 더 빠르게 만들었습니다. 모델을 정량화하려면여기서는 양자화 인식 훈련(QAT)이 사용됩니다.
QAT를 사용하면 양자화의 영향을 모델링하고 가중치를 조정하여 모델 정확도를 개선할 수 있습니다.단순하게 훈련된 모델의 양자화된 결과와 비교했을 때 정확도는 1.8%만큼 향상되었습니다.

표적 탐지
이 섹션에서는 먼저 게시된 모델의 기준을 제공하고, 그런 다음 MobileNetV3-Large Backbone이 Feature Pyramid Network의 FasterRCNN 감지기와 함께 객체 감지에 어떻게 사용되는지 설명합니다.
또한 네트워크가 어떻게 훈련되고 조정되는지, 그리고 어떤 부분에서 균형을 맞춰야 하는지도 설명합니다.(이 섹션에서는 SSDlite와 함께 사용하는 방법에 대한 자세한 내용은 다루지 않습니다.)
벤치마크
모델을 초기화합니다.
high_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn(pretrained=True)
low_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn(pretrained=True)

보시다시피, 사용자가 5배 더 빠른 훈련 속도를 위해 약간의 정확도를 희생할 의향이 있다면,ResNet50 모델을 대체할 수 있는 MobileNetV3-Large FPN 백본을 탑재한 고해상도 Faster R-CNN입니다.
구현 세부 사항
탐지기는 MobileNetV3 모델의 다양한 합성곱으로부터 특징을 추출하는 FPN 스타일 백본을 사용합니다.기본적으로 사전 학습된 모델은 13번째 InvertedResidual 모듈의 출력과 풀링 계층 이전의 합성곱 출력을 사용합니다. 구현에서는 더 많은 단계의 출력을 사용하는 것도 지원합니다.
네트워크에서 추출된 모든 피처 맵은 FPN 모듈에 의해 256개의 파이프라인으로 투영됩니다.이렇게 하면 네트워크 속도가 크게 향상될 수 있습니다.FPN 백본에서 제공하는 이러한 특징 맵은 FasterRCNN 감지기에서 다양한 규모의 상자 및 클래스 예측을 제공하는 데 사용됩니다.
훈련 및 튜닝 프로세스
현재 공식 기관에서는 서로 다른 해상도에서 타겟 감지를 수행할 수 있는 두 개의 사전 학습된 모델을 제공하고 있습니다. 두 모델 모두 동일한 하이퍼파라미터와 스크립트를 사용하여 COCO 데이터 세트에서 학습되었습니다.
고해상도 감지기는 800~1333px의 이미지로 학습되고, 모바일 친화적인 저해상도 감지기는 320~640px의 이미지로 학습됩니다.
두 개의 별도 사전 훈련된 가중치 세트를 제공하는 이유는 작은 이미지에서 감지기를 직접 훈련하는 것이 작은 이미지를 사전 훈련된 고해상도 모델에 전달하는 것보다 효율적이기 때문입니다.이로 인해 정확도가 5 mAP 증가합니다.
두 백본 모두 ImageNet의 가중치로 초기화되고, 가중치의 마지막 세 단계는 학습 중에 미세 조정됩니다.
모바일 친화적 모델의 경우 RPN NMS 임계값을 조정하여 추가적인 속도 최적화가 가능합니다.0.2 mAP 정확도를 희생하면 모델의 CPU 속도가 약 45%만큼 증가할 수 있습니다. 최적화 세부 사항은 다음과 같습니다.


의미론적 세분화
이 섹션에서는 먼저 몇 가지 공개된 사전 학습된 모델 벤치마크를 제공하고, 그런 다음 MobileNetV3-Large 백본이 LR-ASPP, DeepLabV3, FCN과 같은 세분화 헤드와 결합되어 의미적 세분화를 수행하는 방식에 대해 설명합니다.
또한 네트워크 학습 과정에 대해 설명하고, 속도가 중요한 애플리케이션을 위한 몇 가지 대체 최적화 기술을 제안합니다.
벤치마크
사전 학습된 모델을 초기화합니다.
lraspp = torchvision.models.segmentation.lraspp_mobilenet_v3_large(pretrained=True)
deeplabv3 = torchvision.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)

그림에서 볼 수 있듯이 MobileNetV3-Large 백본을 탑재한 DeepLabV3는 대부분의 애플리케이션에서 FCN 및 ResNet50에 대한 실행 가능한 대안입니다.정확도는 그대로 유지하면서 실행 속도가 8.5배 증가합니다.또한, LR-ASPP 네트워크의 성능은 모든 지표에서 동일 조건에서 FCN보다 우수합니다.
구현 세부 사항
이 섹션에서는 테스트된 세그먼테이션 헤드의 중요한 구현 세부 사항을 설명합니다. 이 섹션에 설명된 모든 모델은 확장된 MobileNetV3-Large 백본을 사용합니다.
LR-ASPP
LR-ASPP는 MobileNetV3 논문의 저자가 제안한 축소된 아트로스 공간 피라미드 풀링 모델의 간소화된 버전입니다. TorchVision의 다른 세분화 모델과 달리보조 손실을 사용하지 않고 각각 8과 16의 출력 스트라이드를 갖는 저수준 및 고수준 기능을 사용합니다.
논문에서 사용된 49×49 AveragePooling 레이어와 가변 단계 크기와 달리, 여기에서는 AdaptiveAvgPool2d 레이어를 사용하여 글로벌 기능을 처리합니다.
이를 통해 사용자는 여러 데이터 세트에서 실행할 수 있는 일반적인 구현 방법을 얻을 수 있습니다.마지막으로, 출력을 반환하기 전에 항상 쌍선형 보간을 수행하여 입력 및 출력 이미지의 크기가 정확히 일치하는지 확인합니다.
DeepLabV3 및 FCN
MobileNetV3와 DeepLabV3, FCN을 결합한 것은 다른 모델을 결합한 것과 매우 유사하며, 이러한 방법의 단계적 평가는 LR-ASPP와 동일합니다.
여기서는 상위 수준이나 하위 수준 기능이 사용되지 않는다는 점에 유의하세요.대신, 일반 손실은 출력 스트라이드 16으로 피처 맵에 추가되고, 보조 손실은 출력 스트라이드 8로 피처 맵에 추가됩니다.
FCN은 속도와 정확도 면에서 LR-ASPP보다 떨어지므로 여기서는 고려하지 않습니다. 사전 훈련된 가중치는 약간의 코드 수정만으로 계속 사용할 수 있습니다.
훈련 및 튜닝 프로세스
의미 분할에 사용할 수 있는 MobileNetV3 사전 학습된 두 가지 모델은 다음과 같습니다.LR-ASPP와 DeepLabV3.이러한 모델의 백본은 ImageNet 가중치로 초기화되었으며 종단 간 학습이 이루어졌습니다.
두 아키텍처 모두 동일한 스크립트와 유사한 하이퍼 매개변수를 사용하여 COCO 데이터 세트에서 학습되었습니다.
일반적으로 추론 과정에서 이미지 크기는 520픽셀로 조정됩니다. 선택적인 속도 최적화는 고해상도 사전 훈련된 가중치를 사용하여 저해상도 모델 구성을 구축하고 추론 크기를 320픽셀로 줄이는 것입니다.이렇게 하면 몇 mIoU 포인트가 희생되는 반면 CPU 실행 시간은 약 60% 증가합니다.


이번 호에서는 MobileNetV3의 구현 세부 사항을 요약했습니다. 이를 통해 이 모델에 대한 더 깊은 이해와 지식이 생기기를 바랍니다.