'프로그램 사용'에 해당되는 글 2513건

  1. 2026.05.20 patchcore
  2. 2026.05.20 MVTec AD 데이터 셋
  3. 2026.05.19 VAD - PaDiM, Patchcore - 정상이 아님을 탐지
  4. 2026.05.19 octave로 공간 fft 돌려보기
  5. 2026.05.19 octave - pkg load image
  6. 2026.05.14 U-net, segmentation
  7. 2026.05.14 QAT, PTQ .. 모델 경량화
  8. 2026.05.11 리버스 ssh + autossh
  9. 2026.05.06 unet
  10. 2026.04.29 ffmpeg을 이용하여 gif 만들기

VAD 분야 SOTA(state of the art. 별걸 다 줄여 -_-) 모델이라는데 무거워서 모바일이나 엣지에서 돌리긴 좀 무리일 듯.

 

[링크 : https://coderecording.tistory.com/9]

[링크 : https://github.com/amazon-science/patchcore-inspection]

[링크 : https://github.com/tiskw/patchcore-ad]

'프로그램 사용 > yolo_tensorflow' 카테고리의 다른 글

STFPM - Student-Teacher Feature Pyramid Matching  (0) 2026.05.20
EfficientAD  (0) 2026.05.20
MVTec AD 데이터 셋  (0) 2026.05.20
VAD - PaDiM, Patchcore - 정상이 아님을 탐지  (0) 2026.05.19
U-net, segmentation  (0) 2026.05.14
Posted by 구차니

가장 만만한(?) 데이터 셋인 것 같은데

DAGM 데이터셋은 총 10가지 도메인의 데이터로 구성되어 있으며, 모델링을 통해 가상으로 결함을 합성하여 만든 데이터셋입니다. NanoTWICE 데이터셋은 nanofibrous material 데이터이며 5장의 정상 데이터와 40장의 결함 데이터로 구성이 되어있습니다

자, 이제 오늘의 본론인 MVTec-AD 데이터셋에 대해 설명드리겠습니다. 앞서 설명드렸던 DAGM, NanoTWICE의 아쉬웠던 부분들을 개선하며 총 15종류의 도메인의 데이터셋을 구축하였습니다. 크게는 Texture와 Object로 구분을 하였고, 각각 5가지, 10가지 종류의 도메인 데이터로 구성이 되어있습니다

[링크 : https://hoya012.github.io/blog/MVTec-AD/]

 

5.3 GB(!!)

[링크 : https://www.kaggle.com/datasets/ipythonx/mvtec-ad]

[링크 : https://www.mvtec.com/research-teaching/datasets/mvtec-ad]

[링크 : https://huggingface.co/datasets/Voxel51/mvtec-ad]

 

5.9 GB(!!!)

[링크 : https://www.kaggle.com/datasets/mhskjelvareid/dagm-2007-competition-dataset-optical-inspection]

[링크 : https://github.com/M-3LAB/awesome-industrial-anomaly-detection]

'프로그램 사용 > yolo_tensorflow' 카테고리의 다른 글

EfficientAD  (0) 2026.05.20
patchcore  (0) 2026.05.20
VAD - PaDiM, Patchcore - 정상이 아님을 탐지  (0) 2026.05.19
U-net, segmentation  (0) 2026.05.14
QAT, PTQ .. 모델 경량화  (0) 2026.05.14
Posted by 구차니

비정상을 학습시키는게 아니라

정상만 학습시키고 정상에서 벗어나는 것을 탐지하는 기법

 

PaDiM

Ganomaly (GAN + Anomaly Detection)

[링크 : https://actionpower.medium.com/액션파워-lab-이미지에서-이상-영역-탐지-visual-anomaly-detection-는-어떻게-할까-6da65866366b]

 

PaDiM-Lite / PatchCore-Lite

[링크 : https://www.alphaxiv.org/ko/overview/2603.20288v1]

 

PaDiM (Patch Ditrubution Modeling)

[링크 : https://huggingface.co/papers/2011.08785]

[링크 : https://data-analysis-expertise.tistory.com/128]

[링크 : https://dippingtodeepening.tistory.com/110]

[링크 : https://cumulu-s.tistory.com/44]

 

VAD - Visual Anomaly Detection

MVTec-AD, MVTec-3D, MVTec-LOCO, VisA  데이터 셋

[링크 : https://velog.io/@barley_15/논문-리뷰-A-Survey-on-Visual-Anomaly-Detection-Challenge-Approach-and-Prospect]

 

PatchCore

[링크 : https://velog.io/@ljwljy51/PatchCore-Paper-Review]

 

PatchCore

SPADE , PaDiM

[링크 : https://ffighting.net/deep-learning-paper-review/anomaly-detection/patchcore/]

'프로그램 사용 > yolo_tensorflow' 카테고리의 다른 글

patchcore  (0) 2026.05.20
MVTec AD 데이터 셋  (0) 2026.05.20
U-net, segmentation  (0) 2026.05.14
QAT, PTQ .. 모델 경량화  (0) 2026.05.14
unet  (0) 2026.05.06
Posted by 구차니
프로그램 사용/octave2026. 5. 19. 16:19

귀찮으니(!) gpt를 통해서 딸깍~ 시전

% 이미지 읽기
img = imread("test.jpg");

% RGB -> grayscale 직접 변환
if ndims(img) == 3

    r = double(img(:,:,1));
    g = double(img(:,:,2));
    b = double(img(:,:,3));

    gray = 0.299*r + 0.587*g + 0.114*b;
else
    gray = double(img);
end

% 블럭 크기
blockSize = 32;

[h, w] = size(gray);

% 결과 저장
scoreMap = zeros(floor(h/blockSize), floor(w/blockSize));

% 블럭별 FFT 처리
for by = 1:blockSize:(h - blockSize + 1)
    for bx = 1:blockSize:(w - blockSize + 1)

        % 블럭 추출
        block = gray(by:by+blockSize-1, bx:bx+blockSize-1);

        % 평균 제거
        block = block - mean(block(:));

        % FFT
        F = fft2(block);

        % magnitude
        mag = abs(F);

        % 중앙 이동
        mag = fftshift(mag);

        center = floor(blockSize/2) + 1;

        radius = 4;

        [X, Y] = meshgrid(1:blockSize, 1:blockSize);

        dist = sqrt((X-center).^2 + (Y-center).^2);

        % 고주파만 사용
        mask = dist > radius;

        % 고주파 에너지
        energy = sum(mag(mask).^2);

        % diversity score
        score = log(1 + energy);

        iy = (by-1)/blockSize + 1;
        ix = (bx-1)/blockSize + 1;

        scoreMap(iy, ix) = score;
    end
end

% 정규화
scoreMap = scoreMap - min(scoreMap(:));
scoreMap = scoreMap / max(scoreMap(:));

% 결과 표시
figure;
imshow(uint8(gray));
title("Original");

figure;
imagesc(scoreMap);
axis image;
colorbar;
title("FFT Diversity Map");

 

원본

그레이스케일

 

원인은 모르겠으나 blocksize 5 이하로는 검은색으로 나온다.

 

blocksize = 6 blocksize = 8 blocksize = 10
blocksize = 12 blocksize = 16 blocksize = 32

 

원본

 

그레이스케일

 

blocksize = 6 blocksize = 10 blocksize = 12

blocksize = 16 blocksize = 18 blocksize = 20
blocksize = 24 blocksize = 28 blocksize = 32

 

이미지 폭이 큰 차이가 없어서 그런진 모르겠지만..

blocksize 10~12 정도가 가장 무난한 것 같다.

 

rgb에 대해서 각각 처리 후 합산인데 눈에 보이는건 크게 달라 보이진 않았는데

img = imread("test.jpg");

img = double(img);

blockSize = 32;

[h, w, c] = size(img);

scoreMap = zeros(floor(h/blockSize), floor(w/blockSize));

for by = 1:blockSize:(h - blockSize + 1)
    for bx = 1:blockSize:(w - blockSize + 1)

        totalEnergy = 0;

        % RGB 각각 처리
        for ch = 1:3

            block = img(by:by+blockSize-1, ...
                        bx:bx+blockSize-1, ch);

            block = block - mean(block(:));

            F = fft2(block);

            mag = abs(fftshift(F));

            center = floor(blockSize/2) + 1;

            radius = 4;

            [X, Y] = meshgrid(1:blockSize, 1:blockSize);

            dist = sqrt((X-center).^2 + (Y-center).^2);

            mask = dist > radius;

            energy = sum(mag(mask).^2);

            totalEnergy = totalEnergy + energy;
        end

        score = log(1 + totalEnergy);

        iy = (by-1)/blockSize + 1;
        ix = (bx-1)/blockSize + 1;

        scoreMap(iy, ix) = score;
    end
end

scoreMap = scoreMap - min(scoreMap(:));
scoreMap = scoreMap / max(scoreMap(:));

figure;
imshow(uint8(img));

figure;
imagesc(scoreMap);
axis image;
colorbar;
title("RGB FFT Diversity");

 

blocksize = 10

 

두개를 비교해보면 하단에 파란색 마트 정도는 좀 더 잘 보이는 차이가 있는데

처리 시간대비로는 그리 큰 효과를 얻긴 힘들지도 모르겠다.

grayscale rgb 각각 처리후 합산

 

 LAB 으로 전환해서 색상에 대해서 처리, blocksize = 10

% ==========================================
% LAB 기반 Fabric Diversity / Anomaly Map
% ==========================================

img = imread("test.jpg");

img = double(img) / 255.0;

%------------------------------------------
% RGB -> LAB 변환
%------------------------------------------

% sRGB gamma correction 제거
mask = img <= 0.04045;

img_linear = zeros(size(img));

img_linear(mask) = img(mask) / 12.92;
img_linear(~mask) = ((img(~mask)+0.055)/1.055).^2.4;

% RGB -> XYZ
M = [ ...
    0.4124564 0.3575761 0.1804375;
    0.2126729 0.7151522 0.0721750;
    0.0193339 0.1191920 0.9503041];

[h, w, ~] = size(img);

rgb_reshaped = reshape(img_linear, [], 3);

xyz = rgb_reshaped * M';

X = xyz(:,1) / 0.95047;
Y = xyz(:,2);
Z = xyz(:,3) / 1.08883;

% XYZ -> LAB helper
f = @(t) ((t > 0.008856).*t.^(1/3) + ...
         (t <= 0.008856).*(7.787*t + 16/116));

fx = f(X);
fy = f(Y);
fz = f(Z);

L = 116*fy - 16;
A = 500*(fx - fy);
B = 200*(fy - fz);

lab = zeros(h, w, 3);

lab(:,:,1) = reshape(L, h, w);
lab(:,:,2) = reshape(A, h, w);
lab(:,:,3) = reshape(B, h, w);

%------------------------------------------
% FFT Block Analysis
%------------------------------------------

blockSize = 32;
step = 16;   % overlap sliding

outH = floor((h - blockSize)/step) + 1;
outW = floor((w - blockSize)/step) + 1;

scoreMap = zeros(outH, outW);

% FFT mask 생성
center = floor(blockSize/2) + 1;

[Xm, Ym] = meshgrid(1:blockSize, 1:blockSize);

dist = sqrt((Xm-center).^2 + (Ym-center).^2);

radius = 4;

highMask = dist > radius;

%------------------------------------------
% Sliding Window
%------------------------------------------

oy = 1;

for by = 1:step:(h - blockSize + 1)

    ox = 1;

    for bx = 1:step:(w - blockSize + 1)

        totalEnergy = 0;

        % LAB 각 채널 FFT
        for ch = 1:3

            block = lab( ...
                by:by+blockSize-1, ...
                bx:bx+blockSize-1, ...
                ch);

            % 평균 제거
            block = block - mean(block(:));

            % FFT
            F = fft2(block);

            mag = abs(fftshift(F));

            % 고주파 에너지
            energy = sum(mag(highMask).^2);

            totalEnergy = totalEnergy + energy;
        end

        % 로그 스케일
        score = log(1 + totalEnergy);

        scoreMap(oy, ox) = score;

        ox = ox + 1;
    end

    oy = oy + 1;
end

%------------------------------------------
% Normalize
%------------------------------------------

scoreMap = scoreMap - min(scoreMap(:));
scoreMap = scoreMap / max(scoreMap(:));

%------------------------------------------
% Display
%------------------------------------------

figure;
imagesc(img);
axis image;
title("Original");

figure;
imagesc(scoreMap);
axis image;
colorbar;
title("LAB FFT Diversity / Anomaly Map");

 

block 10, step 16

 

block 10, step 10

 

rgb 각각 처리후 합산 RGB->LAB, 색상만 처리

'프로그램 사용 > octave' 카테고리의 다른 글

octave - pkg load image  (0) 2026.05.19
octave csv에서 읽어들이기  (0) 2024.11.26
octave audioread wav  (0) 2023.07.12
공짜 matlab? octave  (0) 2015.11.05
Posted by 구차니
프로그램 사용/octave2026. 5. 19. 16:08

이미지 팩(?) 쓰려는데 에러가 나서 찾아보니 패키지 설치하란다. 

>> pkg load image;
error: package image is not installed
error: called from
    load_packages at line 47 column 7
    pkg at line 623 column 7
>>

 

멀 이렇게 많이 깔어.. -_-

$ sudo apt install octave-image
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료        
다음의 추가 패키지가 설치될 것입니다 :
  default-jre-headless epstool fonts-freefont-otf libbtf1 libcombblas1.16.0
  libcxsparse3 libemf1 libfftw3-mpi3 libfltk-gl1.3 libfltk1.3 libglpk40
  libgraphicsmagick++-q16-12 libgraphicsmagick-q16-3 libhypre-2.22.1 libklu1
  libmumps-5.4 libpetsc-real3.15 libplot2c2 libpstoedit0c2a libptscotch-6.1
  libqhull8.0 libqrupdate1 libqscintilla2-qt5-15 libqscintilla2-qt5-l10n
  libscalapack-openmpi2.1 libscotch-6.1 libsundials-ida4
  libsundials-nvecparallel-petsc4 libsundials-nvecserial4
  libsundials-sunlinsol2 libsundials-sunmatrix2 libsuperlu-dist7
  libtrilinos-amesos-13.2 libtrilinos-aztecoo-13.2 libtrilinos-epetra-13.2
  libtrilinos-epetraext-13.2 libtrilinos-galeri-13.2 libtrilinos-ifpack-13.2
  libtrilinos-kokkos-13.2 libtrilinos-ml-13.2 libtrilinos-teuchos-13.2
  libtrilinos-trilinosss-13.2 libtrilinos-triutils-13.2
  libtrilinos-zoltan-13.2 mpi-default-bin octave octave-common octave-doc
  openmpi-bin openmpi-common pstoedit
제안하는 패키지:
  default-jre libfftw3-mpi-dev libiodbc2-dev default-libmysqlclient-dev
  graphicsmagick-dbg libqscintilla2-doc scalapack-doc octave-dev gfortran
  | fortran-compiler
다음 새 패키지를 설치할 것입니다:
  default-jre-headless epstool fonts-freefont-otf libbtf1 libcombblas1.16.0
  libcxsparse3 libemf1 libfftw3-mpi3 libfltk-gl1.3 libfltk1.3 libglpk40
  libgraphicsmagick++-q16-12 libgraphicsmagick-q16-3 libhypre-2.22.1 libklu1
  libmumps-5.4 libpetsc-real3.15 libplot2c2 libpstoedit0c2a libptscotch-6.1
  libqhull8.0 libqrupdate1 libqscintilla2-qt5-15 libqscintilla2-qt5-l10n
  libscalapack-openmpi2.1 libscotch-6.1 libsundials-ida4
  libsundials-nvecparallel-petsc4 libsundials-nvecserial4
  libsundials-sunlinsol2 libsundials-sunmatrix2 libsuperlu-dist7
  libtrilinos-amesos-13.2 libtrilinos-aztecoo-13.2 libtrilinos-epetra-13.2
  libtrilinos-epetraext-13.2 libtrilinos-galeri-13.2 libtrilinos-ifpack-13.2
  libtrilinos-kokkos-13.2 libtrilinos-ml-13.2 libtrilinos-teuchos-13.2
  libtrilinos-trilinosss-13.2 libtrilinos-triutils-13.2
  libtrilinos-zoltan-13.2 mpi-default-bin octave octave-common octave-doc
  octave-image openmpi-bin openmpi-common pstoedit
0개 업그레이드, 52개 새로 설치, 0개 제거 및 9개 업그레이드 안 함.
49.9 M바이트 아카이브를 받아야 합니다.
이 작업 후 171 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] 

 

엥.. 패키지 깔고 나니 octave 아이콘이 하나 더 생기고 실행해보니, 7.1.0 과 6.4.0 두개가 생겼다.

 

7.1.0 에서는 여전히 에러가 나는데

6.4.0 에서는 잘 된다. 머냐..? 버전 가리냐?

'프로그램 사용 > octave' 카테고리의 다른 글

octave로 공간 fft 돌려보기  (0) 2026.05.19
octave csv에서 읽어들이기  (0) 2024.11.26
octave audioread wav  (0) 2023.07.12
공짜 matlab? octave  (0) 2015.11.05
Posted by 구차니

 

[링크 : https://github.com/PINTO0309/TensorflowLite-UNet]

[링크 : https://huggingface.co/qualcomm/Unet-Segmentation]

[링크 : https://github.com/milesial/Pytorch-UNet]

[링크 : https://github.com/Rumit95/Auto_Segmentation] semantic segmentation

[링크 : https://github.com/Rumit95/Semantic-Segmentation-of-Image]

 

 

  • 클래스 1: 애완 동물에 속하는 픽셀
  • 클래스 2: 애완동물과 접하는 픽셀
  • 클래스 3: 위에 속하지 않음/주변 픽셀

[링크 : https://www.tensorflow.org/tutorials/images/segmentation?hl=ko]

'프로그램 사용 > yolo_tensorflow' 카테고리의 다른 글

MVTec AD 데이터 셋  (0) 2026.05.20
VAD - PaDiM, Patchcore - 정상이 아님을 탐지  (0) 2026.05.19
QAT, PTQ .. 모델 경량화  (0) 2026.05.14
unet  (0) 2026.05.06
얼굴인식 관련 조사  (0) 2025.10.02
Posted by 구차니

QAT - Quantization Aware Training

양자화 하지 않고 학습후

# Load MNIST dataset
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# Normalize the input image so that each pixel value is between 0 to 1.
train_images = train_images / 255.0
test_images = test_images / 255.0

# Define the model architecture.
model = keras.Sequential([
  keras.layers.InputLayer(input_shape=(28, 28)),
  keras.layers.Reshape(target_shape=(28, 28, 1)),
  keras.layers.Conv2D(filters=12, kernel_size=(3, 3), activation='relu'),
  keras.layers.MaxPooling2D(pool_size=(2, 2)),
  keras.layers.Flatten(),
  keras.layers.Dense(10)
])

# Train the digit classification model
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(
  train_images,
  train_labels,
  epochs=1,
  validation_split=0.1,
)

 

양자화 모델로 변환하고, 파인튜닝

import tensorflow_model_optimization as tfmot

quantize_model = tfmot.quantization.keras.quantize_model

# q_aware stands for for quantization aware.
q_aware_model = quantize_model(model)

# `quantize_model` requires a recompile.
q_aware_model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

q_aware_model.summary()

train_images_subset = train_images[0:1000] # out of 60000
train_labels_subset = train_labels[0:1000]

q_aware_model.fit(train_images_subset, train_labels_subset,
                  batch_size=500, epochs=1, validation_split=0.1)

[링크 : https://www.tensorflow.org/model_optimization/guide/quantization/training?hl=ko]

 

PTQ - Post Training Quantization

[링크 : https://www.tensorflow.org/model_optimization/guide/quantization/post_training?hl=ko]

 

pruning - 0에 가까운 애들 없애기 (가지치기)

quantization (양자화)

distillation (증류)

low rank factorization (NxM -> Xxk kxM)

[링크 : https://u-b-h.tistory.com/13]

[링크 : https://asidefine.tistory.com/318]

'프로그램 사용 > yolo_tensorflow' 카테고리의 다른 글

VAD - PaDiM, Patchcore - 정상이 아님을 탐지  (0) 2026.05.19
U-net, segmentation  (0) 2026.05.14
unet  (0) 2026.05.06
얼굴인식 관련 조사  (0) 2025.10.02
keras - transfer learning / fine tuning  (0) 2025.09.17
Posted by 구차니

아따 많이도 찾아봤었네 -_-

집에는 라즈베리 하나 켜놓고 회사에 켠 녀석을 집으로 SSH 접속하게 하고

집에서는 내부 아이피로 역으로 접속할수 있는 시스템을 만들려고 하는 중

 

[링크 : https://manpages.ubuntu.com/manpages/jammy/man1/autossh.1.html]

[링크 : https://lstm.tistory.com/10]

[링크 : https://m.clien.net/service/board/cm_linux/4344761]

[링크 : https://sangwonyoon.tistory.com/m/entry/Autossh로-SSH-연결-유지하기]

 

2018.05.14 - [프로그램 사용/ssh scp sftp] - reverse SSH

2021.01.03 - [프로그램 사용/ssh scp sftp] - reverse ssh

 

 

-------------------

2026.05.13

아래 링크의 옵션 참조했음

[링크 : https://donotlimityourself.tistory.com/33[

 

private(회사)

원격지에 2222 포트로 현재 pc의 22번 포트를 돌린다~ 라는 의미 인듯한데

그래서 listen에 추가로 포트가 열리지도 않았고, 정상적으로 실행이 되는 건가 보다.

$ ssh minimonk@집SSH도메인 -p 8022 -f -N -T -R 2222:localhost:22
minimonk@집SSH도메인's password: 
$ ps -ef | grep ssh
root         900       1  0  5월12 ?      00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root        2298     900  0  5월12 ?      00:00:00 sshd: minimonk [priv]
minimonk    2385    2298  0  5월12 ?      00:05:27 sshd: minimonk@pts/0
root        5656     900  0  5월12 ?      00:00:00 sshd: minimonk [priv]
minimonk    5735    5656  0  5월12 ?      00:00:00 sshd: minimonk@pts/7
minimonk   10717       1  0 09:58 ?        00:00:00 ssh minimonk@집SSH도메인 -p 8022 -f -N -T -R 2222:localhost:22
minimonk   10719    5736  0 09:58 pts/7    00:00:00 grep --color=auto ssh

$ netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:39557         0.0.0.0:*               LISTEN      3128/language_serve 
tcp        0      0 127.0.0.1:5803          0.0.0.0:*               LISTEN      5350/llama-server   
tcp        0      0 127.0.0.1:38605         0.0.0.0:*               LISTEN      3128/language_serve 
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:6012          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:45837         0.0.0.0:*               LISTEN      6184/language_serve 
tcp        0      0 0.0.0.0:7860            0.0.0.0:*               LISTEN      5584/venv/bin/pytho 
tcp        0      0 127.0.0.1:36141         0.0.0.0:*               LISTEN      6184/language_serve 
tcp        0      0 127.0.0.1:36197         0.0.0.0:*               LISTEN      6184/language_serve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:44747         0.0.0.0:*               LISTEN      3016/antigravity    
tcp        0      0 127.0.0.1:35159         0.0.0.0:*               LISTEN      6061/exe            
tcp        0      0 127.0.0.1:34279         0.0.0.0:*               LISTEN      3016/antigravity    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::5900                 :::*                    LISTEN      1502/gnome-remote-d 
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       0      0 :::8080                 :::*                    LISTEN      5256/./llama-swap   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:6010                :::*                    LISTEN      -                   
tcp6       0      0 ::1:6012                :::*                    LISTEN      -                   
tcp6       0      0 :::3389                 :::*                    LISTEN      1502/gnome-remote-d 

 

public(내 집)

접속전
$ netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -  

접속후
$ netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:2222                :::*                    LISTEN      -      

 

SSH 옵션을 보면 -fNTR 에서  -f이 백그라운드로 뜨게 하느것이고

NT는 터미널 관련, 명령 실행 관련

R은 원격지 포트에 내껄 붙인다는 의미

역시 NTR은 좋은것이여... (응?)

     -f      Requests ssh to go to background just before command execution.
             This is useful if ssh is going to ask for passwords or
             passphrases, but the user wants it in the background.  This im‐
             plies -n.  The recommended way to start X11 programs at a remote
             site is with something like ssh -f host xterm.

             If the ExitOnForwardFailure configuration option is set to “yes”,
             then a client started with -f will wait for all remote port for‐
             wards to be successfully established before placing itself in the
             background.  Refer to the description of ForkAfterAuthentication
             in ssh_config(5) for details.


     -N      Do not execute a remote command.  This is useful for just for‐
             warding ports.  Refer to the description of SessionType in
             ssh_config(5) for details.

     -T      Disable pseudo-terminal allocation.

     -R [bind_address:]port:host:hostport
     -R [bind_address:]port:local_socket
     -R remote_socket:host:hostport
     -R remote_socket:local_socket
     -R [bind_address:]port
             Specifies that connections to the given TCP port or Unix socket
             on the remote (server) host are to be forwarded to the local
             side.

 

이제 autossh를 설치하고

$ sudo apt-get install autossh
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  autossh
0 upgraded, 1 newly installed, 0 to remove and 47 not upgraded.
Need to get 29.2 kB of archives.
After this operation, 89.1 kB of additional disk space will be used.
Get:1 http://kr.archive.ubuntu.com/ubuntu jammy/universe amd64 autossh amd64 1.4g-1 [29.2 kB]
Fetched 29.2 kB in 0s (217 kB/s)   
Selecting previously unselected package autossh.
(Reading database ... 322586 files and directories currently installed.)
Preparing to unpack .../autossh_1.4g-1_amd64.deb ...
Unpacking autossh (1.4g-1) ...
Setting up autossh (1.4g-1) ...
Processing triggers for man-db (2.10.2-1) ...

 

 public 쪽에 로그인이 되도록 키를 복사하려는데 안되네 -_-???

아무튼 키를 생성하고 해주면 끝

$ ssh-copy-id -p 8022 minimonk@집SSH도메인
/usr/bin/ssh-copy-id: ERROR: No identities found

$ ssh-keygen

 

-f 를 넣으면 키를 넣어줘도 로그인이 안되서 일단 빼고 하니 되긴한데..

$ autossh -M -0 -o "ServerAliveinterval 30" -o "ServerAliveCountMax 3" -T -R 2222:localhost:22 minimonk@집SSH도메인 -p 2022

[링크 : https://sangwonyoon.tistory.com/entry/Autossh로-SSH-연결-유지하기]

 

autossh가 죽으면 어쩌지 싶어서 데몬으로 된 거 없나 찾아 봐야 할 듯.

[링크 : https://tecadmin.net/autossh-persistent-ssh-connections/]

 

 

+

여러 번의 인자를 사용하면 복수의 포트를 포워딩 할 수 있다.

ssh remote-host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22

[링크 : https://stackoverflow.com/questions/29936948/ssh-l-forward-multiple-ports]

 

+

아래를 public 쪽 sshd_config 에 설정해주고 sshd를 재기동하고

$ cat /etc/ssh/sshd_config
# GatewayPorts no
GatewayPorts yes
$ sudo systemctl restart sshd

 

2222 대신 0.0.0.0:2222 라고 입력하고 실행하면

$ ssh minimonk@집SSH도메인 -p 8022 -f -N -T -R 0.0.0.0:2222:localhost:22

 

localhost로 되어있던걸

$ netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:2222                :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -

 

0.0.0.0 으로 바꾸어서 public 서버의 서비스 인것 처럼 붙일수도 있다.

$ netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::2222                 :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -

'프로그램 사용 > ssh scp sftp' 카테고리의 다른 글

ssh -t  (0) 2025.09.08
ssh-copy-id  (0) 2025.04.18
ssh socks proxy  (0) 2024.07.22
ssh ecdsa 미지원(ubuntu 22.04)  (0) 2023.05.30
ubuntu ssh x11 forwarding시 gnome 화면 끌어오기  (0) 2022.07.11
Posted by 구차니

'프로그램 사용 > yolo_tensorflow' 카테고리의 다른 글

U-net, segmentation  (0) 2026.05.14
QAT, PTQ .. 모델 경량화  (0) 2026.05.14
얼굴인식 관련 조사  (0) 2025.10.02
keras - transfer learning / fine tuning  (0) 2025.09.17
keras ssd mobilenet  (0) 2025.09.16
Posted by 구차니

순서가 은근히 중요하네

4 frame(250ms 간격으로 Fan1.bmp / Fan2.bmp / Fan3.bmp 를 읽어서 만들고 무한반복 시킴

아래는 되는 예

$ ffmpeg -framerate 4 -i Fan%d.bmp -loop 0 fan_1000ms.gif

 

시간 간격 안되는 예

ffmpeg -i Fan%d.bmp -framerate 3 -loop 0 fan_333ms.gif

 

ffmpeg에서 %d는 확장하는데 ? 와 *은 쉘에서 확장되서 정상적으로 작동하지 않는다

명시적으로는 -i "concat:파일명|다음파일명" 으로 하면 된다.

ffmpeg -framerate 3 -i "concat:Fan1.bmp|Fan2.bmp|Fan3.bmp" -loop 0 fan_500ms.gif

 

Posted by 구차니