Team Ai
Apppublic

VJyzCELERY/ObjectClassificationPlayground

sourceHugging Facemitupdated 10mo agoView on Hugging Face
0likes
model.cpython-312.pyc130 linesDownload Raw Back to __pycache__
1�

2/DiM��d�ddlZddlmZddlZddlZddlmZddlm	Z	m3Z4ddlZddlmcm
ZddlmZddlZddlZddlmZeGd�d��ZGd�dej.�ZGd	�d5ej.�ZGd�dej.�ZGd
�dej.�Zeddefd��Zy)�N)�	dataclass)�hog�local_binary_pattern)�Imagec�|�eZdZdZdZdZdZdZdZdZ	dZ6dZdZd	Z
d7ZdZdZd
Zd8Zd9ZdZdZdZdZdZdZdZdZdZdZdZy)�Config)�r	��g�������?��	)�r�rrzL2-Hysg�?�d��)r10r11g{�G�z�?���r�12g�?N)�__name__�13__module__�__qualname__�img_size�in_channels�
fc_num_layers�conv_hidden_dim�conv_kernel_size�dropout�classical_downsample�hog_orientations�hog_pixels_per_cell�hog_cells_per_block�hog_block_norm�canny_sigma�	canny_low�14canny_high�gaussian_ksize�gaussian_sigmaX�gaussian_sigmaY�harris_block_size�harris_ksize�harris_k�lbp_P�lbp_R�gabor_ksize�gabor_sigma�gabor_theta�gabor_lambda�gabor_gamma�sobel_ksize���QD:\Backups\Code\Python\Computer-Vision\LEC\ClassicalObjectClassifier\src\model.pyrrs���
�H��K��M��O����G�����"�� ���N��K��I��J��N��O��O����L��H�
�E�
�E��K��K��K��L��K��Kr6rc�D��eZdZdef�fd�Zd�Zd�Zd�Z			dd�Z�xZ	S)�CNNFeatureExtractor�configc�L��t�|��g}|j|_|j}|j|_d}t	|j15�D]�}|j
tj|||jd|jdz���|j
tj|��|j
tj��|j
tjd��|}|dz}��tj|�|_y)N� rr)r�out_channels�kernel_size�stride�paddingr)�super�__init__rr�ranger�append�nn�Conv2dr�BatchNorm2d�ReLU�	MaxPool2d�16Sequential�layers)�selfr:rK�17in_channel�out_channel�i�	__class__s      �r7rBzCNNFeatureExtractor.__init__=s����
������!�-�-����'�'�18�����
����v�-�-�.�A��M�M�"�)�)�19��`f�`w�`w�@A�JP�Ja�Ja�ef�Jf�g�
h��M�M�"�.�.��5�6��M�M�"�'�'�)�$��M�M�"�,�,�u�-�.�"�J���N�K�
/��m�m�V�,��r6c�H�t|j��jS�N��next�20parameters�device�rLs r7�21get_devicezCNNFeatureExtractor.get_deviceL����D�O�O�%�&�-�-�-r6c�@�t|t�r4t|dtj�rtj|d��}t|tj�r�t|j�dk(r6|dd�dd�df}tj|d�}|jddd�}net|j�dk(r*|jddd�}tj|d�}n#|jdk(r|jdddd�}tj|�j�}n:t|tj�r |jdk(r|jd�}|j|j!��}|j#|�S)Nr��axisrrr22�)�23isinstance�list�np�ndarray�stack�len�shape�expand_dims�	transpose�ndim�torch�24from_numpy�float�Tensor�	unsqueeze�torXrK�rL�x�kwargss   r7�forwardzCNNFeatureExtractor.forwardNs0���a����!�A�$��25�26�+��H�H�Q�Q�'���a��27�28�#��1�7�7�|�q� ��a��D�j�M���N�N�1�a�(���K�K��1�a�(���Q�W�W���"��K�K��1�a�(���N�N�1�a�(�����1���K�K��1�a��+��� � ��#�)�)�+�A�
��5�<�<�
(��v�v��{��K�K��N��29�$�$�t��� �30!���{�{�1�~�r6c�$�|j�tj�5tjd|j|j31d|j32df|j
���}||�}ddd�|S#1swYSxYw)Nrr)rV)�evalrh�no_grad�zerosrrrX)rLro�outs   r7�outputzCNNFeatureExtractor.outputbst���	�	��
�]�]�_�����D�$�$�d�m�m�A�&6��
�
�a�8H�I����(��A�33�q�'�C�
��34���35�s�AB�Bc	��)�|j�|j�}t|tj�rStj|�jddd�j�jd�j|�}nft|t36j�rA|jdk(r |jd�j|�n|j|�}ntd��|j�D��	cgc]#\}}	t|	tj �r||	f��%}37}}	g}|38D�]�\}}g�)�)fd�}
|j#|
�}||�}|j%��)dd}|j&\}}}|�r�|dz}t)|dz|�}t)||dzz39||dzz40�}||z}t)d|�}t+tj,||z��}t/j0||d|zd|zf��\}}tj2|�}d}t5|�D]�}||z}||z}||dz|dzdzj7�} t5d�D]B}!| |!}"|"|"j)�z41|"j9�|"j)�z42d	zz| |!<�D| jddd�j;�} |||fj=| �|||fj?d43�|||fjAd|dz�d|dzdz��d
��|dz
}��|dz}#t5|�D]�}$||z}||z}||#|$z}!|!|!j)�z44|!j9�|!j)�z45d	zz}!|||fj=|!d��|||fj?d46�|||fjAd|#|$z��d
��|dz
}��t5|||z�D]"}%|%|z}|%|z}|||fj?d47��$|jCd|�d�d��t/jD��nt)||�}&t)d|&�}t+tj,|&|z��}t/j0||d|zd|zf��\}}tj2|�}t5|&�D]=}%|%|z}|%|z}|||fj=||%d��|||fj?d48��?t5|&||z�D]"}%|%|z}|%|z}|||fj?d49��$|jCd|��d��t/jD�|rt/jF�tIjJ�}'|jM|'ddd��|'jOd�tQjR|'�jUd�}(|jWtjX|(��t/jZ|����|Scc}	}w)Nrrrr50z.input_image must be np.ndarray or torch.Tensorc�`���j|j�j��yrR)rD�detach�cpu)�module�inputrw�activationss   �r7�hook_fnz.CNNFeatureExtractor.visualize.<locals>.hook_fn�s ����"�"�6�=�=�?�#6�#6�#8�9r6r]��figsize�:�0�yE>�offzRGB �-r
��fontsize�gray��cmapzCh zLayer: z (Coupled RGB + Grayscale)�r�png��tight��format�dpi�bbox_inches�RGB).rsrXr^r`rarhri�permuterjrlrmrkrg�	TypeError�
named_modulesrErH�register_forward_hook�removerd�min�int�ceil�plt�subplots�51atleast_2drC�clone�max�numpy�imshowr\�	set_title�suptitle�tight_layout�show�io�BytesIO�savefig�seekr�open�convertrD�array�close)*rL�input_image�max_channels�coupler�rprVro�namer|�conv_layers�all_layer_images�layerr�handle�_�act�C�H�W�max_rgb�num_rgb�rem�total_tiles�cols�rows�fig�axes�tile_idxrO�r�c�rgb�ch�v�start�j�idx�num_channels�buf�imgr~s*                                         @r7�	visualizezCNNFeatureExtractor.visualizens����	
�	�	�����"���k�2�:�:�.�� � ��-�5�5�a��A�>�D�D�F�P�P�QR�S�V�V�W]�^�A�
��U�\�\�
2�7B�7G�7G�1�7L��%�%�a�(�+�+�F�3�R]�R`�R`�ag�Rh�A��L�M�M�!%� 2� 2� 4�52� 4���f��&�"�'�'�*��6�N� 4�	�53���&�K�D�%��K�
:��0�0��9�F��Q��A��M�M�O��a�.��#�C��i�i�G�A�q�!�54�&�!�+���a�1�f�g�.���!�g��k�/�<�'�A�+�+E�F��%��m���1�k�*���2�7�7�;��#5�6�7���L�L��$���X�q�4�x�0��	��T�55�}�}�T�*����56�w��A� �D�(�A� �4��A��a��c�1�Q�3��'�*�0�0�2�C�#�A�h����G��#$�q�u�u�w�;�1�5�5�7�Q�U�U�W�3D�t�3K�"L��B��'��+�+�a��A�.�4�4�6�C���A��J�%�%�c�*���A��J�O�O�E�*���A��J�(�(�4��!��u�A�a��c�!�e�W�)=��(�J���M�H�!(�$ �!����s��A� �D�(�A� �4��A��U�Q�Y��B��r�v�v�x�-�B�F�F�H�r�v�v�x�,?�$�,F�G�B���A��J�%�%�b�v�%�6���A��J�O�O�E�*���A��J�(�(�3�u�q�y�k�):�Q�(�G���M�H�$�!��4�$�;�7�C��t��A��d�57�A���A��J�O�O�E�*�8�58���w�t�f�,F�G�RT��U�� � �"� #�1�l�3���1�l�+���2�7�7�<�$�#6�7�8���L�L��$���X�q�4�x�0��	��T�59�}�}�T�*�� ��.�C��t��A��d�60�A���A��J�%�%�c�#�h�V�%�<���A��J�O�O�E�*�	/�!��t�d�{�;�C��t��A��d�61�A���A��J�O�O�E�*�<�62���w�t�f�-���;�� � �"�����63��*�*�,�C��K�K��E�s��K�H��H�H�Q�K��*�*�S�/�)�)�%�0�C��#�#�B�H�H�S�M�2��I�I�c�N�e'�h ���y64s�(W=)rFT)65rrrrrBrXrqrwr��
__classcell__�rPs@r7r9r9<s/���-�v�-�.��(���
�N r6r9c�N��eZdZdef�fd�Zd�Zd	d�Zd66d�Zd�Zdd�Z	d�Z67�xZS)�ClassicalFeatureExtractorr:c���t�|��|j|_|j|_|j|_||_d|_d|_y)Nr{)	rArBrr r�num_downsampler:rV�convolution)rLr:rPs  �r7rBz"ClassicalFeatureExtractor.__init__�sK���
��������
� &� 7� 7���$�9�9�����������r6c��tt|j���dkDr#t|j��jS|jS)Nr)rcr_rUrTrVrWs r7rXz$ClassicalFeatureExtractor.get_devices?��14�T�$�/�/�:K�5L�1M�PQ�1Q�t�D�O�O�%�&�-�-�b�W[�Wb�Wb�br6c�4�t|�}t||�}ttj||z��}tj||||z||zf��\}}tj|�}t|�D]Q\}	\}68}}|	|z}
|	|z}||
|f}|j|69|��|j|d��|jd��St|||z�D]"}	|	|z}
|	|z}||
|fjd��$tj�|S)Nr�r�r
r�r�)rcr�r�r`r�r�r�r��	enumerater�r�r\rCr�)rL�items�max_cols�figsize_per_cell�nr�r�r�r�r�r��titler�r�r��axs                r7�render_subplotsz)ClassicalFeatureExtractor.render_subplotss����J���8�Q����2�7�7�1�t�8�$�%���L�L��$��,�,�d�5E�.E�F�70�	��T��}�}�T�"��'0��'7�#�C�#�#�u�d��t��A��d�71�A��a��d��B��I�I�c��I�%��L�L���L�+��G�G�E�N�
(8���D�4�K�(�C��t��A��d�72�A���A��J�O�O�E�"�)�73	�����74r6c��|j}tj|dzjtj75�tj�}t|j�D]}tj|�}�tj||j|j|j��}|jdd\}}g}	g}76tj||j |j"�dz}|	j%|d|�d|�f�|r|77j%|d|�d|�fddf�tj&||j(|j*|j,��}tj.|d�}t	j0|dd	�}|	j%|d|�d|�f�|r|78j%|d|�d|�fd79df�t3||j4|j6d��}
|
j9�dk7r|
|
j9�zn|
}
|	j%|
d|�d|�f�|r|80j%|
d|�d|�fd
df�dtj:dztj:dzfD]�}tj<|j>|j>f|j@||jB|jD�}tjF|tjH|�}t	jJ|�}||j9�dzz}|	j%|d|�d|�f�|s��|81j%|d|�d|�fd|d��df���tjL|tjHd	d|jN��}tjL|tjHdd	|jN��}t	jJ|�}t	jJ|�}||j9�dzz}||j9�dzz}|	j%|d|�d|�f�|	j%|d|�d|�f�|r:|82j%|d|�d|�fddf�|83j%|d|�d|�fddf�tjP|tjH�}t	jJ|�}||j9�dzz}|	j%|d|�d|�f�|r|84j%|d|�d|�fddf�tjL|tjHd	d|jN��}tjL|tjHdd	|jN��}t	jR|dz|dzz�}||j9�dzz}|	j%|d|�d|�f�|r|85j%|d|�d|�fddf�t	jT|	d��}|r3|jtjV�|jY|86d��gfS|jtjV�S)N��)�sigmaX�sigmaYrg�o@z87Canny Edger�)�	blockSize�ksize�krrz
Harris Corner�uniform)�P�R�method�LBPr]r�u	Gabor θ=z.2f)r�zSobel XzSobel Y�	LaplacianzGradient Magnituder[r)r�)-r:�cv2�cvtColor�astyper`�uint8�COLOR_RGB2GRAYrCr��pyrDown�GaussianBlurr'r(r)rd�Cannyr%r&rD�cornerHarrisr*r+r,�dilate�cliprr-r.r��pi�getGaborKernelr/r0r2r3�filter2D�CV_32F�abs�Sobelr4r��sqrtrb�float32r�)rLr�r�rp�cfgr�r��valid_H�valid_W�feature_list�	vis_items�edges�harris�lbp�theta�kernel�g�sobelx�sobely�lap�gx�gy�grad_mag�featuress                        r7�extract_featuresz*ClassicalFeatureExtractor.extract_features#s����k�k���|�|�S��W�,�,�R�X�X�6��8J�8J�K���t�*�*�+�A��;�;�t�$�D�,�����c�&8�&8��AT�AT�]`�]p�]p�q���:�:�b�q�>�������	�X�	�	�$��
�
�s�~�~�>��F�����E�(�7�(�H�W�H�"4�5�6�����e�H�W�H�h�w�h�$6�7��v�N�O��!�!�$�#�2G�2G�s�O_�O_�cf�co�co�p�����F�D�)�������A�&�����F�8�G�8�X�g�X�#5�6�7�����f�X�g�X�x��x�%7�8�/�6�R�S�#�4�3�9�9��	�	�)�T��!$����a��c�C�G�G�I�o�S�����C����(�7�(� 2�3�4�����c�(�7�(�H�W�H�"4�5�u�f�E�F�����q��"�%�%��'�*�E��'�'����#�/�/�2������ � �#�/�/��F�88���T�3�:�:�v�6�A����q�	�A�
�����4���A�����(�7�(�H�W�H�"4� 5�6��� � �!�H�W�H�h�w�h�$6�"7�9�U�3�K�9P�RX�!Y�Z�+����4����Q�����I�����4����Q�����I���������������&�*�*�,��%�%���&�*�*�,��%�%�����F�8�G�8�X�g�X�#5�6�7����F�8�G�8�X�g�X�#5�6�7�����f�X�g�X�x��x�%7�8�)�F�K�L����f�X�g�X�x��x�%7�8�)�F�K�L��m�m�D�#�*�*�-���f�f�S�k���s�w�w�y�4�������C����(�7�(� 2�3�4�����c�(�7�(�H�W�H�"4�5�{�6�J�K��Y�Y�t�S�Z�Z��A�S�_�_�
E��
�Y�Y�t�S�Z�Z��A�S�_�_�
E���7�7�2�q�5�2�q�5�=�)���H�L�L�N�T�)�)�����H�X�g�X�x��x�%7�8�9�����h�x��x��'��'9�:�<P�QW�X�Y��8�8�L�q�1����?�?�2�:�:�.��0D�0D�Y�YZ�0D�0[�/\�\�\����r�z�z�*�*r6c���t|t�rtj|d��}t|tj89�r|j
�j�}t|tj�r<|jdk(r|d}n'|jdk7rtd|j����g}|D]V}|jddk7r"tj|dd�dd�dfdd��}|j|j|���Xtj|d��}t	j|�j!�j#|j%��}|S)Nrr[r90r]z)Expected input of shape HWC or BHWC, got r)r^r_r`rbrhrkr{r�rarg�91ValueErrorrd�repeatrDrrirjrmrX)rLrorp�featsr�s     r7rqz!ClassicalFeatureExtractor.forward�s���a��������#�A��a����&�����
�
��A��a����$��v�v��{��d�G�����1�� �?����y�I������C��y�y��|�q� ��i�i��A�q�$�J����;���L�L��.�.�s�3�4��92����Q�'��� � ��'�-�-�/�2�2�4�?�?�3D�E���r6c�2�|jdk7s|jddk7r"tj|dd�dd�dfdd��}g}d�}|r�t	j93d��}t	j|�t	jd�t	jd�|rt	j�|j||��|j|d	�94�\}}|rt	j�|D]}|j||���|S)Nr95rr[c�96�tj�}|j|ddd��|jd�t	j97|�j
�}|j�tj|�|S)Nr�r�r�r�r)	r�r�r�r�rr��copyr�r�)r�r��pil_imgs   r7�98fig_to_pilz7ClassicalFeatureExtractor.visualize.<locals>.fig_to_pil�s[���*�*�,�C��K�K��E�s��K�H��H�H�Q�K��j�j��o�*�*�,�G��I�I�K��I�I�c�N��Nr6)r]r]r��Originalr�T)r�)rgrdr`rr��figurer�r�r\r�rDr)	rLr��
show_originalr��outputsrr��
feature_stack�figss	         r7r�z#ClassicalFeatureExtractor.visualize�s����8�8�q�=�C�I�I�a�L�A�-��)�)�C��1�d�99�O�Q�Q�7�C���100	���*�*�V�,�C��J�J�s�O��I�I�j�!��H�H�U�O�����101��N�N�:�c�?�+�!�2�2�3��2�F��
�d���H�H�J��C��N�N�:�c�?�+���r6c��tj|jd|jddftj��}|j	|�}|S)Nrrr102)�dtype)r`rurrrq)rL�dummyrs   r7rwz ClassicalFeatureExtractor.output�sH�����
�]�]�1�
�t�}�}�Q�/��3��*�*�103��104���U�#���r6)rr105)F)TT)rrrrrBrXr�rrqr�rwr�r�s@r7r�r��s1������c��0A+�H�0 �Fr6r�c�J��eZdZdef�fd�Zd�Zdejfd�Z�xZ	S)�FullyConnectedHeadr:c�V��t�|��t|�}||_g}d}t	|j106�D]�}|j
tj||��|j
tj|��|j
tj��|j
tj|j��|}t|dz|dz�}��|j
tj||��tj|�|_y)Nir)rArBrc�classesrCrrDrE�Linear�BatchNorm1drH�Dropoutrr�rJrK)	rL�in_featuresr)r:�num_classesrK�107hidden_dimr�rPs	        �r7rBzFullyConnectedHead.__init__�s����
�����'�l��������108��v�+�+�,�A��M�M�"�)�)�K��<�=��M�M�"�.�.��4�5��M�M�"�'�'�)�$��M�M�"�*�*�V�^�^�4�5�$�K��Z�1�_�k�A�o�>�J�-�	�
�
�b�i�i��K�8�9��m�m�V�,��r6c�H�t|j��jSrRrSrWs r7rXzFullyConnectedHead.get_device�rYr6roc�b�|j|j��}|j|�SrR)rmrXrKrns   r7rqzFullyConnectedHead.forwards%��109�$�$�t��� �110!���{�{�1�~�r6)111rrrrrBrXrhrkrqr�r�s@r7r'r'�s$���-��-� .�����r6r'c�r��eZdZdef�fd�Zd�Zej�d��Zd�Z	d	d�Z112defd�Z�xZ
S)113�114Classifierr:c���t�|��||_||_||_tj�|_|j�}|j|�}|jd}t|||�|_y)Nr)rArBr:r)�backbonerE�Flatten�flattenrwrdr'�head)rLr5r)r:�feat�flatr-rPs       �r7rBzClassifier.__init__sg���
���������� ��
��z�z�|������ ���|�|�D�!���j�j��m��&�{�7�6�B��	r6c�H�t|j��jSrRrSrWs r7rXzClassifier.get_devicerYr6c�2�|j�|jj}tj||�}|j|�}t
j|d��}t
j|d��j�}|j|S)Nr)�dim)rsr:rr��resizerqrh�softmax�argmax�itemr))rLro�target_size�logits�probs�pred_idxs      r7�predictzClassifier.predictso���	�	���k�k�*�*���J�J�q�+�&�����a����
�
�f��+���<�<��1�-�2�2�4���|�|�H�%�%r6c�t�|j|fi|��}|j|fi|��}|j|fi|��SrR)r5r7r8)rLrorpr9s    r7rqzClassifier.forwardsB���t�}�}�Q�(��(���t�|�|�D�*�6�*���t�y�y��'��'�'r6c���|jj}tj||�}|r|jj115|fi|��S|jj116|fi|��yrR)r:rr�r>r5r�)rLr��117return_imgrprBs     r7�visualize_featurezClassifier.visualize_feature"sY���k�k�*�*���j�j��k�*���*�4�=�=�*�*�3�8��8�8�#�D�M�M�#�#�C�1�&�1r6�pathc��tjtjj|�d��t	j118|j
�|j|jd�|�td|���y)NT)�exist_ok)�model_state_dictr)r:zModel saved to )119�os�makedirsrK�dirnamerh�save�120state_dictr)r:�print)rLrKs  r7rRzClassifier.save)s\��121���B�G�G�O�O�D�)�D�9�
�122�123� $��� 1��|�|��k�k�124��		�125	���v�&�'r6)T)rrrrrBrXrhrtrFrqrJ�strrRr�r�s@r7r3r3sH���	C��	C�.��U�]�]�_�&��&�(�2�(��(r6r3rKc��tj||d��}|d}|d}||�j|�}t|||�j|�}|j	|d�|j�t
d|���|S)NF)�map_location�weights_onlyr:r)rNzModel loaded from )rh�loadrmr3�load_state_dictrsrT)rK�backbone_classrV�126checkpointr:r)r5�models        r7rYrY2s������D�v�5�I�J�
��
!�F���#�G��f�%�(�(��0�H��x��&�1�4�4�V�<�E�	���*�%7�8�9�	�J�J�L�	��t�f�127%�&��Lr6)r{)rh�torch.nnrEr�r�r`�dataclassesr�skimage.featurerr�	itertools�torch.nn.functional�128functional�F�matplotlib.pyplot�pyplotr�rOr��PILrr�Moduler9r�r'r3�staticmethodrUrYr5r6r7�<module>rjs�����129��!�4�����	�	��130�*�*��*�Z@ �"�)�)�@ �Dl��	�	�l�`�����.+(����+(�Z�	�s�	��	r6