1. anaconda에서 가상환경 생성(python 3.7)

conda create -n tf115 python==3.7
conda activate tf115

 

2. mask rcnn 을 다운받는다

git clone https://github.com/matterport/Mask_RCNN

 

3. keras 2.1.2 

pip install keras==2.1.2

4. pip install tensorflow-gpu==1.15.5

pip install tensorflow-gpu==1.15.5

 

5. 버전 확인을 해본다

6. 다음과 같이 폴더를 만든다

Mask_RCNN - model - balloon - datasets

                                         - logs

 

7. 1) https://github.com/matterport/Mask_RCNN/releases/download/v2.1/mask_rcnn_balloon.h5 파일을 다운받아서 

Mask_RCNN 폴더로 복사

2) https://github.com/matterport/Mask_RCNN/releases/download/v1.0/mask_rcnn_coco.h5 파일도 다운 받아서 Mask_RCNN 폴더로 복사

3) https://github.com/matterport/Mask_RCNN/releases/download/v2.1/balloon_dataset.zip  파일을 다운받아서 Mask_RCNN/model/balloon/datasets 폴더에 해제

8.  다음의 명령어로 설치

pip install scikit-image
#train 시 문제때문에 다음과 같이 수정해야 한다
pip install -U scikit-image==0.16.2

 

8. samples/balloon  폴더로 이동한 뒤 다음의 명령어로 inference 실행

python balloon.py --dataset ../../model/balloon/datasets --weights ../../mask_rcnn_balloon.h5 --logs ../../model/balloon/logs --image ../../model/balloon/datasets/val/3800636873_ace2c2795f_b.jpg splash

9. inference할 이미지

inferernce 결과 이미지가 현재 폴더에 남는다

 

** 2022년 6월 17일 - 설치테스트 시 아래의 명령을 한번 더 줘야 한다

pip install protobuf==3.20.*

 

 

 

 

 

#  설치 부분 생략(추후 작성)

 

# 데이터 생성 생략(추후 작성) - 다운받은 놈으로 일단 테스트

 

1. ~/jetson-inference/python/training/detection/ssd/data/위치에 다음과 같은 구조의 데이터를 복사한다

[fruit] - [test] - jpg 이미지들
        - [train] - jpg 이미지들
        - [validation] - jpg 이미지들
        - class-descriptions-boxable.csv
        - sub-test-annotations-bbox.csv
        - sub-train-annotations-bbox.csv
        - sub-validation-annotations-bbox.csv
        - test-annotations-bbox.csv
        - train-annotations-bbox.csv
        - validation-annotations-bbox.csv       

 

2. 다음 명령으로 학습한다.

cd ~/jetson-inference/python/training/detection/ssd
python3 train_ssd.py --data=data/fruit --model-dir=models/fruit --batch-size=4 --epochs=30

 

 

 

 

3. 학습이 완료되었으면 model폴더에 생성된 학습 결과를 다음 명령으로 tensorrt 로 변환한다.

python3 onnx_export.py --model-dir=models/fruit

 

4. 테스트 하기 위해서 validation 폴더의 이미지를 다음과 같은 명령으로 일괄적으로 변환해본다. 

detectnet --model=models/fruit/ssd-mobilenet.onnx \
          --labels=models/fruit/labels.txt \
          --input-blob=input_0 --output-cvg=scores --output-bbox=boxes \
          "~/jetson-inference/python/training/detection/ssd/data/fruit/validation/*.jpg"  \
          ~/test_result/fruit_%i.jpg

 

import jetson.inference
import jetson.utils

net = jetson.inference.detectNet("ssd-mobilenet-v2", [], threshold=0.5)


input = jetson.utils.videoSource('/home/jnx/Downloads/test02.mp4', argv=[])
output = jetson.utils.videoOutput('', argv=[])

ol = "box,labels,conf"

while True:
    img = input.Capture()

    #print('img.width : ', img.width)
    #print('img.height : ', img.height)

    detections = net.Detect(img, overlay=ol)
    output.Render(img)

    output.SetStatus("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))

    if not input.IsStreaming() or not output.IsStreaming():
        break

인터넷에 찾아보니 예제들이 있어 그대로 하니 잘 안되어서

 

1. 설치 버전

 1) Python : 3.7.6

 2) Tensorflow : 2.1.0

 3) Keras : 2.3.1

 

2. 소스

from keras.datasets import mnist
from autokeras import ImageClassifier

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape + (1,)) # (1,) denotes the channles which is 1 in this case
x_test = x_test.reshape(x_test.shape + (1,)) # (1,) denotes the channles which is 1 in this case

clf = ImageClassifier()
clf.fit(x_train, y_train)
(x_train, y_train), (x_test, y_test) = mnist.load_data()

 

3. 결과

더보기

Train for 1500 steps, validate for 375 steps
Epoch 1/1000
1500/1500 [==============================] - 52s 35ms/step - loss: 0.1715 - accuracy: 0.9475 - val_loss: 0.0710 - val_accuracy: 0.9792
Epoch 2/1000
................................

1500/1500 [==============================] - 51s 34ms/step - loss: 0.0204 - accuracy: 0.9927 - val_loss: 0.0414 - val_accuracy: 0.9900
Epoch 20/1000
1500/1500 [==============================] - 51s 34ms/step - loss: 0.0217 - accuracy: 0.9927 - val_loss: 0.0417 - val_accuracy: 0.9893

 

 

[Trial complete]
[Trial summary]
 |-Trial ID: e9fea079a980756cf5cb43345c2e712e
 |-Score: 0.038674127771691325
 |-Best step: 0
 > Hyperparameters:
 |-classification_head_1/dropout_rate: 0.5
 |-classification_head_1/spatial_reduction_1/reduction_type: flatten
 |-dense_block_1/dropout_rate: 0
 |-dense_block_1/num_layers: 1
 |-dense_block_1/units_0: 128
 |-dense_block_1/use_batchnorm: False
 |-image_block_1/augment: False
 |-image_block_1/block_type: vanilla
 |-image_block_1/conv_block_1/dropout_rate: 0.25
 |-image_block_1/conv_block_1/filters_0_0: 32
 |-image_block_1/conv_block_1/filters_0_1: 64
 |-image_block_1/conv_block_1/kernel_size: 3
 |-image_block_1/conv_block_1/max_pooling: True
 |-image_block_1/conv_block_1/num_blocks: 1
 |-image_block_1/conv_block_1/num_layers: 2
 |-image_block_1/conv_block_1/separable: False
 |-image_block_1/normalize: True
 |-optimizer: adam
Train for 1500 steps, validate for 375 steps


Epoch 1/1000
1500/1500 [==============================] - 1521s 1s/step - loss: 0.2227 - accuracy: 0.9381 - val_loss: 0.1432 - val_accuracy: 0.9625
Epoch 2/1000
1500/1500 [==============================] - 1633s 1s/step - loss: 0.1563 - accuracy: 0.9605 - val_loss: 0.0721 - val_accuracy: 0.9795
................................................

1500/1500 [==============================] - 1509s 1s/step - loss: 0.0060 - accuracy: 0.9982 - val_loss: 0.0629 - val_accuracy: 0.9877
Epoch 36/1000
1500/1500 [==============================] - 1518s 1s/step - loss: 0.0046 - accuracy: 0.9989 - val_loss: 0.0470 - val_accuracy: 0.9912
[Trial complete]
[Trial summary]
 |-Trial ID: 7fd78984640e35c2dbe0c037d38a266b
 |-Score: 0.039056800348457425
 |-Best step: 0
 > Hyperparameters:
 |-classification_head_1/dropout_rate: 0
 |-dense_block_1/dropout_rate: 0
 |-dense_block_1/num_layers: 2
 |-dense_block_1/units_0: 32
 |-dense_block_1/units_1: 32
 |-dense_block_1/use_batchnorm: False
 |-image_block_1/augment: True
 |-image_block_1/block_type: resnet
 |-image_block_1/normalize: True
 |-image_block_1/res_net_block_1/conv3_depth: 4
 |-image_block_1/res_net_block_1/conv4_depth: 6
 |-image_block_1/res_net_block_1/pooling: avg
 |-image_block_1/res_net_block_1/version: v2
 |-optimizer: adam
Train for 1500 steps, validate for 375 steps
Epoch 1/1000
1500/1500 [==============================] - 53s 35ms/step - loss: 0.1769 - accuracy: 0.9466 - val_loss: 0.0677 - val_accuracy: 0.9808
Epoch 2/1000
1500/1500 [==============================] - 52s 35ms/step - loss: 0.0826 - accuracy: 0.9742 - val_loss: 0.0527 - val_accuracy: 0.9848

................................................

1500/1500 [==============================] - 52s 35ms/step - loss: 0.0199 - accuracy: 0.9934 - val_loss: 0.0477 - val_accuracy: 0.9903
Epoch 27/1000
1500/1500 [==============================] - 51s 34ms/step - loss: 0.0163 - accuracy: 0.9944 - val_loss: 0.0447 - val_accuracy: 0.9910
[Trial complete]
[Trial summary]
 |-Trial ID: 50634a5647ede3546f77215692e42491
 |-Score: 0.039515967257394854
 |-Best step: 0
 > Hyperparameters:
 |-classification_head_1/dropout_rate: 0.5
 |-classification_head_1/spatial_reduction_1/reduction_type: flatten
 |-dense_block_1/dropout_rate: 0
 |-dense_block_1/num_layers: 1
 |-dense_block_1/units_0: 128
 |-dense_block_1/use_batchnorm: False
 |-image_block_1/augment: False
 |-image_block_1/block_type: vanilla
 |-image_block_1/conv_block_1/dropout_rate: 0.25
 |-image_block_1/conv_block_1/filters_0_0: 32
 |-image_block_1/conv_block_1/filters_0_1: 64
 |-image_block_1/conv_block_1/kernel_size: 3
 |-image_block_1/conv_block_1/max_pooling: True
 |-image_block_1/conv_block_1/num_blocks: 1
 |-image_block_1/conv_block_1/num_layers: 2
 |-image_block_1/conv_block_1/separable: False
 |-image_block_1/normalize: True
 |-optimizer: adam
INFO:tensorflow:Oracle triggered exit
Train for 1875 steps, validate for 375 steps
Epoch 1/1000
1875/1875 [==============================] - 65s 35ms/step - loss: 0.1580 - accuracy: 0.9514 - val_loss: 0.0500 - val_accuracy: 0.9843
Epoch 2/1000
1875/1875 [==============================] - 65s 35ms/step - loss: 0.0742 - accuracy: 0.9773 - val_loss: 0.0258 - val_accuracy: 0.9927

................................................

Epoch 41/1000
1875/1875 [==============================] - 64s 34ms/step - loss: 0.0151 - accuracy: 0.9955 - val_loss: 0.0019 - val_accuracy: 0.9996
Epoch 42/1000
1875/1875 [==============================] - 64s 34ms/step - loss: 0.0153 - accuracy: 0.9952 - val_loss: 0.0018 - val_accuracy: 0.9993

 

 

작년 초 이맘때, 홍콩 과기대 김성훈 교수님 강의를 듣고 나서 나도 뭔가 할 수 있지 않을까 막연한 기대를 가지고 있었던 머신러닝, 딥러닝, 인공지능....

 

하지만, 이래저래 진행되던 회사 업무와 과제때문에 밀려서 홀라강 다 까먹고....

 

기초도 없이 들어서 이젠 CNN이니, RNN이니 LSTM이니 하는 것들도 분명히 들어봤는데, 가물가물하다..

 

그래서 도서관에서 다시 집어든 책이 '딥다 딥러닝'

 

 

 

저자께서 서문에서 쉽지 않다고 엄포(?)를 놓으시는데, 포스팅이라도 하지 않으면 공부를 안 할 거 같아서, 

 

거창하게 딥러닝 공부한다는 것보다 책 하나를 끝장(^^)내 보고 싶어서 다시 시작합니다.

 

서문에 보니 파이썬 3.5와 케라스가 설치되어야 한다고 함.

 

1. 내 PC에 설치된 anaconda는 버전 체크 : 4.8.1

 > conda --version

 

2. 이 버전의 아나콘다에서 선택할 수 있는 python 버전 확인

 > conda search version

  (2.7.17, 3.5.6, 3.6.10, 3.7.6, 3.8.1)

3. 파이썬 버전 3.5.6으로 구성된 가상환경 생성(이름 : ddeepl(딥다딥러닝), tensorflow, keras 설치)

 > conda create --name ddeepl python=3.5.6 tensorflow keras

   > 엔터 또는 y 입력 후 엔터로 설치 시작함

 

설치 완료시 위와 같이 화면이 나타나고, 

 

4. 아나콘다 가상 환경 목록을 볼 수 있음

 > conda env list

 

5. 방금 생성한 ddeepl을 활성화

 > conda activate ddeepl

6. 파이썬 버전 확인 및 파이썬 구동 후 keras가 import 되는지 확인

 

 

+ Recent posts