제퍼넷 로고

Tkinter 및 Pyinstaller를 사용하여 딥 러닝 모델 배포

시간

개요

머신 러닝 및 딥 러닝 모델은 종종 다음 중 하나에서 생성되고 실행됩니다. 주피터 노트 또는 IDE에서. 배포되는 모델은 거의 없으며 이러한 모델의 배포는 일반적으로 웹 사이트 기반인 경향이 있습니다. 방법을 모르기 때문에 개발자가 독립 실행형 앱으로 변환하는 경우는 거의 없습니까? 이러한 Windows 실행 파일은 IDE가 없는 사람과 DL/ML 모델을 공유하려는 경우 정말 유용할 수 있습니다.

실제로 머신 러닝 및 딥 러닝 모델을 Windows 애플리케이션에 배포하는 것은 매우 쉽습니다. 악명 높은 Tkinter 라이브러리를 사용하여 ML 및 DL 모델에 GUI 기능을 추가하는 방법에 대한 온라인 게시물이 있습니다. 그러나 대부분은 IDE를 통해 모델을 실행하고 이러한 GUI 앱을 Windows 응용 프로그램, 즉 실행 파일에 배포하는 방법을 보여주지 않습니다. 이 기사에서는 한 단계 더 나아갈 것입니다. Pyinstaller를 사용하여 티킨터 라이브러리를 사용하여 만든 GUI로 딥 러닝 모델을 변환합니다. 티킨터 실행 파일로.

이를 위해 우리는 덴스넷, 다음을 사용하여 생성된 사전 훈련된 모델 컨볼 루션 신경망 이미지를 분류합니다. 이 DenseNet 모델의 경우 Tkinter 모듈을 사용하여 UI를 생성하므로 사용자는 Tkinter UI를 통해 이미지를 업로드하고 예측된 레이블을 얻을 수 있습니다. 마지막으로 이 전체 파이썬 파일을 Pyinstaller 모듈로 변환합니다.

학습 목표

  1. Tkinter 프레임워크를 사용하여 딥 러닝 모델용 사용자 인터페이스를 구축하는 과정을 이해합니다.
  2. Densenet과 같은 사전 훈련된 모델을 가져오고 이미지넷 가중치로 로드하여 새로운 사진에서 모델의 성능을 개선하는 방법을 알아봅니다.
  3. 이미지를 처리하고 기능으로 분류하는 것과 같이 여러 단계를 나누는 방법을 배웁니다.
  4. Pyinstaller 모듈을 활용하여 Tkinter 응용 프로그램과 딥 러닝 모델을 배포용 단일 실행 파일로 묶는 방법을 이해합니다.
  5. 딥 러닝 모델을 Windows 실행 파일로 배포하고 사용자 친화적으로 만드는 방법을 알아보세요.

이 기사는 데이터 과학 Blogathon.

차례

  1. 딥 러닝 모델 구축
  2. 모델의 프런트 엔드 만들기: 사용자 인터페이스
  3. 마무리하기: Main 함수 만들기
  4. 애플리케이션 패키징: 모델 래핑
  5. 결론

딥 러닝 모델 구축

이 섹션에서는 DenseNet121 모델에 대해 설명하고 미리 훈련된 가중치로 정렬합니다. 시작하려면 TensorFlow 및 PIL 라이브러리가 설치되어 있는지 확인하세요. 이러한 라이브러리는 DenseNet 모델을 다운로드하고 이미지를 분류하기 위해 모델로 보내기 전에 이미지 전처리를 위한 PIL에 필요합니다.

pip 설치 tensorflow pip 설치 베개
깊은 학습

출처: commons.wikimedia

다음은 이 섹션을 시작하기 위해 TensorFlow와 베개 및 지원 라이브러리를 다운로드합니다.

여기서는 사전 훈련된 모델을 사용하고 있습니다. 처음부터 구축할 필요가 없습니다. 모델을 가져오기만 하면 됩니다. 모델을 다시 교육할 필요가 없도록 모델의 가중치가 DenseNet에 제공되는지 확인해야 합니다. 이는 다음과 같이 수행할 수 있습니다.

from tensorflow.keras.applications.densenet import DenseNet121 from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.densenet import preprocess_input, decode_predictions import numpy 모델 = DenseNet121(weights='imagenet')

Densenet 모델을 사용하기 위해 먼저 tensorflow.keras.applications 모듈에서 모델을 가져온 다음 'imagenet'으로 변수 가중치를 할당하여 모델의 사전 훈련된 가중치를 로드합니다.

수백만 장의 사진과 수천 개의 엔터티 유형이 있는 대규모 이미지 데이터 세트인 ImageNet 데이터 세트는 딥 러닝 모델을 개발하고 테스트하는 데 자주 사용됩니다. DenseNet 모델은 ImageNet에서 훈련 및 테스트되었습니다.

이미지 모듈은 특정 파일 경로에서 이미지를 로드하고 픽셀 배열로 변환하는 데 도움이 되는 TensorFlow에서 가져옵니다. 그만큼 전처리_입력() densenet의 메소드는 분류를 위해 이미지 배열을 모델로 보내기 전에 이미지 배열을 사전 처리하는 데 사용됩니다. 동시에, decode_predictions() 메서드는 모델의 출력을 사람이 읽을 수 있는 클래스로 디코딩하는 데 사용됩니다. DenseNet은 1000개의 클래스를 예측하도록 훈련되었습니다. 그러므로 이것은 decode_predictions() 메서드는 출력을 이러한 클래스 중 하나에 매핑합니다. DenseNet121 모델의 입력 형태는 (1,224,224,3)입니다.

이러한 모듈을 사용하는 방법을 더 잘 이해하기 위해 개 이미지를 가져와서 예측할 수 있도록 모델에 전달해 보겠습니다.

img_path = 'dog.jpg' img = image.load_img(img_path, target_size=(224, 224)) img_array = 이미지.img_to_array(img)
img_expanded = np.expand_dims(img_array, 축=0)
img_processed = preprocess_input(img_expanded) preds = model.predict(img_processed) 결과 = decode_predictions(preds, top=1)[0]

이제 load_img() 메서드를 사용하여 주어진 경로에서 이미지를 파이썬으로 로드하는 방법을 볼 수 있습니다. 다음 단계에서는 이미지를 픽셀 배열로 변환합니다. 이제 이미지의 크기는 (224, 224, 3)입니다. 딥 러닝 모델은 이미지 배치에서 입력을 받습니다. 따라서 이 이미지 배열을 단일 이미지 배열의 배치로 변환해야 합니다. 이것은 이미지 배열의 크기를 (224,224,3)에서 (1,224,224,3)으로 변환하는 NumPy 라이브러리의 expand_dims() 메서드를 사용하여 수행됩니다.

마지막으로 입력 이미지 배열을 전처리하고 예측을 위해 모델에 제공합니다. 모델에서 반환된 출력은 prob인 점수입니다. (확률) 1000 클래스의. 확률이 가장 높은 레이블만 필요하기 때문입니다. 점수, 우리는 decode_predictions() 방법.

여기서 사전 훈련된 모델을 가져왔기 때문에 이러한 방법을 사용하고 있습니다. 처음부터 모델을 생성할 때 위에서 작성한 것 대신 사용한 적절한 전처리 단계를 사용할 수 있습니다.

이제 모델의 UI를 만들 차례입니다. 따라서 이 섹션에서는 사용자가 상호 작용하고 예측을 위한 이미지 경로를 제공할 수 있도록 간단한 UI를 생성합니다. 이를 위해서는 먼저 다운로드해야 합니다. 티킨터 라이브러리이며 pip 명령을 사용하여 이를 수행할 수 있습니다.

핍 설치 tk

이렇게 하면 Tkinter 라이브러리가 설치되고 이제 UI 생성을 시작할 수 있습니다. 간단한 UI를 만들기 위해 다음 코드를 살펴보겠습니다.

tkinter 가져오기

app = tkinter.Tk() app.geometry("250x325") app.title("이미지 분류기") upload = tkinter.Button(text="업로드") upload.place(relx=0.5, 의존=0.5, 앵커= '센터') app.mainloop()

이렇게 하면 업로드라는 버튼이 포함되고 창 중앙에 유지되는 최소한의 UI가 생성됩니다. 응용 프로그램 제목은 "Image Classifier"로 설정되며 UI 크기는 250×325입니다. 코드의 출력은 다음과 같이 유추할 수 있습니다.

깊은 학습

애플리케이션의 기본 UI

업로드 버튼을 클릭해도 아무런 반응이 없습니다. 여기에서 사용자가 업로드 버튼과 상호 작용할 때 사용자가 이미지 경로를 선택할 수 있어야 하는 기능을 추가해야 합니다.

이를 위해 Tkinter 라이브러리의 filedialog 모듈을 사용합니다. 이 모듈을 사용하면 사용자가 업로드 버튼과 상호 작용할 때마다 파일 경로를 열 수 있습니다. 이는 다음과 같이 코드에서 구현할 수 있습니다.

def getImage(): 경로 = filedialog.askopenfilename() 반환 경로 upload_button = tkinter.Button(text="업로드",command=getImage)

여기서 우리는 Tkinter에서 filedialog를 가져왔고 그 방법 중 하나를 사용했습니다. 열려있는파일이름(). 이 열려있는파일이름() 메서드를 사용하면 Tkinter 응용 프로그램이 파일 탐색기를 열 수 있으며 이제 사용자는 여기에서 이미지를 선택할 수 있습니다. 그리고 사용자가 이미지를 선택하면 이미지 경로가 경로 변수에 저장됩니다.

이제 이 모든 작업을 수행하려면 이미지 가져오기() 함수는 사용자가 업로드 버튼을 클릭할 때 창이 열리도록 업로드에 명령처럼 전달되어야 합니다. 사용자는 이미지를 탐색할 수 있으며 해당 이미지 경로가 경로 변수에 전달됩니다.

다음 단계에서는 이미지 경로를 가져와 전처리 이미지 배열을 출력으로 반환하는 함수를 만듭니다. 함수는 다음과 같이 표시됩니다.

def preprocess(경로): img = image.load_img(경로, target_size=(224, 224)) img_array = image.img_to_array(img) img_expanded = numpy.expand_dims(img_array, axis=0) img_processed = preprocess_input(img_expanded) return img_processed

기능 전처리() 파일 경로를 가져온 다음 로드_img() 방법과 동시에 (224, 224, 3) 모양으로 크기를 조정합니다. 여기서 3은 R, G 및 B에 대해 각각 하나씩 3개의 dims(차원)을 나타냅니다. 그런 다음 배열로 변환됩니다. 픽셀의.

지금, 확장_딤() 이미지 배열에 의해 더 높은 dim(dimension)으로 확장됩니다. 이미지 배열의 모양은 (224, 224, 3)에서 (1, 224, 224, 3)으로 바뀝니다. 모든 딥 러닝 모델이 이미지 배치에서 입력을 받는다는 것을 알고 있기 때문입니다. 여기에서는 기본적으로 이미지가 하나만 있는 배치를 생성합니다.

마지막으로, 우리는 그것을 전처리_입력() 처리된 이미지 배열을 반환합니다.

그런 다음 이 처리된 이미지 배열을 가져와서 예측을 위해 모델에 전달하고 출력을 반환하는 다른 함수를 만듭니다.

def classify(processed_img): preds = model.predict(processed_img) results = decode_predictions(preds, top=1)[0] 결과 반환

다음 기능, 나누다() 처리된 이미지 배열을 가져와 예측 함수에 전달합니다. 확률의 배열인 결과는 변수 preds에 저장됩니다. 그런 다음 확률이 가장 높은 클래스. (확률) 점수를 받아 decode_predictions() 그런 다음 각 레이블과 prob를 포함하는 배열을 출력합니다. 가장 높은 확률의 점수. 수업.

모든 것을 마무리하기 - Main 함수 만들기

이 기사에서는 이제 파일 경로 생성에서 결과 가져오기 및 UI에 표시하기까지 이 세 가지 기능을 하나씩 호출하는 기본 기능을 정의해야 합니다.

def image_prediction(): path = getImage() input_img = preprocess(path) results = classify(input_img) result_label.config(text="") result_label.config(text=results[0][1] + ": " + str (결과[0][2]) )
upload_button = tkinter.Button(text="업로드", command=image_prediction) upload_button.place(relx=0.5, trust=0.5, anchor='center') result_label = tkinter.Label(text="")

주요 기능 이미지_예측() 업로드 버튼에 대한 명령입니다. 따라서 사용자가 업로드 버튼을 클릭하면 이미지_예측() 함수가 호출됩니다. 이 함수가 호출되면 심지어 이미지 가져오기() 함수가 호출되며, 이 함수는 업로드 버튼을 눌렀을 때 사용자가 이미지를 선택할 수 있도록 창을 여는 역할을 합니다.

그런 다음 사용자가 이미지를 선택하면 경로가 이미지 경로와 함께 저장됩니다. 그런 다음 이 이미지 경로는 전처리() 이미지를 전처리하고 마지막으로 나누다() 기능, 우리는 출력 레이블을 얻습니다.

여기서 우리는 결과_라벨. 이 기능을 통해 출력 레이블을 표시합니다. 다음을 호출하여 이를 수행할 수 있습니다. 구성() 함수를 표시하고 표시하려는 텍스트를 보냅니다. 레이블을 표시하기 전에 출력이 표시되지 않도록 해야 하므로 빈 문자열을 구성() 방법. 그런 다음 마지막으로 예측 점수와 함께 예측이 가장 높은 레이블을 전달합니다.

이 문서의 전체 코드는 아래에서 찾을 수 있습니다.

import numpy import tkinter from tkinter import filedialog from tensorflow.keras.applications.densenet import DenseNet121 from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.densenet import preprocess_input,decode_predictions 모델 = DenseNet121(weights='imagenet') 앱 = tkinter.Tk() app.geometry("250x325") app.title("이미지 분류기") def getImage(): path = filedialog.askopenfilename() 반환 경로 def preprocess(path): img = image.load_img(path, target_size=(224, 224)) img_array = image.img_to_array(img) img_expanded = numpy.expand_dims(img_array, axis=0) img_processed = preprocess_input(img_expanded) return img_processed def classify(processed_img): preds = model.predict(processed_img) results = decode_predictions(preds, top=5)[0] 결과 반환 def image_prediction(): path = getImage() input_img = preprocess(path) results = classify(input_img) result_label.config(text="") result_label.config( text=results[0][1] + ": " + str(results[0][2])) upload_butt on = tkinter.Button(text="업로드", command=image_prediction) upload_button.place(relx=0.5, 의존=0.5, anchor='center') result_label = tkinter.Label(text="") result_label.place(relx =0.5, 의존=0.6, 앵커='센터') app.mainloop()

애플리케이션 패키징: 모델 래핑

마지막으로 이미지를 전송하고 해당 이미지에 대한 예측을 얻을 수 있는 모델과 UI를 만드는 작업을 마쳤습니다. 이 섹션에서는 이 전체 스크립트를 패키징하고 애플리케이션으로 만드는 방법에 대해 설명합니다. 이 섹션을 마치면 Python 스크립트를 실행 파일로 변환하는 방법을 배울 수 있습니다.

가장 먼저 해야 할 일은 pyinstaller 모듈이 설치되어 있는지 확인하는 것입니다. 그렇지 않은 경우 pip 명령을 사용하여 수행할 수 있습니다.

핍 설치 pyinstaller

그러면 PyInstaller 라이브러리가 설치됩니다. Python 코드 파일을 실행 파일로 변환하려면 CMD를 열고 이 파일을 작성한 폴더로 이동해야 합니다. 그런 다음 다음 명령을 입력해야 합니다.

pyinstaller --onefile 분류자.py

내 Python 코드는 classifier.py라는 파일 아래에 작성되었으므로 위의 명령에서 사용했습니다. –onefile 명령 없이 pyinstaller를 실행할 수도 있습니다. 그러나 –onefile 명령은 스크립트를 단일 실행 파일로 만드는 것입니다. 동시에 –onefile 없이 pyinstaller를 호출하면 다른 파일과 함께 실행 파일이 생성됩니다.

명령 실행 후 종료 부분

위에서 마지막에 exe가 성공적으로 완료되었음을 보여주는 것을 볼 수 있습니다. 두 개의 폴더 dist 및 build가 생성되고 .spec 파일이 생성됩니다. 우리 모델의 실행 파일은 dist 폴더에서 찾을 수 있습니다.

애플리케이션을 실행하여 테스트해 보겠습니다.

깊은 학습

최종 애플리케이션 테스트

위의 이미지는 애플리케이션 실행을 보여줍니다. 골든 리트리버 이미지가 분류자에게 전달되고 애플리케이션은 예측 점수와 함께 레이블을 올바르게 분류하고 반환합니다.

결론

요약하자면, 딥 러닝 프로젝트를 Windows 앱으로 변환하는 것은 바쁜 과정이지만 올바른 접근 방식과 도구를 사용하면 달성할 수 있습니다. 이 게시물에서는 PyInstaller 및 Tkinter 패키지를 사용하여 독립 실행형 실행 파일에 딥 러닝 모델을 구축하는 방법을 다뤘습니다. 우리는 Tkinter로 애플리케이션을 개발하고 사전 훈련된 Densenet 모델을 애플리케이션에 추가하고 PyInstaller로 코드를 패키징하는 방법을 설명했습니다.

다음은 기사에서 발췌한 몇 가지 주요 내용입니다.

  1. Tkinter는 사용자가 사진을 업로드하고 이미지 예측을 받을 수 있는 애플리케이션용 UI를 개발하는 데 사용할 수 있습니다.
  2. Pyinstaller는 Tkinter 응용 프로그램과 딥 러닝 모델을 함께 패키징할 수 있게 해주는 라이브러리입니다.
  3. 이러한 실행 파일은 다른 사람과 쉽게 공유할 수 있습니다.

전반적으로 이 게시물은 딥 러닝 프로젝트를 실행 파일에 배포하는 실용적인 접근 방식을 제시하여 개발자가 더 많은 청중과 모델을 쉽게 공유하고 사용자가 모델의 기능을 사용할 수 있도록 합니다.

 이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

spot_img

최신 인텔리전스

spot_img